@touchtech/baselayer-ui 8.3.0-alpha.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +38 -20
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see index.js.LICENSE.txt */
2
- (()=>{"use strict";var e={5348:(e,t,n)=>{n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>Y,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const c=new WeakMap,d={},s={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,j]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],x={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},E={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),j("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{j("online",t),j("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,L=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?S(e):"",t]};let N=0;const z=()=>++N,H=2;var A=H;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const d=!1!==a.revalidate,s=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=c.get(t),b=v[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=z();_[o]=[S,0];const P=!h(u),C=a(),j=C.data,x=C._c,E=h(x)?j:x;if(P&&(u=m(u)?u(E):u,l({data:u,_c:E})),m(M))try{M=M(E)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=E,l({data:M,_c:p}))}i&&(w||(m(i)&&(M=i(M,E)),l({data:M,_c:p}))),_[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:M;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!c.has(e)){const n=_(E,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(let e=o.length;e--;)o[e](n,r)},d=()=>{if(!c.has(e)&&(c.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[W,G]=V(new Map),U=_({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},x),K=(0,r.createContext)({}),q=b&&window.__SWR_DEVTOOLS_USE__,Z=q?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(U,(0,r.useContext)(K));Z.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=c.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));q&&(window.__SWR_DEVTOOLS_REACT__=r);const X={dedupe:!0};function Y(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(K),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,[u]=(0,r.useState)((()=>l?V(l(i.cache||W),a):p));return u&&(i.cache=u[0],i.mutate=u[1]),D((()=>{if(u)return u[2]&&u[2](),u[3]}),[]),(0,r.createElement)(K.Provider,_(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",open:"HiCai5Adscx8ZbGll4SR",drawerContent:"iIgBAsoPEjFOkH8UnKVX",drawerHeaderContent:"VC8jvVhJRcftqlacGAGI",drawerHeaderCloseIconContent:"JR5GIFQGA_SZ87ScUlE9",drawerHeaderCloseIcon:"B6Rc33pQzXBOube0jdZ9",drawerMain:"MyiN1UNjbOTgwJ1TXmEY",drawerFooter:"Cea_ntGL595Gdnjs1DqU"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",visible:"uToJfcRCR6eVHIm80wGb",notVisible:"hGxgyhPmQmM97ViOpcv8",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,c=e.allowTabFill,d=e.allowEnterFill,s=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),_=l.useRef(null),g=l.useState(""),b=g[0],y=g[1],O=l.useState(""),w=O[0],M=O[1],S=l.useState(""),P=S[0],C=S[1],j=l.useState(),x=j[0],E=j[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&T(m,_,e)}}));var R=function(e){M(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",C(t),E(n),f&&f(n)},L=function(){if(""!==P&&k){var e=b+P;k.target.value=e,v.onChange&&v.onChange(k),R(""),s&&s(x),y(e)}},T=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},N=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==_?void 0:_.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?L():(t&&c&&"Tab"===e.key&&""!==P||t&&d&&"Enter"===e.key&&""!==P)&&(e.preventDefault(),L()),v.onKeyDown&&v.onKeyDown(e)},ref:N&&"string"!=typeof N?u.mergeRefs(N,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:_,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?P&&""!==P&&(L(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:P&&""!==P?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:P,tabIndex:-1}))))}},2394:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>x});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,d))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=s["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=c[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),d[17]=!0,d[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var v=s[r][f],h=v.splitKey,m=v.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function M(e,t,n){p=[];var r=i(e),l=[],c="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(c=t.scope),t.element&&(f=t.element),t.keyup&&(g=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(c=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(s).forEach((function(n){var r=s[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(s).forEach((function(e){return delete s[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var j=n(6689);function x(){return M.isPressed}M.filter=function(){return!0};var E=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return E(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,j.useRef)(null),m=(0,j.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(I(e)&&!E(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,j.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var D=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var r=n(6689),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},i(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const u=l},5022:(e,t,n)=>{function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>E,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var c=n(6689);function d(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var s="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=s(),r={id:requestAnimationFrame((function o(){s()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function _(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var g=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,j=e.shouldResetStyleCacheOnItemSizeChange,x=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,c=r._getItemStyleCache(j&&i,j&&l,j&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;c[s]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),x(e),null};var E=t.prototype;return E.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},E.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,c=a.width,d=this.state,f=d.scrollLeft,p=d.scrollTop,_=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var g=s(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>c?_:0,O=g>l?_:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},E.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},E.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},E.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},E.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,d=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],j=this._getVerticalRangeToRender(),x=j[0],E=j[1],I=[];if(o>0&&g)for(var k=x;k<=E;k++)for(var D=P;D<=C;D++)I.push((0,c.createElement)(t,{columnIndex:D,data:f,isScrolling:O?M:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=s(this.props,this._instanceProps),L=v(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:I,ref:l,style:{height:R,pointerEvents:M?"none":void 0,width:L}}))},E._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],p=d[2],v=d[3];this._callOnItemsRendered(i,l,s,f,u,c,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},E._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,s,this._instanceProps),v=l(this.props,p,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},E._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,d),v=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-p),Math.max(0,Math.min(a-1,f+v)),s,f]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},S=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?C(e,t,n,a,0,r):j(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},j=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},x=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},E=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return x("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return x("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,d=e.getOffsetForIndexAndAlignment,s=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?d:0;c[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(d(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,d=e.innerTagName,s=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],j=[];if(s>0)for(var x=P;x<=C;x++)j.push((0,c.createElement)(t,{data:f,key:v(x,f),index:x,isScrolling:b?O:void 0,style:this._getItemStyle(x)}));var E=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:j,ref:l,style:{height:w?"100%":E,pointerEvents:O?"none":void 0,width:w?E:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=s(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},L=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=L(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},N=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return L(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:N,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=L(e,t,o),f=N(e,o),p=Math.max(0,Math.min(f-d,s.offset)),v=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=v-d&&r<=p+d?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&L(e,n,t).offset<r;)n+=a,a*=2;return T(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,c="horizontal"===o||"horizontal"===l?u:a,d=L(e,t,r),s=n+c,f=d.offset+d.size,p=t;p<i-1&&f<s;)p++,f+=L(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),H=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),A=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,p=Math.max(0,u*c-f),v=Math.min(p,t*c),h=Math.max(0,t*c-f+c+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=d(e,F),o=t.style,a=d(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7237:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,j=void 0!==C&&C,x=e.autoFocus,E=void 0!==x&&x,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=e.size,T=void 0===L?"medium":L,N=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[T],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=j,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:E,type:N,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,c=e.className,d=e.size,s=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,j=void 0!==C&&C,x=e.disabled,E=void 0!==x&&x,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=E,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=j,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},L),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(4115),d=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,s=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},3096:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(2838));t.default=function(e){var t,n=e.header,r=e.footer,c=e.open,d=e.children,s=e.className,f=e.style,p=e.onClose;return a.default.createElement("div",{className:(0,o.default)([u.default.drawer,(t={},t[u.default.open]=c,t),s]),style:f},a.default.createElement("div",{className:u.default.drawerContent},a.default.createElement("div",{className:u.default.drawerHeaderContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIconContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:p},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),!!n&&a.default.createElement("div",null,n)),a.default.createElement("div",{className:u.default.drawerMain},d),!!r&&a.default.createElement("div",{className:u.default.drawerFooter},r)))}},3212:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!v)};return i.default.createElement(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,j=e.rounded,x=void 0!==j&&j,E=e.size,I=void 0===E?"medium":E;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=x,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,p="center"===s.vertical?"verticalCenter":s.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,j=e.size,x=void 0===j?"medium":j,E=e.type,I=void 0===E?"button":E;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[x],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:x,inverted:g}),u)}},2847:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,j=void 0!==C&&C,x=e.size,E=void 0===x?"medium":x,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([c.default.container,c.default[E],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=j,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:E,inverted:h}),d)}},5860:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,f=e.decoding,p=void 0===f?"auto":f,v=e.loading,h=void 0===v?"eager":v,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:p,loading:h,style:m});return u?o.default.createElement("div",{ref:c,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:c,inverted:r,transparent:s,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(c.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),p&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),c=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,c=e.className,d=e.noPadding,s=void 0!==d&&d,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(c(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=d,t)]),onClick:f},n)}},6650:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(4685)),d=n(5348),s=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,d.useToggle)(a),h=i[0],m=i[1],_=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:c.default.header,onClick:_},l.default.createElement("div",{className:c.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[c.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.SelectContext),i=a.multiple,f=a.selectedOptions,p=a.updateSelectedOption,v=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){p(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var c=n(5348),d=i(n(6689)),s=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useMemo)((function(){return P.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[M,P,t.isOption]),j=(0,d.useMemo)((function(){return O.filter((function(e){return P.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,P]),x=(0,d.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=P.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[P,t.isOption,u,w,m]);return(0,d.useEffect)((function(){j===C?m(!0):u&&m(!1)}),[j,C,u,m]),d.default.createElement("div",{className:h.default.container},y&&g&&!!P.length&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:x},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!j&&j!==C,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.length?P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(p.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):d.default.createElement("div",{className:h.default.noOptions},"No matches for",d.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(2396)),d=n(2568),s=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(d.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,t])},l.default.createElement("div",{className:c.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:c.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(3790)),d=i(n(7917)),s=n(5348),f=n(2568),p=n(4745),v=n(8947),h=n(2847),m=n(4292),_=n(4115);t.default=function(e){var t,n,r,o=e.className,a=e.defaultValue,i=e.disabled,g=e.multiple,b=void 0!==g&&g,y=e.options,O=e.placeholder,w=e.label,M=e.selectAll,S=e.showExpandedGroup,P=e.scrollMenuIntoView,C=void 0!==P&&P,j=e.size,x=void 0===j?"medium":j,E=e.showSelectedAsTags,I=void 0!==E&&E,k=e.showSearch,D=void 0!==k&&k,R=e.width,L=e.onChange,T=e.onFilter,N=(0,s.useToggle)(!1),z=N[0],H=N[1],A=(0,s.useOutsideClick)((function(){return H(!1)})),B=(0,l.useRef)(),F=(0,l.useCallback)((function(){B.current&&B.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(B.current&&z&&C){var e=new ResizeObserver(F);return e.observe(B.current),function(){e.disconnect(),e=null}}}),[z,C,F]);var V=(0,l.useCallback)((function(){H()}),[]),W=(0,l.useCallback)((function(e){b||H(!1),L&&L(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:W,selectAll:M,showExpandedGroup:S},l.default.createElement("div",{ref:A},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t),d.default[x],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([d.default.header,(n={},n[d.default.active]=z,n)]),onClick:V},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:I,isDropdownOpened:z}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(r={},r[d.default.expanded]=z,r)]),src:c.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:d.default.content,ref:B},0===y.length?l.default.createElement("div",{className:d.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:T,onChange:W}))))))}},2568:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),c={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(c.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(c.searchKeyword),y=b[0],O=b[1],w=(0,l.useCallback)((function(e){var t;t=o?_.some((function(t){return t.value===e.value}))?_.filter((function(t){return t.value!==e.value})):i(i([],_,!0),[e],!1):[e],g(t),h&&h(t.map((function(e){return e.value})))}),[_,g]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),g(t)}}),[n,v]);var M=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[s,_,g,w,y,O]);return l.default.createElement(d.Provider,{value:M},t)}},237:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),c=n(2568),d=n(2149),s=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(c.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,s.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(d.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),_=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:_:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].label):h}},4745:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),c=l(n(7659)),d=n(5022),s=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,_=e.pageSize,g=void 0===_?v.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,M=e.headerHeight,S=void 0===M?v.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,j=e.itemsCount,x=e.isHeaderSticky,E=void 0!==x&&x,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),L=R[0],T=R[1],N=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;T(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==j&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,j,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},N)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:E,headerHeight:S}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,c=e.isHeaderSticky,d=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),c=i(n(6689)),d=n(4958),s=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,_=n.className,g=(0,c.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return c.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,_,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(7451)),d=n(4958),s=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.disabled]=i,t)])},l.default.createElement("span",{className:s.default.content},n),r&&l.default.createElement("span",{className:s.default.closeButton,onClick:v},l.default.createElement(d.Icon,{src:c.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),c=l(n(7659)),d=n(1982),s=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,_=e.inputRef,g=e.size,b=void 0===g?"small":g,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,M=void 0!==w&&w,S=e.noBorder,P=void 0!==S&&S,C=e.inputMode,j=e.disabled,x=e.tagOptions,E=void 0===x?[]:x,I=(0,u.useState)(""),k=I[0],D=I[1],R=(0,u.useState)(),L=R[0],T=R[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,d.v4)(),label:e}}));T(e)}}),[l,T]);var N=(0,u.useCallback)((function(e){var t=e.target.value;D(t)}),[D]),z=(0,u.useCallback)((function(e){var t=L.filter((function(t){return t.id!==e}));if(T(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[L,T]),H=(0,u.useCallback)((function(){var e=k.trim(),t=i([],L,!0);if(e.length>0){var n={id:(0,d.v4)(),label:e};t=i(i([],L,!0),[n],!1)}if(T(t),D(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[L,k,T,D]),A=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),H())}),[H]),B=(0,f.useOutsideClick)((function(){return H()})),F=u.default.createElement(s.Hint,{options:E,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:_,className:(0,c.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=P,t)]),onChange:N,onKeyDown:A,pattern:m,placeholder:a,name:h,type:O,value:k,autoFocus:M,inputMode:C,disabled:j}));return u.default.createElement("div",{className:(0,c.default)([v.default.container,(n={},n[v.default.disabled]=j,n),r]),ref:B},null==L?void 0:L.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:z,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},F))}},2819:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.showTooltip,a=(0,l.useState)(),i=a[0],d=a[1],s=(0,l.useCallback)((function(){d(!0)}),[]);return(0,l.useEffect)((function(){var e=setTimeout((function(){return Boolean}));return i&&(e=setTimeout((function(){return d(!1)}),5e3)),function(){return clearTimeout(e)}}),[i]),l.default.createElement(l.default.Fragment,null,o?l.default.createElement("div",{"data-text":n,"data-testid":"tooltip",className:(0,u.default)([c.default.tooltip,c.default[r],void 0===i?null:i?c.default.visible:c.default.notVisible]),onTouchEnd:s},t):t)}},746:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,p=e.autoPlay,v=void 0===p||p,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},3250:(e,t,n)=>{var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},1982:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),c=f(n(6435)),d=f(n(4008)),s=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,c=-271733879,d=-1732584194,s=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=c,p=d,v=s;o=a(o,c,d,s,e[t],7,-680876936),s=a(s,o,c,d,e[t+1],12,-389564586),d=a(d,s,o,c,e[t+2],17,606105819),c=a(c,d,s,o,e[t+3],22,-1044525330),o=a(o,c,d,s,e[t+4],7,-176418897),s=a(s,o,c,d,e[t+5],12,1200080426),d=a(d,s,o,c,e[t+6],17,-1473231341),c=a(c,d,s,o,e[t+7],22,-45705983),o=a(o,c,d,s,e[t+8],7,1770035416),s=a(s,o,c,d,e[t+9],12,-1958414417),d=a(d,s,o,c,e[t+10],17,-42063),c=a(c,d,s,o,e[t+11],22,-1990404162),o=a(o,c,d,s,e[t+12],7,1804603682),s=a(s,o,c,d,e[t+13],12,-40341101),d=a(d,s,o,c,e[t+14],17,-1502002290),c=a(c,d,s,o,e[t+15],22,1236535329),o=i(o,c,d,s,e[t+1],5,-165796510),s=i(s,o,c,d,e[t+6],9,-1069501632),d=i(d,s,o,c,e[t+11],14,643717713),c=i(c,d,s,o,e[t],20,-373897302),o=i(o,c,d,s,e[t+5],5,-701558691),s=i(s,o,c,d,e[t+10],9,38016083),d=i(d,s,o,c,e[t+15],14,-660478335),c=i(c,d,s,o,e[t+4],20,-405537848),o=i(o,c,d,s,e[t+9],5,568446438),s=i(s,o,c,d,e[t+14],9,-1019803690),d=i(d,s,o,c,e[t+3],14,-187363961),c=i(c,d,s,o,e[t+8],20,1163531501),o=i(o,c,d,s,e[t+13],5,-1444681467),s=i(s,o,c,d,e[t+2],9,-51403784),d=i(d,s,o,c,e[t+7],14,1735328473),c=i(c,d,s,o,e[t+12],20,-1926607734),o=l(o,c,d,s,e[t+5],4,-378558),s=l(s,o,c,d,e[t+8],11,-2022574463),d=l(d,s,o,c,e[t+11],16,1839030562),c=l(c,d,s,o,e[t+14],23,-35309556),o=l(o,c,d,s,e[t+1],4,-1530992060),s=l(s,o,c,d,e[t+4],11,1272893353),d=l(d,s,o,c,e[t+7],16,-155497632),c=l(c,d,s,o,e[t+10],23,-1094730640),o=l(o,c,d,s,e[t+13],4,681279174),s=l(s,o,c,d,e[t],11,-358537222),d=l(d,s,o,c,e[t+3],16,-722521979),c=l(c,d,s,o,e[t+6],23,76029189),o=l(o,c,d,s,e[t+9],4,-640364487),s=l(s,o,c,d,e[t+12],11,-421815835),d=l(d,s,o,c,e[t+15],16,530742520),c=l(c,d,s,o,e[t+2],23,-995338651),o=u(o,c,d,s,e[t],6,-198630844),s=u(s,o,c,d,e[t+7],10,1126891415),d=u(d,s,o,c,e[t+14],15,-1416354905),c=u(c,d,s,o,e[t+5],21,-57434055),o=u(o,c,d,s,e[t+12],6,1700485571),s=u(s,o,c,d,e[t+3],10,-1894986606),d=u(d,s,o,c,e[t+10],15,-1051523),c=u(c,d,s,o,e[t+1],21,-2054922799),o=u(o,c,d,s,e[t+8],6,1873313359),s=u(s,o,c,d,e[t+15],10,-30611744),d=u(d,s,o,c,e[t+6],15,-1560198380),c=u(c,d,s,o,e[t+13],21,1309151649),o=u(o,c,d,s,e[t+4],6,-145523070),s=u(s,o,c,d,e[t+11],10,-1120210379),d=u(d,s,o,c,e[t+2],15,718787259),c=u(c,d,s,o,e[t+9],21,-343485551),o=r(o,n),c=r(c,f),d=r(d,p),s=r(s,v)}return[o,c,d,s]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],c=o[2],d=o[3],s=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,c,d)+s+t[o]+a[e]>>>0;s=d,d=c,c=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+c>>>0,o[3]=o[3]+d>>>0,o[4]=o[4]+s>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,c=0;t.default=function(e,t,n){let r=t&&n||0;const d=t||new Array(16);let s=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==s||null==f){const t=e.random||(e.rng||o.default)();null==s&&(s=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:c+1;const h=p-u+(v-c)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,c=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;d[r++]=m>>>24&255,d[r++]=m>>>16&255,d[r++]=m>>>8&255,d[r++]=255&m;const _=p/4294967296*1e4&268435455;d[r++]=_>>>8&255,d[r++]=255&_,d[r++]=_>>>24&15|16,d[r++]=_>>>16&255,d[r++]=f>>>8|128,d[r++]=255&f;for(let e=0;e<6;++e)d[r+e]=s[e];return t||(0,a.unsafeStringify)(d)}},8237:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(r),c.set(e,r.length),c=n(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=c[e];return i}return(0,o.unsafeStringify)(c)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{e.exports=require("react")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUVsUSxPQUFPLEdBQU8sRUNGOUQsSUFBSTZ4QyxFQUFzQlIsRUFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZU91dHNpZGVDbGljay91c2VPdXRzaWRlQ2xpY2suanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlUHJvbWlzZS91c2VQcm9taXNlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9faW50ZXJuYWwvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc3dyL2NvcmUvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VTV1JIb29rc0NvbmZpZy91c2VTV1JIb29rc0NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2ZmMWIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzQzMjgiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz9jMGI2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz9mZjJmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIubW9kdWxlLmNzcz84NzE5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz9mY2UyIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz9hOGFlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlci5tb2R1bGUuY3NzPzkyOWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9DbGlja2FibGUubW9kdWxlLmNzcz83YTBkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzP2Q1NTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz8wOTlkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/MWNhYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzPzU5NmYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzPzJjNDQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzP2YxMGUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzQ2OWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzNjZDQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzcz9kZmZhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Lm1vZHVsZS5jc3M/MTkwYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzP2NkMzQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/YWFjZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/YjVkYiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/OGE4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQubW9kdWxlLmNzcz82NWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MzcxNyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzPzRkYjQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL09wdGlvbi5tb2R1bGUuY3NzP2I2NzQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0Lm1vZHVsZS5jc3M/NDlhYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvU2VhcmNoLm1vZHVsZS5jc3M/ZWQ0MyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QubW9kdWxlLmNzcz8xZTc5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLm1vZHVsZS5jc3M/OWFiZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLm1vZHVsZS5jc3M/OTNhOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3M/NzBkZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzPzFkMGMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy5tb2R1bGUuY3NzP2I5NTUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwubW9kdWxlLmNzcz9kYTVhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL1RhZy5tb2R1bGUuY3NzPzhmMzYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvVGFnc0lucHV0Lm1vZHVsZS5jc3M/OGZkMSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQubW9kdWxlLmNzcz8zZjFmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz81ODg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz9lYzg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9Ub29sdGlwLm1vZHVsZS5jc3M/MDZhZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZWRhNyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvY29tcGxldGUtaGludC9kaXN0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvY29tcGxldGUtaGludC9kaXN0L3NyYy91dGlscy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY3Jvc3NlZC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG52YXIgb3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiB0cnVlLFxufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICB9LCBbY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlT3V0c2lkZUNsaWNrLmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XHJcbiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcclxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICBkb25lID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XHJcbiAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSwgY3JlYXRlRWxlbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuLy8gR2xvYmFsIHN0YXRlIHVzZWQgdG8gZGVkdXBsaWNhdGUgcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVyc1xuY29uc3QgU1dSR2xvYmFsU3RhdGUgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBFTVBUWV9DQUNIRSA9IHt9O1xuY29uc3QgSU5JVElBTF9DQUNIRSA9IHt9O1xuY29uc3Qgbm9vcCA9ICgpPT57fTtcbi8vIFVzaW5nIG5vb3AoKSBhcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGFzIHVuZGVmaW5lZCBjYW4gYmUgcmVwbGFjZWRcbi8vIGJ5IHNvbWV0aGluZyBlbHNlLiBQcmV0dGllciBpZ25vcmUgYW5kIGV4dHJhIHBhcmVudGhlc2VzIGFyZSBuZWNlc3NhcnkgaGVyZVxuLy8gdG8gZW5zdXJlIHRoYXQgdHNjIGRvZXNuJ3QgcmVtb3ZlIHRoZSBfX05PSU5MSU5FX18gY29tbWVudC5cbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgVU5ERUZJTkVEID0gLyojX19OT0lOTElORV9fKi8gbm9vcCgpO1xuY29uc3QgT0JKRUNUID0gT2JqZWN0O1xuY29uc3QgaXNVbmRlZmluZWQgPSAodik9PnYgPT09IFVOREVGSU5FRDtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodik9PnR5cGVvZiB2ID09ICdmdW5jdGlvbic7XG5jb25zdCBtZXJnZU9iamVjdHMgPSAoYSwgYik9Pih7XG4gICAgICAgIC4uLmEsXG4gICAgICAgIC4uLmJcbiAgICB9KTtcbmNvbnN0IFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSB0aGUgZnVuY3Rpb24gdG8gZ3VhcmFudGVlIGl0J3MgcmUtZXZhbHVhdGVkIGJldHdlZW4ganNkb20gYW5kIG5vZGUgcnVudGltZSBmb3IgdGVzdHMuXG5jb25zdCBpc1dpbmRvd0RlZmluZWQgPSB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBpc0RvY3VtZW50RGVmaW5lZCA9IHR5cGVvZiBkb2N1bWVudCAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKCk9PmlzV2luZG93RGVmaW5lZCAmJiB0eXBlb2Ygd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgY3JlYXRlQ2FjaGVIZWxwZXIgPSAoY2FjaGUsIGtleSk9PntcbiAgICBjb25zdCBzdGF0ZSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gR2V0dGVyXG4gICAgICAgICgpPT5jYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRSxcbiAgICAgICAgLy8gU2V0dGVyXG4gICAgICAgIChpbmZvKT0+e1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIC8vIEJlZm9yZSB3cml0aW5nIHRvIHRoZSBzdG9yZSwgd2Uga2VlcCB0aGUgdmFsdWUgaW4gdGhlIGluaXRpYWwgY2FjaGVcbiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIG5vdCB0aGVyZSB5ZXQuXG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIElOSVRJQUxfQ0FDSEUpKSB7XG4gICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ0FDSEVba2V5XSA9IHByZXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlWzVdKGtleSwgbWVyZ2VPYmplY3RzKHByZXYsIGluZm8pLCBwcmV2IHx8IEVNUFRZX0NBQ0hFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gU3Vic2NyaWJlclxuICAgICAgICBzdGF0ZVs2XSxcbiAgICAgICAgLy8gR2V0IHNlcnZlciBjYWNoZSBzbmFwc2hvdFxuICAgICAgICAoKT0+e1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIHdhcyB1cGRhdGVkIG9uIHRoZSBjbGllbnQsIHdlIHJldHVybiB0aGUgc3RvcmVkIGluaXRpYWwgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBJTklUSUFMX0NBQ0hFKSByZXR1cm4gSU5JVElBTF9DQUNIRVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBkb25lIGFueSBjbGllbnQtc2lkZSB1cGRhdGVzLCB3ZSByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEU7XG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLy8gdXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIG9iamVjdC0+a2V5IG1hcHBpbmdcbi8vIHNvIHRoZSBvYmplY3RzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlYWtNYXAgdXNlcyBhIGhhc2h0YWJsZSB1bmRlciB0aGUgaG9vZCwgc28gdGhlIGxvb2t1cFxuLy8gY29tcGxleGl0eSBpcyBhbG1vc3QgTygxKS5cbmNvbnN0IHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxubGV0IGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2FibGUuXG5jb25zdCBzdGFibGVIYXNoID0gKGFyZyk9PntcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGFyZztcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGFyZyAmJiBhcmcuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBhcmcubGVuZ3RoOyBpbmRleCsrKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSghaXNVbmRlZmluZWQoaW5kZXggPSBrZXlzLnBvcCgpKSl7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggKyAnOicgKyBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGUgPyBhcmcudG9KU09OKCkgOiB0eXBlID09ICdzeW1ib2wnID8gYXJnLnRvU3RyaW5nKCkgOiB0eXBlID09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkoYXJnKSA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gdGhlIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmthcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gdGhlIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovIGxldCBvbmxpbmUgPSB0cnVlO1xuY29uc3QgaXNPbmxpbmUgPSAoKT0+b25saW5lO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbmNvbnN0IFtvbldpbmRvd0V2ZW50LCBvZmZXaW5kb3dFdmVudF0gPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyBbXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpLFxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuXSA6IFtcbiAgICBub29wLFxuICAgIG5vb3Bcbl07XG5jb25zdCBpc1Zpc2libGUgPSAoKT0+e1xuICAgIGNvbnN0IHZpc2liaWxpdHlTdGF0ZSA9IGlzRG9jdW1lbnREZWZpbmVkICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbmNvbnN0IGluaXRGb2N1cyA9IChjYWxsYmFjayk9PntcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xuY29uc3QgaW5pdFJlY29ubmVjdCA9IChjYWxsYmFjayk9PntcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgY29uc3Qgb25PbmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgY29uc3Qgb25PZmZsaW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbmNvbnN0IHByZXNldCA9IHtcbiAgICBpc09ubGluZSxcbiAgICBpc1Zpc2libGVcbn07XG5jb25zdCBkZWZhdWx0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdFxufTtcblxuY29uc3QgSVNfUkVBQ1RfTEVHQUNZID0gIVJlYWN0LnVzZUlkO1xuY29uc3QgSVNfU0VSVkVSID0gIWlzV2luZG93RGVmaW5lZCB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5jb25zdCByQUYgPSAoZik9Pmhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBJU19TRVJWRVIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3Q7XG4vLyBUaGlzIGFzc2lnbm1lbnQgaXMgdG8gZXh0ZW5kIHRoZSBOYXZpZ2F0b3IgdHlwZSB0byB1c2UgZWZmZWN0aXZlVHlwZS5cbmNvbnN0IG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbi8vIEFkanVzdCB0aGUgY29uZmlnIGJhc2VkIG9uIHNsb3cgY29ubmVjdGlvbiBzdGF0dXMgKDw9IDcwS2JwcykuXG5jb25zdCBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiYgbmF2aWdhdG9yQ29ubmVjdGlvbiAmJiAoW1xuICAgICdzbG93LTJnJyxcbiAgICAnMmcnXG5dLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHwgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChrZXkpPT57XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBrZXkgYXMgdGhlIGFyZ3VtZW50IG9mIGZldGNoZXIuIFRoaXMgY2FuIGJlIGEgc3RyaW5nIG9yIGFuXG4gICAgLy8gYXJyYXkgb2YgdmFsdWVzLlxuICAgIGNvbnN0IGFyZ3MgPSBrZXk7XG4gICAgLy8gSWYga2V5IGlzIG5vdCBmYWxzeSwgb3Igbm90IGFuIGVtcHR5IGFycmF5LCBoYXNoIGl0LlxuICAgIGtleSA9IHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSkgPyBzdGFibGVIYXNoKGtleSkgOiAnJztcbiAgICByZXR1cm4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGFyZ3NcbiAgICBdO1xufTtcblxuLy8gR2xvYmFsIHRpbWVzdGFtcC5cbmxldCBfX3RpbWVzdGFtcCA9IDA7XG5jb25zdCBnZXRUaW1lc3RhbXAgPSAoKT0+KytfX3RpbWVzdGFtcDtcblxuY29uc3QgRk9DVVNfRVZFTlQgPSAwO1xuY29uc3QgUkVDT05ORUNUX0VWRU5UID0gMTtcbmNvbnN0IE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUga2V5cy5cbiAgICAgICAgICAgICFrZXkuc3RhcnRzV2l0aCgnJGluZiQnKSAmJiBrZXlGaWx0ZXIoY2FjaGUuZ2V0KGtleSkuX2spKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXRjaGVkS2V5cy5tYXAobXV0YXRlQnlLZXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG11dGF0ZUJ5S2V5KF9rZXkpO1xuICAgIGFzeW5jIGZ1bmN0aW9uIG11dGF0ZUJ5S2V5KF9rKSB7XG4gICAgICAgIC8vIFNlcmlhbGl6ZSBrZXlcbiAgICAgICAgY29uc3QgW2tleV0gPSBzZXJpYWxpemUoX2spO1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBbZ2V0LCBzZXRdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXZhbGlkYXRlID0gKCk9PntcbiAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUga2V5IGJ5IGRlbGV0aW5nIHRoZSBjb25jdXJyZW50IHJlcXVlc3QgbWFya2VycyBzbyBuZXdcbiAgICAgICAgICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRvcnMgJiYgcmV2YWxpZGF0b3JzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKCgpPT5nZXQoKS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0KCkuZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgIHJldHVybiBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSA9IF9kYXRhO1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIC8vIFVwZGF0ZSBnbG9iYWwgdGltZXN0YW1wcy5cbiAgICAgICAgY29uc3QgYmVmb3JlTXV0YXRpb25UcyA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICBNVVRBVElPTltrZXldID0gW1xuICAgICAgICAgICAgYmVmb3JlTXV0YXRpb25UcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaGFzT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQob3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGdldCgpO1xuICAgICAgICAvLyBgZGlzcGxheWVkRGF0YWAgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb24gc2NyZWVuLiBJdCBjb3VsZCBiZSB0aGUgb3B0aW1pc3RpYyB2YWx1ZVxuICAgICAgICAvLyB0aGF0IGlzIGdvaW5nIHRvIGJlIG92ZXJyaWRkZW4gYnkgYSBgY29tbWl0dGVkRGF0YWAsIG9yIGdldCByZXZlcnRlZCBiYWNrLlxuICAgICAgICAvLyBgY29tbWl0dGVkRGF0YWAgaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBmZXRjaCBvciBtdXRhdGlvbi5cbiAgICAgICAgY29uc3QgZGlzcGxheWVkRGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gc3RhdGUuX2M7XG4gICAgICAgIGNvbnN0IGNvbW1pdHRlZERhdGEgPSBpc1VuZGVmaW5lZChjdXJyZW50RGF0YSkgPyBkaXNwbGF5ZWREYXRhIDogY3VycmVudERhdGE7XG4gICAgICAgIC8vIERvIG9wdGltaXN0aWMgZGF0YSB1cGRhdGUuXG4gICAgICAgIGlmIChoYXNPcHRpbWlzdGljRGF0YSkge1xuICAgICAgICAgICAgb3B0aW1pc3RpY0RhdGEgPSBpc0Z1bmN0aW9uKG9wdGltaXN0aWNEYXRhKSA/IG9wdGltaXN0aWNEYXRhKGNvbW1pdHRlZERhdGEpIDogb3B0aW1pc3RpY0RhdGE7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHNldCBvcHRpbWlzdGljIGRhdGEsIGJhY2t1cCB0aGUgY3VycmVudCBjb21taXR0ZWREYXRhIGRhdGEgaW4gYF9jYC5cbiAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgZGF0YTogb3B0aW1pc3RpY0RhdGEsXG4gICAgICAgICAgICAgICAgX2M6IGNvbW1pdHRlZERhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGBkYXRhYCBpcyBhIHByb21pc2UvdGhlbmFibGUsIHJlc29sdmUgdGhlIGZpbmFsIGRhdGEgZmlyc3QuXG4gICAgICAgIGlmIChkYXRhICYmIGlzRnVuY3Rpb24oZGF0YS50aGVuKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgZGF0YS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgaGFzT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIC8vIFJvbGxiYWNrLiBBbHdheXMgcG9wdWxhdGUgdGhlIGNhY2hlIGluIHRoaXMgY2FzZSBidXQgd2l0aG91dFxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhID0gY29tbWl0dGVkRGF0YTtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBkYXRhIHRvIGJlIHRoZSBsYXRlc3QgY29tbWl0dGVkIGRhdGEsIGFuZCBjbGVhciB0aGUgYF9jYCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZXN0YW1wIHRvIG1hcmsgdGhlIG11dGF0aW9uIGhhcyBlbmRlZC5cbiAgICAgICAgTVVUQVRJT05ba2V5XVsxXSA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgU1dSIEhvb2tzJyBpbnRlcm5hbCBzdGF0ZXM6XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAvLyBUaGUgbXV0YXRpb24gYW5kIHJldmFsaWRhdGlvbiBhcmUgZW5kZWQsIHdlIGNhbiBjbGVhciBpdCBzaW5jZSB0aGUgZGF0YSBpc1xuICAgICAgICAvLyBub3QgYW4gb3B0aW1pc3RpYyB2YWx1ZSBhbnltb3JlLlxuICAgICAgICBzZXQoe1xuICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGE7XG4gICAgfVxufVxuXG5jb25zdCByZXZhbGlkYXRlQWxsS2V5cyA9IChyZXZhbGlkYXRvcnMsIHR5cGUpPT57XG4gICAgZm9yKGNvbnN0IGtleSBpbiByZXZhbGlkYXRvcnMpe1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzW2tleV1bMF0pIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG5jb25zdCBpbml0Q2FjaGUgPSAocHJvdmlkZXIsIG9wdGlvbnMpPT57XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gVGhlIHByb3ZpZGVyJ3MgZ2xvYmFsIHN0YXRlIG1pZ2h0IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuIExldCdzIHRyeSB0byBnZXQgdGhlXG4gICAgLy8gZ2xvYmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZXIgZmlyc3QuXG4gICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgY29uc3QgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIGNvbnN0IG11dGF0ZSA9IGludGVybmFsTXV0YXRlLmJpbmQoVU5ERUZJTkVELCBwcm92aWRlcik7XG4gICAgICAgIGxldCB1bm1vdW50ID0gbm9vcDtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSAoa2V5LCBjYWxsYmFjayk9PntcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV0gfHwgW107XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zW2tleV0gPSBzdWJzO1xuICAgICAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybiAoKT0+c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGNhbGxiYWNrKSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRlciA9IChrZXksIHZhbHVlLCBwcmV2KT0+e1xuICAgICAgICAgICAgcHJvdmlkZXIuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gc3Vicy5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgICAgICAgICBzdWJzW2ldKHZhbHVlLCBwcmV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgY29uc3QgW2NhY2hlQ29udGV4dF0gPSB1c2VTdGF0ZSgoKT0+cHJvdmlkZXIgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpIDogVU5ERUZJTkVEKTtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cywgcmV2YWxpZGF0ZUV2ZW50cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmV2YWxpZGF0ZUlmU3RhbGUgLCByZWZyZXNoSW50ZXJ2YWwgLCByZWZyZXNoV2hlbkhpZGRlbiAsIHJlZnJlc2hXaGVuT2ZmbGluZSAsIGtlZXBQcmV2aW91c0RhdGEgIH0gPSBjb25maWc7XG4gICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdgIGlzIHRoZSBhcmd1bWVudC9hcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICBjb25zdCBba2V5LCBmbkFyZ10gPSBzZXJpYWxpemUoX2tleSk7XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIGNvbnN0IGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgY29uc3Qga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgY29uc3QgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICBjb25zdCBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICBjb25zdCBnZXRDb25maWcgPSAoKT0+Y29uZmlnUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoKT0+Z2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBbZ2V0Q2FjaGUsIHNldENhY2hlLCBzdWJzY3JpYmVDYWNoZSwgZ2V0SW5pdGlhbENhY2hlXSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzID0gdXNlUmVmKHt9KS5jdXJyZW50O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHJldHVybmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbdF0gIT09IHByZXZbdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZUlmU3RhbGUpKSByZXR1cm4gcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgLy8gR2V0IHRoZSBjYWNoZSBhbmQgbWVyZ2UgaXQgd2l0aCBleHBlY3RlZCBzdGF0ZXMuXG4gICAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2FjaGUgPSAoc3RhdGUpPT57XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNlbGVjdCB0aGUgbmVlZGVkIGZpZWxkcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbWVyZ2VPYmplY3RzKHN0YXRlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzbmFwc2hvdC5faztcbiAgICAgICAgICAgIGlmICghc2hvdWxkU3RhcnRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLnNuYXBzaG90XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgcmV0dXJuaW5nIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UgdG8gYXZvaWRcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgcmUtcmVuZGVycywgd2Uga2VlcCB0aGUgcHJldmlvdXMgc25hcHNob3QgYW5kIHVzZSBkZWVwXG4gICAgICAgIC8vIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgd2UgbmVlZCB0byByZXR1cm4gYSBuZXcgb25lLlxuICAgICAgICBsZXQgbWVtb3JpemVkU25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldENhY2hlKCkpO1xuICAgICAgICBjb25zdCBtZW1vcml6ZWRJbml0aWFsU25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldEluaXRpYWxDYWNoZSgpKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICgpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldENhY2hlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKG5ld1NuYXBzaG90LCBtZW1vcml6ZWRTbmFwc2hvdCkgPyBtZW1vcml6ZWRTbmFwc2hvdCA6IG1lbW9yaXplZFNuYXBzaG90ID0gbmV3U25hcHNob3Q7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCk9Pm1lbW9yaXplZEluaXRpYWxTbmFwc2hvdFxuICAgICAgICBdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICBjb25zdCBjYWNoZWQgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSh1c2VDYWxsYmFjaygoY2FsbGJhY2spPT5zdWJzY3JpYmVDYWNoZShrZXksIChjdXJyZW50LCBwcmV2KT0+e1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSBjYWxsYmFjaygpO1xuICAgICAgICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pLCBnZXRTbmFwc2hvdFswXSwgZ2V0U25hcHNob3RbMV0pO1xuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaGFzUmV2YWxpZGF0b3IgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XSAmJiBFVkVOVF9SRVZBTElEQVRPUlNba2V5XS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBjYWNoZWQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBmYWxsYmFjayA6IGNhY2hlZERhdGE7XG4gICAgY29uc3QgZXJyb3IgPSBjYWNoZWQuZXJyb3I7XG4gICAgLy8gVXNlIGEgcmVmIHRvIHN0b3JlIHByZXZpb3VzbHkgcmV0dXJuZWQgZGF0YS4gVXNlIHRoZSBpbml0aWFsIGRhdGEgYXMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgY29uc3QgbGFnZ3lEYXRhUmVmID0gdXNlUmVmKGRhdGEpO1xuICAgIGNvbnN0IHJldHVybmVkRGF0YSA9IGtlZXBQcmV2aW91c0RhdGEgPyBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGxhZ2d5RGF0YVJlZi5jdXJyZW50IDogY2FjaGVkRGF0YSA6IGRhdGE7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICBjb25zdCBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24gPSAoKCk9PntcbiAgICAgICAgLy8gaWYgYSBrZXkgYWxyZWFkeSBoYXMgcmV2YWxpZGF0b3JzIGFuZCBhbHNvIGhhcyBlcnJvciwgd2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHJldmFsaWRhdGlvblxuICAgICAgICBpZiAoaGFzUmV2YWxpZGF0b3IgJiYgIWlzVW5kZWZpbmVkKGVycm9yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG1vdW50IGl0IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH0pKCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nIHN0YXRlOlxuICAgIC8vIElmIGl0J3MgYWJsZSB0byB2YWxpZGF0ZSwgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIHdoZW4gbW91bnQsIHRoaXMgd2lsbCBiZSB0cnVlLlxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgPSAhIShrZXkgJiYgZmV0Y2hlciAmJiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc1ZhbGlkYXRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc1ZhbGlkYXRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzTG9hZGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzTG9hZGluZztcbiAgICAvLyBUaGUgcmV2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgd3JhcHBlciBvZiB0aGUgb3JpZ2luYWxcbiAgICAvLyBgZmV0Y2hlcmAsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG1hbnkgZWRnZSBjYXNlcy5cbiAgICBjb25zdCByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJldmFsaWRhdGVPcHRzKT0+e1xuICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hlciA9IGZldGNoZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWN1cnJlbnRGZXRjaGVyIHx8IHVubW91bnRlZFJlZi5jdXJyZW50IHx8IGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3RGF0YTtcbiAgICAgICAgbGV0IHN0YXJ0QXQ7XG4gICAgICAgIGxldCBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvbmdvaW5nIGNvbmN1cnJlbnQgcmVxdWVzdCwgb3IgYGRlZHVwZWAgaXMgbm90IHNldCwgYVxuICAgICAgICAvLyBuZXcgcmVxdWVzdCBzaG91bGQgYmUgaW5pdGlhdGVkLlxuICAgICAgICBjb25zdCBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgIC8qXG4gICAgICAgICBGb3IgUmVhY3QgMTdcbiAgICAgICAgIERvIHVubW91bnQgY2hlY2sgZm9yIGNhbGxzOlxuICAgICAgICAgSWYga2V5IGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgcmV2YWxpZGF0aW9uLCBvciB0aGUgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAgICB1bm1vdW50ZWQsIG9sZCBkaXNwYXRjaCBhbmQgb2xkIGV2ZW50IGNhbGxiYWNrcyBzaG91bGQgbm90IHRha2UgYW55XG4gICAgICAgICBlZmZlY3RcblxuICAgICAgICBGb3IgUmVhY3QgMThcbiAgICAgICAgb25seSBjaGVjayBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODJcbiAgICAgICovIGNvbnN0IGNhbGxiYWNrU2FmZWd1YXJkID0gKCk9PntcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQgJiYgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgZmluYWwgc3RhdGUgb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgc2V0Q2FjaGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNsZWFudXBTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lIHJlcXVlc3QgYmVmb3JlIGRlbGV0aW5nIGl0LlxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoaW5nLiBDaGFuZ2UgdGhlIGBpc1ZhbGlkYXRpbmdgIHN0YXRlLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSXQgaXMgaW4gdGhlIGBpc0xvYWRpbmdgIHN0YXRlLCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZGF0YS5cbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyBmYWxsYmFjayBkYXRhIGFuZCBsYWdneSBkYXRhLlxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBzZXRDYWNoZShpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vIGNhY2hlIGlzIGJlaW5nIHJlbmRlcmVkIGN1cnJlbnRseSAoaXQgc2hvd3MgYSBibGFuayBwYWdlKSxcbiAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiBpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgYW5kIHNhdmUgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICAvLyBLZXkgbXVzdCBiZSB0cnV0aHkgaWYgZW50ZXJpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmV0Y2hlcihmbkFyZyksXG4gICAgICAgICAgICAgICAgICAgIGdldFRpbWVzdGFtcCgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtuZXdEYXRhLCBzdGFydEF0XSA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBuZXdEYXRhID0gYXdhaXQgbmV3RGF0YTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCBpbnRlcnJ1cHRlZCwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAvLyAgIHJlcTEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzMSAgICAgICAgKGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgbWF5YmUgYmUgYHVuZGVmaW5lZGAgb3IgYSBudW1iZXJcbiAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciBlcnJvci5cbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBVTkRFRklORUQ7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBtdXRhdGlvbnMocyksIHRoYXQgb3ZlcmxhcHBlZCB3aXRoIHRoZSBjdXJyZW50IHJldmFsaWRhdGlvbjpcbiAgICAgICAgICAgIC8vIGNhc2UgMTpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAyOlxuICAgICAgICAgICAgLy8gICAgICAgICByZXEtLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMzpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tLS4uLi0tLS0tLS0tLS0+XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgcmV2YWxpZGF0aW9uIHJlc3VsdCAocmVzKSBiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyIGZyZXNoLlxuICAgICAgICAgICAgLy8gbWVhbndoaWxlLCBhIG5ldyByZXZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBtdXRhdGlvbiBlbmRzLlxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQobXV0YXRpb25JbmZvKSAmJiAvLyBjYXNlIDFcbiAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fCAvLyBjYXNlIDJcbiAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8IC8vIGNhc2UgM1xuICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSB0byBhdm9pZCBleHRyYSByZS1yZW5kZXJzLlxuICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRDYWNoZSgpLmRhdGE7XG4gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29tcGFyZSBmbiBjb3VsZCBiZSBjdXN0b20gZm5cbiAgICAgICAgICAgIC8vIGNhY2hlRGF0YSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBuZXdEYXRhIGV2ZW4gd2hlbiBjb21wYXJlIGZuIHJldHVybnMgVHJ1ZVxuICAgICAgICAgICAgZmluYWxTdGF0ZS5kYXRhID0gY29tcGFyZShjYWNoZURhdGEsIG5ld0RhdGEpID8gY2FjaGVEYXRhIDogbmV3RGF0YTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwU3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnlPbkVycm9yICB9ID0gY3VycmVudENvbmZpZztcbiAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlLCBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgZXJyb3IsIGRvbid0IHVzZSBkZWVwIGNvbXBhcmlzb24gZm9yIGVycm9ycy5cbiAgICAgICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGV2ZW50IGFuZCByZXRyeSBsb2dpYy4gT25seSBmb3IgdGhlIGFjdHVhbCByZXF1ZXN0LCBub3RcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvcihlcnIsIGtleSwgY3VycmVudENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeU9uRXJyb3IgPT09IHRydWUgfHwgaXNGdW5jdGlvbihzaG91bGRSZXRyeU9uRXJyb3IpICYmIHNob3VsZFJldHJ5T25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgaW5hY3RpdmUsIHN0b3AuIEl0IHdpbGwgYXV0by1yZXZhbGlkYXRlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZvY3VzaW5nIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGxpY2F0aW9uIGlzIGFsd2F5cyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvclJldHJ5KGVyciwga2V5LCBjdXJyZW50Q29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQ6IChvcHRzLnJldHJ5Q291bnQgfHwgMCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1cGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGxvYWRpbmcgYXMgc3RvcHBlZC5cbiAgICAgICAgbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgaG9vaydzIHN0YXRlLlxuICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdgLCBhbmRcbiAgICAvLyBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGtleSxcbiAgICAgICAgY2FjaGVcbiAgICBdKTtcbiAgICAvLyBTaW1pbGFyIHRvIHRoZSBnbG9iYWwgbXV0YXRlIGJ1dCBib3VuZCB0byB0aGUgY3VycmVudCBjYWNoZSBhbmQga2V5LlxuICAgIC8vIGBjYWNoZWAgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIGNvbnN0IGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soLy8gVXNlIGNhbGxiYWNrIHRvIG1ha2Ugc3VyZSBga2V5UmVmLmN1cnJlbnRgIHJldHVybnMgbGF0ZXN0IHJlc3VsdCBldmVyeSB0aW1lXG4gICAgKC4uLmFyZ3MpPT57XG4gICAgICAgIHJldHVybiBpbnRlcm5hbE11dGF0ZShjYWNoZSwga2V5UmVmLmN1cnJlbnQsIC4uLmFyZ3MpO1xuICAgIH0sIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gVGhlIGxvZ2ljIGZvciB1cGRhdGluZyByZWZzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIC8vIEhhbmRsZSBsYWdneSBkYXRhIHVwZGF0ZXMuIElmIHRoZXJlJ3MgY2FjaGVkIGRhdGEgb2YgdGhlIGN1cnJlbnQga2V5LFxuICAgICAgICAvLyBpdCdsbCBiZSB0aGUgY29ycmVjdCByZWZlcmVuY2UuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkpIHtcbiAgICAgICAgICAgIGxhZ2d5RGF0YVJlZi5jdXJyZW50ID0gY2FjaGVkRGF0YTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFmdGVyIG1vdW50ZWQgb3Iga2V5IGNoYW5nZWQuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzb2Z0UmV2YWxpZGF0ZSA9IHJldmFsaWRhdGUuYmluZChVTkRFRklORUQsIFdJVEhfREVEVVBFKTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgbGV0IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICBjb25zdCBvblJldmFsaWRhdGUgPSAodHlwZSk9PntcbiAgICAgICAgICAgIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25Gb2N1cyAmJiBub3cgPiBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IG5vdyArIGdldENvbmZpZygpLmZvY3VzVGhyb3R0bGVJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5SRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5NVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bnN1YkV2ZW50cyA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgRVZFTlRfUkVWQUxJREFUT1JTLCBvblJldmFsaWRhdGUpO1xuICAgICAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgYXMgbW91bnRlZCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgcmVmcy5cbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAga2V5UmVmLmN1cnJlbnQgPSBrZXk7XG4gICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAvLyBLZWVwIHRoZSBvcmlnaW5hbCBrZXkgaW4gdGhlIGNhY2hlLlxuICAgICAgICBzZXRDYWNoZSh7XG4gICAgICAgICAgICBfazogZm5BcmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZXZhbGlkYXRlIGlmIHdlIGhhdmUgZGF0YSB0byByZXR1cm4gc28gd2Ugd29uJ3QgYmxvY2tcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcuXG4gICAgICAgICAgICAgICAgckFGKHNvZnRSZXZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJFdmVudHMoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKSA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKSA6IHJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3RhcnQgdGhlIG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSwgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFnZXRDYWNoZSgpLmVycm9yICYmIChyZWZyZXNoV2hlbkhpZGRlbiB8fCBnZXRDb25maWcoKS5pc1Zpc2libGUoKSkgJiYgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgcmVmcmVzaEludGVydmFsLFxuICAgICAgICByZWZyZXNoV2hlbkhpZGRlbixcbiAgICAgICAgcmVmcmVzaFdoZW5PZmZsaW5lLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShyZXR1cm5lZERhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGFuIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gU1dSIHNob3VsZCB0aHJvdyB3aGVuIHRyeWluZyB0byB1c2UgU3VzcGVuc2Ugb24gdGhlIHNlcnZlciB3aXRoIFJlYWN0IDE4LFxuICAgICAgICAvLyB3aXRob3V0IHByb3ZpZGluZyBhbnkgaW5pdGlhbCBkYXRhLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xODMyXG4gICAgICAgIGlmICghSVNfUkVBQ1RfTEVHQUNZICYmIElTX1NFUlZFUikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWxsYmFjayBkYXRhIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc3VzcGVuc2UgaW4gU1NSLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZGF0YSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuZWREYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNWYWxpZGF0aW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNMb2FkaW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBTV1JDb25maWcgPSBPQkpFQ1QuZGVmaW5lUHJvcGVydHkoU1dSQ29uZmlnJDEsICdkZWZhdWx0VmFsdWUnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xuY29uc3QgdW5zdGFibGVfc2VyaWFsaXplID0gKGtleSk9PnNlcmlhbGl6ZShrZXkpWzBdO1xuLyoqXG4gKiBBIGhvb2sgdG8gZmV0Y2ggZGF0YS5cbiAqXG4gKiBAbGluayBodHRwczovL3N3ci52ZXJjZWwuYXBwXG4gKiBAZXhhbXBsZVxuICogYGBganN4XG4gKiBpbXBvcnQgdXNlU1dSIGZyb20gJ3N3cidcbiAqIGZ1bmN0aW9uIFByb2ZpbGUoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUignL2FwaS91c2VyJywgZmV0Y2hlcilcbiAqICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5mYWlsZWQgdG8gbG9hZDwvZGl2PlxuICogICBpZiAoIWRhdGEpIHJldHVybiA8ZGl2PmxvYWRpbmcuLi48L2Rpdj5cbiAqICAgcmV0dXJuIDxkaXY+aGVsbG8ge2RhdGEubmFtZX0hPC9kaXY+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVtS0FabUxrQVJMelgzZ251S2twXCIsXCJsZWZ0XCI6XCJ1MWw1QUpHYlVpUDZSVkZJS3hPSVwiLFwic21hbGxcIjpcImh4WnBLOUNwQksxd1IwVzB2NFNEXCIsXCJsYXJnZVwiOlwibzlEWW10NHhmTGFJbWlWekk5ZFFcIixcInhsYXJnZVwiOlwicW1FVnhTWlM1a2ZMM2FWYmVlMW5cIixcImludmVydGVkXCI6XCJDTk9aSExkOVhib2t6T1c2TFlCUFwiLFwicm91bmRlZFwiOlwiakpDQXp3MlN5YUg0dElXWHJBbFJcIixcInJpZ2h0T2Zmc2V0XCI6XCJLR0N1N2FQalF5X2FGTmpIV051d1wiLFwibGVmdE9mZnNldFwiOlwiZERIWXlHelhOaTc3M0ZBbDEzR1hcIixcIm5vU2hhZG93XCI6XCJsUUYxWWNVcU0wT0h2UFNsU3dsX1wiLFwibm9Cb3JkZXJcIjpcInNFbzI1RWl2NnpzMURfeDVxOFZ5XCIsXCJ0cmFuc3BhcmVudFwiOlwidm0zY21BTk51WWxhUU01WXF6OUdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlBpa2Z6ajd6WWcySW50ZEp5bXVLXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwib1NnVjVjd1g2aW5rU2JDRzk4dzhcIixcIm5vUGFkZGluZ1wiOlwiZ1NackdSMXhxbThRMWlSVWZHZ2FcIixcImNvbnRlbnRcIjpcInBZTFVqOW5vQXFUOFd5dGpET09iXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcImlPeV90aFVmd3hJcVpPcldTSXp4XCIsXCJpbnZlcnRlZFwiOlwiZzc5ampjV1ZubXhMb1BOeUF4NDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlVuajRycDFEeTcxQUNydXpYbDc1XCIsXCJsZWZ0XCI6XCJFWFdNUnZ2ZVJ2UWlmaXh6VEgwMlwiLFwic21hbGxcIjpcIl9VMHpuVWs1UVRBelBuUzJnYUxDXCIsXCJtZWRpdW1cIjpcImFIOHU0czJNdFljNXk0dnl1YkR3XCIsXCJsYXJnZVwiOlwiYzMwNnlWNzhhbF9lR3dCU2ttRm1cIixcInhsYXJnZVwiOlwieHZBMW1lVW1FMjhBRU9wanNXYzlcIixcImludmVydGVkXCI6XCJXQjc3WUlET1N3Sm9YNjhOamxVR1wiLFwicm91bmRlZFwiOlwiazJuSkNzRU5OZ0N6Mkhsc2pfYkdcIixcInJpZ2h0T2Zmc2V0XCI6XCJqQWU1RVZFMzdPcktZdmtYZGMxc1wiLFwibGVmdE9mZnNldFwiOlwiRGdidEI2RzRMb0JEZDA0UF9Nek9cIixcIm5vU2hhZG93XCI6XCJLcFFJOTVfZjhuSHZrN0cySjZoOFwiLFwidHJhbnNwYXJlbnRcIjpcIkw4UG54VVFvZ3pnRk1NVDdRSTRkXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKdWxheFNjY29HbXF0Z1ROSm1rOVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInpUWXI5VzdnMlNxYlZqUEZBb2tHXCIsXCJub1BhZGRpbmdcIjpcIlVIelRtNTFrVnlsbDUyX1M3c0dCXCIsXCJub0JvcmRlclwiOlwiaFJQMVhZZnVKNDlUc1lVX2NPNUFcIixcImRpc2FibGVkXCI6XCJsd1dJVFBoTTlUTW81ODVEc2F3OFwiLFwiY29udGVudFwiOlwiTXlUX1B1ZkpkRXZzWkUzaFNXOFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwic3k4bEtWV1A1NkFsT1I3eXNfOUFcIixcInNtYWxsXCI6XCJYamZwY3VQdGd1Rlp2S3J4eHQ3eVwiLFwibWVkaXVtXCI6XCJ0TFAzZFpXZXBYSDNIS2cxN3NPSFwiLFwibGFyZ2VcIjpcIldncDlxSFdEclFpOWZtY3hRSVZLXCIsXCJ4bGFyZ2VcIjpcImxVQTZ0cExrV2NHRmdub3FDRnZ1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIktrMmRwMTVId01aeklOYlVGQVo0XCIsXCJob3Jpem9udGFsXCI6XCJKc3pPX1VnN3BLTFlRMERlaE44X1wiLFwidmVydGljYWxcIjpcIkVWVDYybGdoQzk5ZTliZGpZbHk1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcIlB2YmVCbTRTTXRNcWxRTlR5UWpRXCIsXCJzbWFsbFwiOlwiUzdFM0VQeV9BV1F1a0VleHV2VGZcIixcImxhcmdlXCI6XCJhMUZzSXRLUFFFT0JlVHFCQ3VEbFwiLFwieGxhcmdlXCI6XCJzRmhnUUVOX1VPTDNaeE9BUjFJZVwiLFwic2VsZWN0ZWRcIjpcImFVeDJ1U0JTczE0VnF3UHFqdmxRXCIsXCJzck9ubHlcIjpcIkpJUW1lWmRkOVRGbDVJX2dpZlBpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaWlZIY1g0NVhDYmxtRGFiOWV3WlwiLFwibW9kYWxIZWFkZXJcIjpcInhUWDFYSmZDU1VzcmhfeUxsWm9pXCIsXCJtb2RhbENvbnRlbnRcIjpcIlRlNmpIZGx5anNRWG1uVHM5YmFuXCIsXCJub1BhZGRpbmdcIjpcIkx6X2d3U3dQM1FDTjV6WXpGc0VpXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIkdoMXV2eE1mRWdQVGR0NjZRaXMyXCIsXCJtb2RhbEJ1dHRvbnNcIjpcIklhdzM0RmtNSnFqckdRNThCR2Z4XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiZHJhd2VyXCI6XCJVM2RDenFUeXlueXpCbjJtRmttV1wiLFwib3BlblwiOlwiSGlDYWk1QWRzY3g4WmJHbGw0U1JcIixcImRyYXdlckNvbnRlbnRcIjpcImlJZ0JBc29QRWpGT2tIOFVuS1ZYXCIsXCJkcmF3ZXJIZWFkZXJDb250ZW50XCI6XCJWQzhqdlZoSlJjZnRxbGFjR0FHSVwiLFwiZHJhd2VySGVhZGVyQ2xvc2VJY29uQ29udGVudFwiOlwiSlI1R0lGUUdBX1NaODdTY1VsRTlcIixcImRyYXdlckhlYWRlckNsb3NlSWNvblwiOlwiQjZSYzMzcFF6WEJPdWJlMGpkWjlcIixcImRyYXdlck1haW5cIjpcIk15aU4xVU5qYk9UZ3dKMVRYbUVZXCIsXCJkcmF3ZXJGb290ZXJcIjpcIkNlYV9udEdMNTk1R2RuanMxRHFVXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyQmFmWGtvVENuMkFoNnhZWW14ZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJLV2s3b1o4dHZQZlFpY2dRWWxWYVwiLFwibGFiZWxcIjpcImU2enJ4N1VPUF9CU29NTTNHcmpRXCIsXCJzbWFsbFwiOlwiaWhTbkRRZzB5Z3hjVkxJeVNKa01cIixcImxhcmdlXCI6XCJGcHdoYkQ3SFh4X3VGVDNsMDF3YlwiLFwieGxhcmdlXCI6XCJZVmRzNHVfRGZXU0cxcjBTQUduU1wiLFwiaW52ZXJ0ZWRcIjpcIkNLeW5vTGhpTGQ2S3pBWWk1TnRHXCIsXCJyb3VuZGVkXCI6XCJ2NzJtekp1bUZTaURPT0UxTW5YSFwiLFwibm9TaGFkb3dcIjpcIkVvZXdKRURiR2R0ZUpfTlJmUzVGXCIsXCJub0JvcmRlclwiOlwiY2I3bDR4dmNObkhObFFabUxqa2JcIixcIm5vUGFkZGluZ1wiOlwidmNPd0RZdUdGMmV0b1BmeUZEWDVcIixcInRyYW5zcGFyZW50XCI6XCJsMDhraGFYSVVPY3J1QkZId3M3WFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSTB4dkpiQjBMTlQwUzE1alRNV1dcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJYNmZxVWNWSDFCbENSSkJpaUppaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajFtZmlZRUdvbFRSbWJCbUdLbFFcIixcInJvd1wiOlwiRUdhS3ZtcU0yU2F3aUZyVzhDdHVcIixcImNvbHVtblwiOlwiTk1pME1UMWI3cnAxWmp5ZThVVkFcIixcImZpeGVkXCI6XCJnMGoza2tRcl9BakNLRmQ5NFMxc1wiLFwicGxhaW5cIjpcIkZyMXE3V25GMW5Gbm5iZmdwYVJ6XCIsXCJ0cmFuc3BhcmVudFwiOlwidWRSWmU5SDBiS1VIWGpPd0cxRm5cIixcInRvcFwiOlwidVlpS3c2VnZERWtoalpIenZvN2VcIixcInRvcEVkZ2VcIjpcInRSYkVjWWpFM0tuY3NOd1RidlZNXCIsXCJ0b3BPbkVkZ2VcIjpcIkxHdW5HMzdYMV9IUmV1dzNxenVhXCIsXCJyaWdodFwiOlwibHcyN3JHVmxvMzRheEN4dzNRSGlcIixcInJpZ2h0RWRnZVwiOlwiUFpJdHZsZUZJSWowSngyTWlrUkVcIixcInJpZ2h0T25FZGdlXCI6XCJLTnVHYURQcTlybVhmZ21PM3BjYlwiLFwiYm90dG9tXCI6XCJkbjF1aDF0YXNHeERHcW1VMThITlwiLFwiYm90dG9tRWRnZVwiOlwiZUQwVUNyQlJwc1JUUFB3d0lvVmdcIixcImJvdHRvbU9uRWRnZVwiOlwiSXJoSDVnZnlHc1E2a2RjUDk0UlFcIixcImxlZnRcIjpcIkQ1ZkdIbkFHQ01SNEx0Yjl5NEhyXCIsXCJsZWZ0RWRnZVwiOlwiX0F0QWQydHI3dDFrWHVzUmJYU3pcIixcImxlZnRPbkVkZ2VcIjpcIl84QzlkZDBYX0pYWTR1SHp3NU5qXCIsXCJob3Jpem9udGFsQ2VudGVyXCI6XCJRRGtzOG92dDlSVmNGV2VFQjh3YlwiLFwidmVydGljYWxDZW50ZXJcIjpcIkNWdVFSRTY1MkdIMlZKbjh6T1RzXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiZnBfQkxKMkZXNE95eWIwYkhpRDRcIixcInNtYWxsXCI6XCJ6c1ZETmZOUmtvczBRNXV2OUZSOVwiLFwibWVkaXVtXCI6XCJlU2xpbDNldlB0UEJzd1dGODBDNVwiLFwibGFyZ2VcIjpcIlQ3VUx5cTF5RTlBVlhFTWtuVjRHXCIsXCJ4bGFyZ2VcIjpcIlFQQWNlVlFkWjZRSVEyUXZpandnXCIsXCJpbnZlcnRlZFwiOlwibUZUR2JoTGE0TmxVTzE2bnZKcmtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIldjZW15cjJHcjhaQ0djNkJqYnF3XCIsXCJzbWFsbFwiOlwiVF9wYThDY3BMMUd2dURzZHZzcXFcIixcIm1lZGl1bVwiOlwibkxMRXJqT2dmYTViMnNPZVpyUTVcIixcImxhcmdlXCI6XCJRNzFORkJIclN4UUxRRTRBR0QyaFwiLFwieGxhcmdlXCI6XCJFYkJpeUYxcmc2d1JheFNNSzhzb1wiLFwicm91bmRlZFwiOlwidExqdXdSU3NJaUxKR1ZzcmFyYmRcIixcInRvcE9mZnNldFwiOlwiZDRLTHBJNzlDdVNVNmdrUFBJbkFcIixcInJpZ2h0T2Zmc2V0XCI6XCJHN2hKWm9ZdjhxSXJObUZDeWdNRVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJEWnMzQXZHa1ZkT3ZKZkxlSjhHaFwiLFwibGVmdE9mZnNldFwiOlwid0VFbldSY3Z1dm9taF9PTE81aXFcIixcImludmVydGVkXCI6XCJLOVdHQ0ZwVWFkTzlXSVh3RmFqX1wiLFwibm9TaGFkb3dcIjpcImVBUUoxMGtFa1BtRHhNR3ZsWXp5XCIsXCJub0JvcmRlclwiOlwiT2xFTlI5bnR1V1lMR09LS0tyR1JcIixcInRyYW5zcGFyZW50XCI6XCJLT2NzUHJpdnI5NHJ4bmZIVmxmZVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ1VTVHkzX05wMW1HSkhXMU4zZ3hcIixcInNtYWxsXCI6XCJJWXVWemgxSEJ6Z29UQ2kyV1FfcFwiLFwibWVkaXVtXCI6XCJKTmczX2JDRWZJdmk0Z2VFY3NTM1wiLFwibGFyZ2VcIjpcIm42MXNheEEyMF9Fd01ndDlHdzRzXCIsXCJ4bGFyZ2VcIjpcImdxR252bkg5WDZtR3Z6d2w0YUd6XCIsXCJyb3VuZGVkXCI6XCJEa3p1cWhFYWlNUjNYTXMxTTFJZlwiLFwidG9wT2Zmc2V0XCI6XCJzR252ZXZ2c3hCWlVhWHJwWlFwSVwiLFwicmlnaHRPZmZzZXRcIjpcImhnWTNacGt5RDcwcDdFOHJuM2JpXCIsXCJib3R0b21PZmZzZXRcIjpcIlJPb1FZNk9hUm5RekRPZlhfUURGXCIsXCJsZWZ0T2Zmc2V0XCI6XCJLZXZtNTgyZTNnWFBKRTNPRG9wYVwiLFwiaW52ZXJ0ZWRcIjpcIk9Pem5DYkFiak9MYzRfYkNFcWZ5XCIsXCJub1NoYWRvd1wiOlwieHJIeGZjZTAzNGRnWU5Fa25sVk1cIixcIm5vQm9yZGVyXCI6XCJlSHRfUklxOEpHb1lIYzRpQ29lZ1wiLFwidHJhbnNwYXJlbnRcIjpcIm5mZ3F0U2dmcnRyR0ZEV2Zab25RXCIsXCJkaXNhYmxlZFwiOlwiSV9uaEo5dTZwVERfMlNGM3FsX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJPNVc2RFFrNE50b1dyd21LTVdnXCIsXCJoYXNPdmVybGF5XCI6XCJsbHZubUk4SzEzZzlQVEJpQ056M1wiLFwib3ZlcmxheVwiOlwiR1ZrMmo4d1YxdDNnWTV1WFE0cUlcIixcImltYWdlXCI6XCJnWGpZcUtlOXczTmdZdXJZd1VRcFwiLFwiY292ZXJcIjpcIl9sN09OT1dheXI4dHl1R2l5VXNjXCIsXCJjb250YWluXCI6XCJTWWpPYjhsQWhtRGJkeWxGSVFZOVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSGtyb3pTZmxsVEZsa2ticXhYV2hcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ4eUhYaGhIRVlYTVllYXZXWndfTlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiUkRaeWxDTWxHZmVDVXdTYnllSXFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImk4R3VfVzF3OFdCQVlmbExJWXp3XCIsXCJoZWFkZXJcIjpcIkdwN1I4d1l3YUx0Rm9LRmNSdGdOXCIsXCJoZWFkZXJMYWJlbFwiOlwiVkdrb3RNVG5xUFJhS2NHVjhSamdcIixcImxpc3RcIjpcInZnOVFMdENZVEFzNXgzZkY3OXpwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGlzdFZpZXdJdGVtXCI6XCJaRlVkN29TcFBMdDBFZDJYcWFXWlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcInhROUJmazBYMUhtWmdpaEN1dFpWXCIsXCJvcGVuXCI6XCJ1dHY5RllPVTdRMEpOblpXMWVqdlwiLFwiZW50cmFuY2VcIjpcInlZS2pjQ3ZEMkw5NEZwUGdPaWdRXCIsXCJoZWFkZXJcIjpcIndOTDg2czl6R0ZpOFhLMTFLbG9SXCIsXCJmb290ZXJcIjpcIm11NEpldjFjNEtjaWZlRjhNenFnXCIsXCJub0JvcmRlclwiOlwiRWFQU2pMMW5Yc3o3VEN4MTFMcmZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImtZaDdES1lxSDZqZExYZDdQZEp3XCIsXCJtZW51Q29udGFpbmVyXCI6XCJRbGVBTzN5bVRsaVU2Wk5CUXhmZ1wiLFwidG9wXCI6XCJheGZjcmpTSDRsdnVqenJzazJRcFwiLFwicmlnaHRcIjpcIkx0Vmx0VzNCUFo1Z05YVnh4a3JQXCIsXCJsZWZ0XCI6XCJQUmI1ZjhYY01aT2NZNXVmUE1kcVwiLFwiYm90dG9tXCI6XCJfX01aNU9vaUlyVmlkRlhiUWZqdVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVJdGVtXCI6XCJnR1pmX0dzV3N3a3IwTlREX25iUVwiLFwibm9QYWRkaW5nXCI6XCJDTTJiSFNDeHd1aXRNZXM3dTlXZlwiLFwiYWN0aXZlXCI6XCJzNHRKbEs0T0ZjM3JuWEwwTXhxa1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwiWDFGNFNRa2hRaDBmeHo1WXUzdEhcIixcIm5vUGFkZGluZ1wiOlwia3BETFhaU0QyS3AxOWg5c3VSTEFcIixcImFjdGl2ZVwiOlwiSXdJVGpHbjZ2VFp0ZUVLak5vWWNcIixcIm1lbnVJdGVtXCI6XCJsZG9SNnBHT3J0Z0hNWFNwbUg3RlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcImowaDloZF9nbHZJOXhkT25hYXVZXCIsXCJub092ZXJsYXlcIjpcIlNMNDhTelp1ZktnZE1pR1kzWVROXCIsXCJtb2RhbFwiOlwiaFRYY1pldkd5eUkwQWN2cHJYVkpcIixcInRyYW5zcGFyZW50XCI6XCJpYnFsb0cxSHhIeDNzdGRrVlpTalwiLFwibm9TaGFkb3dcIjpcIklFbzV2RWVmdHZMcG13aTBWeWpEXCIsXCJtb2RhbEJ1dHRvblwiOlwiRm9QZkMzajdjSWcyQllmenFRR0VcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJudW1wYWRcIjpcIkdldmJiRzNEMFIzNHhHVUZzNVkxXCIsXCJudW1iZXJzXCI6XCJmTDVJMVdLWENhVTl2ckJHeUpCNFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkRoNmpzUTE1ZU15ZHNTTVRDd1J3XCIsXCJ0cmFuc3BhcmVudFwiOlwiV1Q2T1BsakMycWZiQVdzazB6NHJcIixcImZpeGVkXCI6XCJwdTZzOU1qNVQxWUlnbXY0TE9uQ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImhlYWRlclwiOlwiV1NZWUJBejUzZGhxdUlPWlBXQlBcIixcImxhYmVsXCI6XCJiNTVoeVowb0hsMHM0T3Q5T2h3TVwiLFwiZXhwYW5kZWRcIjpcIk4zQXpPNWtabGg0SEFQa25uWXpxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJTbUNpNHhPeEVzTHRpNjFHb1lrNFwiLFwic2VsZWN0ZWRcIjpcIl80ckp0Q09acG5mM3huOHBtRnZDUVwiLFwiY2hlY2tib3hDb250YWluZXJcIjpcIk1TWFpGN3hjQzVhb3FIbHFwSTBnXCIsXCJjaGVja2JveFwiOlwiTkpqcTlfZ0FlZERSck9FX1hXRTFcIixcImxhYmVsXCI6XCJ2d21ETGM5NkQ5dFhnV3FzNElLelwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIixcIm5vT3B0aW9uc1wiOlwib3ZLdkI1SDhFb0Z6bnVNcVV1amxcIixcInNlYXJjaEtleXdvcmRcIjpcIlR3Y1ZhUkR6OGNva0lLOUQ5RHhKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpeDNhWldNZU41QWw0VUs4eWViSlwiLFwiaWNvblNlYXJjaENvbnRhaW5lclwiOlwiWjVMUHg0N3liRUtlWDI5WEJZQkNcIixcInJlc2V0QnV0dG9uXCI6XCJoalQ5Wlh2bXZjNVFVcnV3ejhFbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRVRHYlhUZFlBcDBHNDBUSlBMbktcIixcImRpc2FibGVkXCI6XCJuRUNnR2RYT3NwVXJRV0hqendrZ1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiYWN0aXZlXCI6XCJlYmVtenRaRVdJVjRfNkFzS1BRSFwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcIm5vT3B0aW9uc1wiOlwiZkxQNHg0SXhueWlXaHA1QlA1c1RcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImljb25CdXR0b25cIjpcImFWS3AzSDNKV3JhQmY3RzVVZGFQXCIsXCJleHBhbmRlZFwiOlwiQnJ4cnREM2FNWDdJVTUyckEyMjBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJwbGFjZWhvbGRlclwiOlwiZGRsUmlkbkl6WWhRQzlER3BnSXRcIixcImFjdGl2ZVwiOlwic2hIc0VKR3RiejRjbUE2eDFHMWxcIixcInRhZ1dyYXBwZXJcIjpcIkJHRVNoYzdxdTJmazlEWkUyUlVzXCIsXCJzZWxlY3RlZE9wdGlvblwiOlwibWE5QklqdUdDUWVLRjQ0c2d1Y1RcIixcInNlbGVjdGVkT3B0aW9uc1wiOlwiblJwQXd2OTdDZXNxUWJETGNldDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImc1T1IwYU9OT1cxT3MxeHRrTkhpXCIsXCJ0YWJsZVwiOlwic01SMVZiNjJYRXZPT1dScldjNFFcIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJfN3gyejdwX2tiUU9MRG1FWDU0aUFcIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiRUFIMTRYUGVKQnVEV0dwNU5WWW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImo0UGlnSk9MNURnekQ4T1l4c2t6XCIsXCJpc0hlYWRlclN0aWNreVwiOlwiQVlSXzRIZW9sQWpKQ09zbDNIWkpcIixcImJvcmRlckJvdHRvbVwiOlwiaVpyRDN0SDEyekRJRk9XdkpVRDdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0YWJsZUhlYWRlckNlbGxcIjpcIkpjQTFWelY0TXdWUTNORWgwdnpFXCIsXCJzb3J0SWNvblZpc2libGVcIjpcIklxN094c1F6TDA2eGo5OE8wTHFKXCIsXCJzb3J0YWJsZVwiOlwiVlNUU2hZN0xUaF9JSWpuclBfX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImRPdmlnU2doeHlRNENiYkNNa0NSXCIsXCJhY3RpdmVcIjpcInRxbllkWTBIdERsbVc2MXRqR2JRXCIsXCJoYXNBcnJvd1wiOlwicXFPNmExak5MNkhUSkc3SFIxMXRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkF2UjdXQ0RSeEN3dlJVQV9qODBQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ6S0YzNGFLdllabmJMdVp6akVlT1wiLFwiY29udGVudFwiOlwib18yMXJfRWpMS0IzeGhnR3k3NHNcIixcImNsb3NlQnV0dG9uXCI6XCJaWlBSWkxVcTlNUXlpZkQ4eDJqSFwiLFwiZGlzYWJsZWRcIjpcInVDTHowdmJOblFaRlg4a1Z1VWlHXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnd1lLUlBwR2RJTVZYa2lOMEg5QlwiLFwidGFnSW5wdXRcIjpcImF2SW1HczNYY0xlRExHaHhEOGJ3XCIsXCJkaXNhYmxlZFwiOlwieVQ4UHA4VFV2UDdzUVNHZUdMTkpcIixcInRleHRJbnB1dFwiOlwiWmlOTmYyb0xWakV4eHA5UlQyc19cIixcInNtYWxsXCI6XCJMZW1NVVRzZWlneEhibUlZVlZUY1wiLFwibWVkaXVtXCI6XCJQVUhKZE03WkViM0xGUmVNMV9VZ1wiLFwibGFyZ2VcIjpcImo5bWs1MmhHaG9Gd2p3NEZXSFE5XCIsXCJ4bGFyZ2VcIjpcIkVpV3FlRnFRWEU5TEhVaDF2eHBYXCIsXCJub0JvcmRlclwiOlwiTzZXc09wVVpvWmVUaFViX1ZpWG5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIk5QWnJrc0NwblhWSlNxX3NuSGpSXCIsXCJzbWFsbFwiOlwialFHcmlRSlNhMDR6c29HMWEydTlcIixcIm1lZGl1bVwiOlwibFZvWTlEcDE3SE9CaW5NajBRN29cIixcImxhcmdlXCI6XCJRbFVhUGJYOEVhSWk3clo0RmI4b1wiLFwieGxhcmdlXCI6XCJyWVBPTTlmTnRWTGRQRnlXS2tHRVwiLFwibm9Cb3JkZXJcIjpcIktEVElOc0hkb2xZUmVTYkxjb29IXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInpGaXVBVGdzU0I0MlZkRW1jSlpZXCIsXCJlbnRyYW5jZVwiOlwiUjhycE9VT3RuZ1lPRXQ3STBwR01cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiWGxMUU9lNDc0T3RCaWFjX2dVN0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJLbTZVVXkwanBxTTBMQTJlWGNjY1wiLFwidmlzaWJsZVwiOlwidVRvSmZjUkNSNmVWSEltODB3R2JcIixcIm5vdFZpc2libGVcIjpcImhHeGd5aFBtUW1NOTdWaU9wY3Y4XCIsXCJsZWZ0XCI6XCJ5QnYxbHdESHBleHhPM0RQcGQxdlwiLFwicmlnaHRcIjpcInY4NTJFeHhtUTZBdFNRRjJzWDhBXCIsXCJ0b3BcIjpcImlWMnl6UGl6b291OW9tVzgxMWhnXCIsXCJib3R0b21cIjpcIlZtbUU4RU5zQ2t6YndMcEwzWEpnXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ5WTlIVjQwSVRUV2dBVjhxTHcxd1wiLFwiaGFzT3ZlcmxheVwiOlwienViNWJxZFZYbTRORnhwSTRIQmZcIixcInZpZGVvXCI6XCJNVkNEVmpmZ21IRTdRZW1jWXhHbFwiLFwiY292ZXJcIjpcIlY0bkVjbTE3OXZaZTJNTGdSVmFNXCIsXCJjb250YWluXCI6XCJ1Ml9NZmVDak1TbF9hQk5KbjVuTFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwibGpmc1lzOEJRcWxlS3piTGtrYWRcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJISnRScWJBRkxPblhWeUd6OGlGVVwiLFwib3ZlcmxheVwiOlwiQUxIaE9IQWVMbEJEeTFEcFlxaXZcIn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5IaW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgY2hpbGQgPSByZWFjdF8xLmRlZmF1bHQuQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKCgoX2IgPSAoX2EgPSBjaGlsZC50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkpICE9PSAnaW5wdXQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogJ0hpbnQnIG9ubHkgYWNjZXB0cyBhbiAnaW5wdXQnIGVsZW1lbnQgYXMgY2hpbGQuXCIpO1xuICAgIH1cbiAgICB2YXIgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsIGRpc2FibGVIaW50ID0gcHJvcHMuZGlzYWJsZUhpbnQsIGFsbG93VGFiRmlsbCA9IHByb3BzLmFsbG93VGFiRmlsbCwgYWxsb3dFbnRlckZpbGwgPSBwcm9wcy5hbGxvd0VudGVyRmlsbCwgb25GaWxsID0gcHJvcHMub25GaWxsLCBvbkhpbnQgPSBwcm9wcy5vbkhpbnQsIHZhbHVlTW9kaWZpZXIgPSBwcm9wcy52YWx1ZU1vZGlmaWVyO1xuICAgIHZhciBjaGlsZFByb3BzID0gY2hpbGQucHJvcHM7XG4gICAgdmFyIG1haW5JbnB1dFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50V3JhcHBlclJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9jID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHVuTW9kaWZpZWRJbnB1dFRleHQgPSBfY1swXSwgc2V0VW5tb2RpZmllZElucHV0VGV4dCA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB0ZXh0ID0gX2RbMF0sIHNldFRleHQgPSBfZFsxXTtcbiAgICB2YXIgX2UgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgaGludCA9IF9lWzBdLCBzZXRIaW50ID0gX2VbMV07XG4gICAgdmFyIF9mID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBtYXRjaCA9IF9mWzBdLCBzZXRNYXRjaCA9IF9mWzFdO1xuICAgIHZhciBfZyA9IHJlYWN0XzEudXNlU3RhdGUoKSwgY2hhbmdlRXZlbnQgPSBfZ1swXSwgc2V0Q2hhbmdlRXZlbnQgPSBfZ1sxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhciBkdXBsaWNhdGUgPSB1dGlsc18xLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiBcXFwiXCIgKyBkdXBsaWNhdGUgKyBcIlxcXCIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGFuZCBtYXkgY2F1c2UgZXJyb3JzLiBPcHRpb25zIHNob3VsZCBub3QgY29udGFpbiBkdXBsaWNhdGUgdmFsdWVzIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtvcHRpb25zXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZGlzYWJsZUhpbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRTdHlsZSA9IG1haW5JbnB1dFJlZi5jdXJyZW50ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG1haW5JbnB1dFJlZi5jdXJyZW50KTtcbiAgICAgICAgaW5wdXRTdHlsZSAmJiBzdHlsZUhpbnQoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpO1xuICAgIH0pO1xuICAgIHZhciBnZXRNYXRjaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICghdGV4dCB8fCB0ZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnNbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzEgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMiA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB1dGlsc18xLnNvcnRBc2MoYS5sYWJlbCwgYi5sYWJlbCk7IH0pWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzZXRIaW50VGV4dEFuZElkID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgc2V0VGV4dCh0ZXh0KTtcbiAgICAgICAgdmFyIG1hdGNoID0gZ2V0TWF0Y2godGV4dCk7XG4gICAgICAgIHZhciBoaW50O1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBoaW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5sYWJlbC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SGludChoaW50KTtcbiAgICAgICAgc2V0TWF0Y2gobWF0Y2gpO1xuICAgICAgICBvbkhpbnQgJiYgb25IaW50KG1hdGNoKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVPbkZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChoaW50ID09PSAnJyB8fCAhY2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VW5Nb2RpZmllZFRleHQgPSB1bk1vZGlmaWVkSW5wdXRUZXh0ICsgaGludDtcbiAgICAgICAgY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlID0gbmV3VW5Nb2RpZmllZFRleHQ7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShjaGFuZ2VFdmVudCk7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICBvbkZpbGwgJiYgb25GaWxsKG1hdGNoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChuZXdVbk1vZGlmaWVkVGV4dCk7XG4gICAgfTtcbiAgICB2YXIgc3R5bGVIaW50ID0gZnVuY3Rpb24gKGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoX2EgPSBoaW50V3JhcHBlclJlZiA9PT0gbnVsbCB8fCBoaW50V3JhcHBlclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFdyYXBwZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBpbnB1dFN0eWxlLndpZHRoO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBpbnB1dFN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm94U2l6aW5nID0gaW5wdXRTdHlsZS5ib3hTaXppbmc7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLm1hcmdpbiA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnbWFyZ2luJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLnBhZGRpbmcgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyU3R5bGUgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICdzdHlsZScpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJXaWR0aCA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChfYiA9IGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRDaGFuZ2VFdmVudChlKTtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICB2YXIgbW9kaWZpZWRWYWx1ZSA9IHZhbHVlTW9kaWZpZXIgPyB2YWx1ZU1vZGlmaWVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKG1vZGlmaWVkVmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uRm9jdXMgJiYgY2hpbGRQcm9wcy5vbkZvY3VzKGUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vT25seSBibHVyIGl0IGlmIHRoZSBuZXcgZm9jdXMgaXNuJ3QgdGhlIHRoZSBoaW50IGlucHV0XG4gICAgICAgIGlmICgoaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpICE9PSBlLnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICAgICAgY2hpbGRQcm9wcy5vbkJsdXIgJiYgY2hpbGRQcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBBUlJPV1JJR0hUID0gJ0Fycm93UmlnaHQnO1xuICAgIHZhciBUQUIgPSAnVGFiJztcbiAgICB2YXIgRU5URVIgPSAnRW50ZXInO1xuICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VsZWN0YWJsZSBpbnB1dCB0eXBlcyAoXCJ0ZXh0XCIsIFwic2VhcmNoXCIpLCBvbmx5IHNlbGVjdCB0aGUgaGludCBpZlxuICAgICAgICAgICAgLy8gaXQncyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB2YWx1ZS4gRm9yIG5vbi1zZWxlY3RhYmxlIHR5cGVzIChcImVtYWlsXCIsXG4gICAgICAgICAgICAvLyBcIm51bWJlclwiKSwgYWx3YXlzIHNlbGVjdCB0aGUgaGludC5cbiAgICAgICAgICAgIHZhciBpc05vblNlbGVjdGFibGVUeXBlID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gaXNOb25TZWxlY3RhYmxlVHlwZSB8fCBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBlLmN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGNhcmV0SXNBdFRleHRFbmQ7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGUua2V5ID09PSBBUlJPV1JJR0hUKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93VGFiRmlsbCAmJiBlLmtleSA9PT0gVEFCICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93RW50ZXJGaWxsICYmIGUua2V5ID09PSBFTlRFUiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRQcm9wcy5vbktleURvd24gJiYgY2hpbGRQcm9wcy5vbktleURvd24oZSk7XG4gICAgfTtcbiAgICB2YXIgb25IaW50Q2xpY2sgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBoaW50Q2FyZXRQb3NpdGlvbiA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgLy8gSWYgdXNlciBjbGlja3MgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBoaW50LCBcbiAgICAgICAgLy8gbW92ZSBmb2N1cyB0byB0aGUgZW5kIG9mIHRoZSBtYWluSW5wdXQgdGV4dFxuICAgICAgICBpZiAoaGludENhcmV0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFoaW50ICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHZhciBjYXJldFBvc2l0aW9uID0gdGV4dC5sZW5ndGggKyBoaW50Q2FyZXRQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAoX2IgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zaXRpb24sIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGlsZFJlZiA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkKS5yZWY7XG4gICAgdmFyIG1haW5JbnB1dCA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyksIHsgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sIHJlZjogY2hpbGRSZWYgJiYgdHlwZW9mIChjaGlsZFJlZikgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHV0aWxzXzEubWVyZ2VSZWZzKGNoaWxkUmVmLCBtYWluSW5wdXRSZWYpXG4gICAgICAgICAgICA6IG1haW5JbnB1dFJlZiB9KSk7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaW5wdXQtd3JhcHBlclwiLCBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgICAgICAgfSB9LCBkaXNhYmxlSGludFxuICAgICAgICA/IGNoaWxkXG4gICAgICAgIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0XzEuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgIG1haW5JbnB1dCxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludC13cmFwcGVyXCIsIHJlZjogaGludFdyYXBwZXJSZWYsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzUpJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB9IH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAncmFoLXRleHQtZmlsbGVyJywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB0ZXh0KSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50XCIsIHJlZjogaGludFJlZiwgb25DbGljazogb25IaW50Q2xpY2ssIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAhaGludCB8fCBoaW50ID09PSAnJyA/ICdub25lJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICAgICAgICAgICAgICB9LCBkZWZhdWx0VmFsdWU6IGhpbnQsIHRhYkluZGV4OiAtMSB9KSkpKSkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGV4cG9ydHMuc29ydEFzYyA9IGV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGV4cG9ydHMubWVyZ2VSZWZzID0gdm9pZCAwO1xuZnVuY3Rpb24gbWVyZ2VSZWZzKCkge1xuICAgIHZhciByZWZzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgcmVmc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyZWRSZWZzID0gcmVmcy5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgZmlsdGVyZWRSZWZzXzEgPSBmaWx0ZXJlZFJlZnM7IF9pIDwgZmlsdGVyZWRSZWZzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVmID0gZmlsdGVyZWRSZWZzXzFbX2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZWYoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IGluc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZVJlZnMgPSBtZXJnZVJlZnM7XG47XG4vLyBJRSBkb2Vzbid0IHNlZW0gdG8gZ2V0IHRoZSBjb21wb3NpdGUgY29tcHV0ZWQgdmFsdWUgKGVnOiAncGFkZGluZycsXG4vLyAnYm9yZGVyU3R5bGUnLCBldGMuKSwgc28gZ2VuZXJhdGUgdGhlc2UgZnJvbSB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVN0eWxlKHN0eWxlcywgYXR0ciwgc3ViYXR0cikge1xuICAgIGlmIChzdWJhdHRyID09PSB2b2lkIDApIHsgc3ViYXR0ciA9ICcnOyB9XG4gICAgLy8gVGl0bGUtY2FzZSB0aGUgc3ViLWF0dHJpYnV0ZS5cbiAgICBpZiAoc3ViYXR0cikge1xuICAgICAgICBzdWJhdHRyID0gc3ViYXR0ci5yZXBsYWNlKHN1YmF0dHJbMF0sIHN1YmF0dHJbMF0udG9VcHBlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBbJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddXG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IChhdHRyICsgZGlyICsgc3ViYXR0cikgcHJvcGVydHkgY2Fubm90IGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGRpcikgeyByZXR1cm4gc3R5bGVzW2F0dHIgKyBkaXIgKyBzdWJhdHRyXTsgfSlcbiAgICAgICAgLmpvaW4oJyAnKTtcbn1cbmV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGludGVycG9sYXRlU3R5bGU7XG5mdW5jdGlvbiBzb3J0QXNjKGEsIGIpIHtcbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZXhwb3J0cy5zb3J0QXNjID0gc29ydEFzYztcbmZ1bmN0aW9uIGdldEZpcnN0RHVwbGljYXRlT3B0aW9uKGFycmF5KSB7XG4gICAgdmFyIHRyYWNrZXIgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmFja2VyW2FycmF5W2ldLmxhYmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb247XG4iLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjQgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAodHlwZW9mIGtleXNJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQsIF9yZWYkY3VycmVudDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50IHx8IChfcmVmJGN1cnJlbnQgPSByZWYuY3VycmVudCkgIT0gbnVsbCAmJiBfcmVmJGN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG5cbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5ID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoX3JlZikge1xuICB2YXIgY29sdW1uSW5kZXggPSBfcmVmLmNvbHVtbkluZGV4LFxuICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDtcbiAgcmV0dXJuIHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudChfcmVmMikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRDb2x1bW5PZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5PZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgZ2V0Q29sdW1uV2lkdGggPSBfcmVmMi5nZXRDb2x1bW5XaWR0aCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgICAgIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgICAgIGdldFJvd0hlaWdodCA9IF9yZWYyLmdldFJvd0hlaWdodCxcbiAgICAgIGdldFJvd09mZnNldCA9IF9yZWYyLmdldFJvd09mZnNldCxcbiAgICAgIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYyLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYyLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZjIudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShHcmlkLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gR3JpZChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsTGVmdDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0IDogMCxcbiAgICAgICAgc2Nyb2xsVG9wOiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wIDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsIG92ZXJzY2FuUm93U3RvcEluZGV4LCB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIHZpc2libGVSb3dTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdmFyIGtleSA9IHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogX29mZnNldCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IF9vZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6IGdldFJvd09mZnNldChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG5cbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgR3JpZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBHcmlkLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKF9yZWYzKSB7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9yZWYzLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3JlZjMuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCdcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKF9yZWY0KSB7XG4gICAgICB2YXIgX3JlZjQkYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY0JGFsaWduID09PSB2b2lkIDAgPyAnYXV0bycgOiBfcmVmNCRhbGlnbixcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF9yZWY0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjQucm93SW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzMi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczIuaGVpZ2h0LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHMyLnJvd0NvdW50LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZS5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG5cbiAgICAgIHZhciBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdmFyIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6IHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMsIGhvcml6b250YWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbFRvcFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbExlZnQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbExlZnQsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbFRvcCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsVG9wO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMi5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlMi5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkNvdW50LFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM0LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNC5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNC5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczQkaXRlbUtleSA9IF90aGlzJHByb3BzNC5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkgOiBfdGhpcyRwcm9wczQkaXRlbUtleSxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNC5yb3dDb3VudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNC51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNC53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMF0sXG4gICAgICAgICAgY29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzFdO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgcm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblswXSxcbiAgICAgICAgICByb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAodmFyIF9yb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IF9yb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IF9yb3dJbmRleCsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2NvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgX2NvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgX2NvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleSh7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4LFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9yb3dJbmRleCwgX2NvbHVtbkluZGV4KVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNS5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQgPSBfdGhpcyRwcm9wczUub25JdGVtc1JlbmRlcmVkLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM1LnJvd0NvdW50O1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlszXTtcblxuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4yID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgX292ZXJzY2FuUm93U3RhcnRJbmRleCwgX292ZXJzY2FuUm93U3RvcEluZGV4LCBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4LCBfdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIF92aXNpYmxlUm93U3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbExlZnQsXG4gICAgICAgICAgICBfc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUzLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgICAgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsTGVmdCwgX3Njcm9sbFRvcCwgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM2LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNC5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU0LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTQuc2Nyb2xsTGVmdDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczcuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93Q291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNy5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU1LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU1LnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlNS5zY3JvbGxUb3A7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBHcmlkO1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufVxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjUsIF9yZWY2KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjUuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjUub3V0ZXJUYWdOYW1lLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgIG92ZXJzY2FuQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvdW50LFxuICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfcmVmNS5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgIHdpZHRoID0gX3JlZjUud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWY2Lmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIHJvd0NvdW50ID0gX3JlZi5yb3dDb3VudDtcbiAgdmFyIHJvd01ldGFkYXRhTWFwID0gX3JlZjIucm93TWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmMi5lc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IF9yZWYyLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWYzLCBfcmVmNCkge1xuICB2YXIgY29sdW1uQ291bnQgPSBfcmVmMy5jb2x1bW5Db3VudDtcbiAgdmFyIGNvbHVtbk1ldGFkYXRhTWFwID0gX3JlZjQuY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY0LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBfcmVmNC5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLmNvbHVtbldpZHRoO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMucm93SGVpZ2h0O1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICB2YXIgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKSA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuXG4gIH1cbn07XG5cbnZhciBWYXJpYWJsZVNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IHByb3BzLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoO1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgncm93JywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gcHJvcHMucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY1ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjUuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWY1LmVzdGltYXRlZFJvd0hlaWdodDtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge31cbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gZnVuY3Rpb24gKHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciBjb2x1bW5JbmRleCA9IF9yZWY2LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjYucm93SW5kZXgsXG4gICAgICAgICAgX3JlZjYkc2hvdWxkRm9yY2VVcGRhID0gX3JlZjYuc2hvdWxkRm9yY2VVcGRhdGUsXG4gICAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRzaG91bGRGb3JjZVVwZGE7XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LCBjb2x1bW5JbmRleCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCwgcm93SW5kZXggLSAxKTtcbiAgICAgIH0gLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSQxID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoaW5kZXgsIGRhdGEpIHtcbiAgcmV0dXJuIGluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoX3JlZikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRJdGVtT2Zmc2V0ID0gX3JlZi5nZXRJdGVtT2Zmc2V0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gX3JlZi5nZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICBnZXRJdGVtU2l6ZSA9IF9yZWYuZ2V0SXRlbVNpemUsXG4gICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IF9yZWYuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZi5nZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYuZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKExpc3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbE9mZnNldDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5TdGFydEluZGV4LCBvdmVyc2NhblN0b3BJbmRleCwgdmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4OiB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGl0ZW1TaXplID0gX3RoaXMkcHJvcHMuaXRlbVNpemUsXG4gICAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wcy5sYXlvdXQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbik7XG5cbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldEl0ZW1PZmZzZXQoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgc2l6ZSA9IGdldEl0ZW1TaXplKF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIHZhciBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDA7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMCxcbiAgICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbFZlcnRpY2FsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldDIgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsVG9wO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIExpc3QuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzJDEobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBMaXN0LnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKHNjcm9sbE9mZnNldCkge1xuICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pIHtcbiAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczIuaXRlbUNvdW50LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMi5sYXlvdXQ7XG4gICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gdGhpcy5zdGF0ZS5zY3JvbGxPZmZzZXQ7XG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cblxuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSAwO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsSGVpZ2h0ID4gb3V0ZXJSZWYuY2xpZW50SGVpZ2h0ID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvKGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMzLmRpcmVjdGlvbixcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsT2Zmc2V0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxPZmZzZXQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMzLmxheW91dDtcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczQubGF5b3V0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczUuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczUuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNS5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczUuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM1Lml0ZW1Db3VudCxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNS5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczUkaXRlbUtleSA9IF90aGlzJHByb3BzNS5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkkMSA6IF90aGlzJHByb3BzNSRpdGVtS2V5LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNS5sYXlvdXQsXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczUudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczUud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgdmFyIG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZCA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzBdLFxuICAgICAgICAgIHN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgIGtleTogaXRlbUtleShfaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgIGluZGV4OiBfaW5kZXgsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX2luZGV4KVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBpc0hvcml6b250YWwgPyAnMTAwJScgOiBlc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuXG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZDIgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhblN0YXJ0SW5kZXgsIF9vdmVyc2NhblN0b3BJbmRleCwgX3Zpc2libGVTdGFydEluZGV4LCBfdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX3Njcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMi5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsT2Zmc2V0LCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczYuaXRlbUNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGUzLmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbE9mZnNldDtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExpc3Q7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIGxheW91dDogJ3ZlcnRpY2FsJyxcbiAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59IC8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMkMSA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgbGF5b3V0ID0gX3JlZjIubGF5b3V0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjIuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjIub3V0ZXJUYWdOYW1lLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjMuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUkMSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lJDEuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfSAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgKyAoXCJcXFwiXCIgKyBsYXlvdXQgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZlcnRpY2FsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSA9IDUwO1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhJDEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0kMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBpdGVtQ291bnQgPSBfcmVmMi5pdGVtQ291bnQ7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBfcmVmMy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWYzLmVzdGltYXRlZEl0ZW1TaXplLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBfcmVmMy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IGl0ZW1Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaXRlbUNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkSXRlbVNpemU7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBWYXJpYWJsZVNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgb2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY0ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjQuZXN0aW1hdGVkSXRlbVNpemU7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXgsIGluZGV4IC0gMSk7IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY1KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBpbmRleCAqIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjIuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChfcmVmMywgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0O1xuICAgIHJldHVybiBpbmRleCAqIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQoX3JlZjQsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY0LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZjUpIHtcbiAgICB2YXIgcm93Q291bnQgPSBfcmVmNS5yb3dDb3VudCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjUucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQgKiByb3dDb3VudDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmNikge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY2LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY2LmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aCAqIGNvbHVtbkNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChfcmVmNywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjcuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHdpZHRoID0gX3JlZjcud2lkdGg7XG4gICAgdmFyIGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5Db3VudCAqIGNvbHVtbldpZHRoIC0gd2lkdGgpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Q29sdW1uT2Zmc2V0LCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCAtIHdpZHRoICsgc2Nyb2xsYmFyU2l6ZSArIGNvbHVtbldpZHRoKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KF9yZWY4LCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmOC5yb3dIZWlnaHQsXG4gICAgICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmOC5yb3dDb3VudDtcbiAgICB2YXIgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KDAsIHJvd0NvdW50ICogcm93SGVpZ2h0IC0gaGVpZ2h0KTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdFJvd09mZnNldCwgcm93SW5kZXggKiByb3dIZWlnaHQpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCByb3dJbmRleCAqIHJvd0hlaWdodCAtIGhlaWdodCArIHNjcm9sbGJhclNpemUgKyByb3dIZWlnaHQpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjksIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmOS5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmOS5jb2x1bW5Db3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyBjb2x1bW5XaWR0aCkpKTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTAsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTAuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjEwLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IF9yZWYxMC53aWR0aDtcbiAgICB2YXIgbGVmdCA9IHN0YXJ0SW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgICB2YXIgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gY29sdW1uV2lkdGgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWYxMSwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMS5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjExLnJvd0NvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSkpO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMiwgc3RhcnRJbmRleCwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMi5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjEyLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBfcmVmMTIuaGVpZ2h0O1xuICAgIHZhciB0b3AgPSBzdGFydEluZGV4ICogcm93SGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbCgoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvIHJvd0hlaWdodCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmMTMpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTMuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYxMy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaW5kZXggKiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYyLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjMpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjMuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWYzLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZSAqIGl0ZW1Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KF9yZWY0LCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY0LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjQuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY0Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNC5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbUNvdW50ICogaXRlbVNpemUgLSBzaXplKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdEl0ZW1PZmZzZXQsIGluZGV4ICogaXRlbVNpemUpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpbmRleCAqIGl0ZW1TaXplIC0gc2l6ZSArIGl0ZW1TaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEl0ZW1PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY1LCBvZmZzZXQpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjUuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBNYXRoLmZsb29yKG9mZnNldCAvIGl0ZW1TaXplKSkpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWY2LCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjYuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY2Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNi5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjYubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY2LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgb2Zmc2V0ID0gc3RhcnRJbmRleCAqIGl0ZW1TaXplO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVJdGVtcyA9IE1hdGguY2VpbCgoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyBpdGVtU2l6ZSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjcuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldiwgbmV4dCkge1xuICBmb3IgKHZhciBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX2F0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbX2F0dHJpYnV0ZV0gIT09IG5leHRbX2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiXTtcbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5cbmZ1bmN0aW9uIGFyZUVxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3R5bGUgPSBwcmV2UHJvcHMuc3R5bGUsXG4gICAgICBwcmV2UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICB2YXIgbmV4dFN0eWxlID0gbmV4dFByb3BzLnN0eWxlLFxuICAgICAgbmV4dFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShuZXh0UHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIHJldHVybiAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpO1xufVxuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuXG5mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCB7IEZpeGVkU2l6ZUdyaWQsIEZpeGVkU2l6ZUxpc3QsIFZhcmlhYmxlU2l6ZUdyaWQsIFZhcmlhYmxlU2l6ZUxpc3QsIGFyZUVxdWFsLCBzaG91bGRDb21wb25lbnRVcGRhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIC8+XG4gICAgPC9MYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBDb25maXJtYXRpb25Nb2RhbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgeyEhaGVhZGVyICYmIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPn1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nsb3NlLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlO1xuICBmb290ZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9wZW46IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gRHJhd2VyKHtcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIG9wZW4sXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBvbkNsb3NlLFxufTogRHJhd2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXIsIHsgW3N0eWxlcy5vcGVuXTogb3BlbiB9LCBjbGFzc05hbWVdKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyQ29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ29udGVudH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ2xvc2VJY29ufSBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9e1wieGxhcmdlXCJ9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7ISFoZWFkZXIgJiYgPGRpdj57aGVhZGVyfTwvZGl2Pn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyTWFpbn0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7ISFmb290ZXIgJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJGb290ZXJ9Pntmb290ZXJ9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyIH0gZnJvbSBcIi4vRHJhd2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9DbGlja2FibGUubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFxuICBSZW5kZXJEaXNwbGF5UHJvcHM8VD4sXG4gIFwic2VsZWN0ZWRJdGVtXCIgfCBcInRvZ2dsZUlzT3BlblwiXG4+ICYge1xuICBvbkNsaWNrOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5bXCJ0b2dnbGVJc09wZW5cIl07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGRpc3BsYXksXG4gIGlzRGlzYWJsZWQsXG4gIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxufTogQ2xpY2thYmxlUHJvcHM8VD4pIHtcbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY29udGFpbmVyfT5cbiAgICAgICAge2Rpc3BsYXl9XG4gICAgICAgIDxJY29uIGFsdD1cIkRyb3Bkb3duXCIgc3JjPXtpY29uTWVudX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQnV0dG9uPlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFjY2VwdD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcbn07XG5cbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XG4gIGNoaWxkcmVuLFxuICBhY2NlcHQsXG4gIG9uQ2hhbmdlLFxuICBpbnB1dFJlZixcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmxhYmVsLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5pbnB1dH1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBpZD1cImZpbGVcIlxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xufTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgc3JjLFxuICBhbHQsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNXaWR0aD86IG51bWJlcjtcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCI7XG4gIGxvYWRpbmc/OiBcImVhZ2VyXCIgfCBcImxhenlcIjtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xuICBzcmMsXG4gIGFsdCxcbiAgc3JjV2lkdGgsXG4gIHNyY0hlaWdodCxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG4gIGRlY29kaW5nID0gXCJhdXRvXCIsXG4gIGxvYWRpbmcgPSBcImVhZ2VyXCIsXG4gIHN0eWxlLFxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnRDb250ZXh0IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG4gIHNtYXJ0TGF5b3V0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBzbWFydExheW91dCA9IHRydWUsXG59OiBNZW51UHJvcHMpIHtcbiAgY29uc3QgbWVudVBsYWNlbWVudCA9IHVzZUNvbnRleHQoUGxhY2VtZW50Q29udGV4dCk7XG4gIGNvbnN0IGlubmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZiB8fCBpbm5lclJlZjtcblxuICBpZiAoIW1lbnVQbGFjZW1lbnQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNZW51IGNvbXBvbmVudCBtdXN0IGJlIHdyYXBwZWQgYnkgYSBNZW51Q29udGFpbmVyIGNvbXBvbmVudC5cIlxuICAgICk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc21hcnRMYXlvdXQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20gfSA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlzdGFuY2VUb0VkZ2UgPVxuICAgICAgICBtZW51UGxhY2VtZW50LnZlcnRpY2FsID09PSBcInRvcFwiID8gdG9wIDogd2luZG93LmlubmVySGVpZ2h0IC0gYm90dG9tO1xuXG4gICAgICBpZiAoZGlzdGFuY2VUb0VkZ2UgPCAwKSB7XG4gICAgICAgIGNvbnN0IHVsRWwgPSByZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSB1bEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSxhXCIpO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSB1bEVsLmNsaWVudEhlaWdodCArIGRpc3RhbmNlVG9FZGdlO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjaGlsZEVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZEVsZW1lbnRzWzBdKS5taW5IZWlnaHRcbiAgICAgICAgICA6IDA7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke29mZnNldH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnQsIHNtYXJ0TGF5b3V0XSk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5tZW51LFxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57Y2hpbGRyZW59PC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBPdmVybGF5UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gT3ZlcmxheSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIGlzRml4ZWQgPSBmYWxzZSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogT3ZlcmxheVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG59O1xuXG5mdW5jdGlvbiBHcm91cE9wdGlvbih7IGNsYXNzTmFtZSwgbGFiZWwsIG9wdGlvbnMgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzaG93RXhwYW5kZWRHcm91cCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcbiAgY29uc3QgW2V4cGFuZGVkLCB0b2dnbGVFeHBhbmRdID0gdXNlVG9nZ2xlKHNob3dFeHBhbmRlZEdyb3VwKTtcblxuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUV4cGFuZCgpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBvbkNsaWNrPXtoYW5kbGVHcm91cENsaWNrfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+e2xhYmVsfTwvZGl2PlxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogZXhwYW5kZWQgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgYWx0PXtleHBhbmRlZCA/IFwiQ29sbGFwc2VcIiA6IFwiRXhwYW5kXCJ9XG4gICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7ZXhwYW5kZWQgJiZcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JvdXBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4vR3JvdXBPcHRpb25cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhOiBPcHRpb25UeXBlO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgZGF0YSB9OiBQcm9wcykge1xuICBjb25zdCB7IG11bHRpcGxlLCBzZWxlY3RlZE9wdGlvbnMsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKS5pbmNsdWRlcyhkYXRhLnZhbHVlKSxcbiAgICBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGRhdGEpO1xuICB9LCBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLnNlbGVjdGVkXTogaXNDaGVja2VkICYmICFtdWx0aXBsZSB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHttdWx0aXBsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94Q29udGFpbmVyfT5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uXCI7XG4iLCJpbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4uL0dyb3VwT3B0aW9uXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb25MaXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG4vLyBzZWUgZG9jcyB0byB1bmRlcnN0YW5kIG5lZWQgb2YgdGhlIGZ1bmN0aW9uIGJlbG93IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzXG5leHBvcnQgY29uc3QgaXNPcHRpb24gPSAoXG4gIG9wdGlvbjogT3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZVxuKTogb3B0aW9uIGlzIE9wdGlvblR5cGUgPT4ge1xuICByZXR1cm4gKG9wdGlvbiBhcyBPcHRpb25UeXBlKS52YWx1ZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uTGlzdCh7IG9wdGlvbnMsIG9uRmlsdGVyLCBvbkNoYW5nZSB9OiBQcm9wcykge1xuICBjb25zdCBbc2VsZWN0QWxsQ2hlY2tlZCwgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgbXVsdGlwbGUsXG4gICAgc2VhcmNoS2V5d29yZCxcbiAgICBzZWxlY3RBbGwsXG4gICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFzR3JvdXBPcHRpb24gPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIWlzT3B0aW9uKG9wdGlvbikpO1xuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnMgPSAob3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT4pID0+IHtcbiAgICBjb25zdCBrZXl3b3JkID0gc2VhcmNoS2V5d29yZC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiBrZXl3b3JkLmxlbmd0aFxuICAgICAgPyBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIG9uRmlsdGVyXG4gICAgICAgICAgICA/IG9uRmlsdGVyKG9wdGlvbiwga2V5d29yZClcbiAgICAgICAgICAgIDogb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZClcbiAgICAgICAgKVxuICAgICAgOiBvcHRpb25zO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHVzZU1lbW88QXJyYXk8R3JvdXBPcHRpb25UeXBlIHwgT3B0aW9uVHlwZT4+KCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLnJlZHVjZSgobGVuZ3RoOiBudW1iZXIsIG5leHRPcHRpb24pID0+IHtcbiAgICAgIGlmIChpc09wdGlvbihuZXh0T3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyBuZXh0T3B0aW9uLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9LCBbaGFzR3JvdXBPcHRpb24sIGZpbHRlcmVkT3B0aW9ucywgaXNPcHRpb25dKTtcblxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5maW5kKChmaWx0ZXJlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pXG4gICAgICAgICAgPyBmaWx0ZXJlZE9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pLmxlbmd0aDtcbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgZmlsdGVyZWRPcHRpb25zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBjb25zdCBvcHRpb25zVG9TZWxlY3QgPSBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLm1hcCgoZmlsdGVyZWRPcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pID8gZmlsdGVyZWRPcHRpb24gOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShvcHRpb25zVG9TZWxlY3QubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIGlzT3B0aW9uLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uc0NvdW50ID09PSBmaWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50LFxuICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50LFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7c2VsZWN0QWxsICYmIG11bHRpcGxlICYmICEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRPcHRpb25zQ291bnQgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPT0gZmlsdGVyZWRPcHRpb25zQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHshIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihvcHRpb24pID8gKFxuICAgICAgICAgICAgPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5cbiAgICAgICAgICBObyBtYXRjaGVzIGZvclxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaEtleXdvcmR9PntgICR7c2VhcmNoS2V5d29yZH1gfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb25MaXN0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb25MaXN0LCBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlYXJjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gXCIuLi8uLi9UZXh0SW5wdXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGljb25TZWFyY2ggZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWFyY2guc3ZnXCI7XG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IGNsYXNzTmFtZSB9OiBQcm9wcykge1xuICBjb25zdCB7IHNlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmQgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hLZXl3b3JkKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZWFyY2hLZXl3b3JkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaEtleXdvcmQoXCJcIik7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uU2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgPEljb24gc3JjPXtpY29uU2VhcmNofSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIHZhbHVlPXtzZWFyY2hLZXl3b3JkfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2V9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAvPlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVzZXRCdXR0b259XG4gICAgICAgIHNyYz17aWNvbkNyb3NzZWR9XG4gICAgICAgIGFsdD1cIkNsZWFyXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXshc2VhcmNoS2V5d29yZH1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljaywgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwiLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IHsgT3B0aW9uTGlzdCB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5cbnR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dTZWxlY3RlZEFzVGFncz86IGJvb2xlYW47XG4gIHNob3dTZWFyY2g/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNjcm9sbE1lbnVJbnRvVmlldz86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICB3aWR0aDogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc2FibGVkLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgbGFiZWwsXG4gIHNlbGVjdEFsbCxcbiAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gIHNjcm9sbE1lbnVJbnRvVmlldyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHNob3dTZWFyY2ggPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcbiAgY29uc3QgY29udGVudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICBjb25zdCBvblJlc2l6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZW50UmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCB8fCAhb3BlbmVkIHx8ICFzY3JvbGxNZW51SW50b1ZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgUk8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXNpemUpO1xuICAgIFJPLm9ic2VydmUoY29udGVudFJlZi5jdXJyZW50KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBSTy5kaXNjb25uZWN0KCk7XG4gICAgICBSTyA9IG51bGw7XG4gICAgfTtcbiAgfSwgW29wZW5lZCwgc2Nyb2xsTWVudUludG9WaWV3LCBvblJlc2l6ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWxlY3QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlT3BlbmVkKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjaygodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB7XG4gICAgaWYgKCFtdWx0aXBsZSkgdG9nZ2xlT3BlbmVkKGZhbHNlKTtcblxuICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHZhbHVlcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0UHJvdmlkZXJcbiAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbH1cbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwPXtzaG93RXhwYW5kZWRHcm91cH1cbiAgICA+XG4gICAgICA8ZGl2IHJlZj17cmVmfT5cbiAgICAgICAge2xhYmVsID8gPExhYmVsIHZhbHVlPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaGVhZGVyLCB7IFtzdHlsZXMuYWN0aXZlXTogb3BlbmVkIH1dKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5TZWxlY3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlbGVjdG9yXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgc2hvd1NlbGVjdGVkQXNUYWdzPXtzaG93U2VsZWN0ZWRBc1RhZ3N9XG4gICAgICAgICAgICAgIGlzRHJvcGRvd25PcGVuZWQ9e29wZW5lZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbkJ1dHRvbixcbiAgICAgICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBvcGVuZWQgfSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICAgICAgYWx0PXtvcGVuZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7b3BlbmVkICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0gcmVmPXtjb250ZW50UmVmfT5cbiAgICAgICAgICAgICAge29wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5ObyBvcHRpb25zIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxPcHRpb25MaXN0XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29udGV4dFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgc2VsZWN0ZWRPcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246IChvcHRpb246IE9wdGlvblR5cGUpID0+IHZvaWQ7XG4gIHNlYXJjaEtleXdvcmQ6IHN0cmluZztcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB2b2lkO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgc2VsZWN0QWxsOiBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXA6IHRydWUsXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAodmFsdWU6IE9wdGlvblR5cGUpID0+IHt9LFxuICBzZWFyY2hLZXl3b3JkOiBcIlwiLFxuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4ge30sXG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB7fSxcbn07XG5cbmNvbnN0IFNlbGVjdENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNlbGVjdENvbnRleHRTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuY29uc3QgU2VsZWN0Q29udGV4dFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgc2VsZWN0QWxsID0gZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwID0gdHJ1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uVHlwZVtdPihcbiAgICBpbml0aWFsU3RhdGUuc2VsZWN0ZWRPcHRpb25zXG4gICk7XG4gIGNvbnN0IFtzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkXSA9IHVzZVN0YXRlKFxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hLZXl3b3JkXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB7XG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gc2VsZWN0ZWRPcHRpb25zLnNvbWUoXG4gICAgICAgICAgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgICApXG4gICAgICAgICAgPyBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBvcHRpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtvcHRpb25dO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKVxuICAgICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgICA6IFtkZWZhdWx0VmFsdWVdO1xuXG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZSgoYWxsLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGlzT3B0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgaXRlbV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5pdGVtLm9wdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRWYWx1ZSwgb3B0aW9uc10pO1xuXG4gIGNvbnN0IGNvbnRleHRWYWx1ZTogU2VsZWN0Q29udGV4dFN0YXRlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzaG93RXhwYW5kZWRHcm91cCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlbGVjdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBTZWxlY3RDb250ZXh0LCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdG9yLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL1RhZ1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M6IGJvb2xlYW47XG4gIGlzRHJvcGRvd25PcGVuZWQ6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Rvcih7XG4gIHBsYWNlaG9sZGVyLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MsXG4gIGlzRHJvcGRvd25PcGVuZWQsXG59OiBQcm9wcykge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgbXVsdGlwbGUsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xpY2sgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0Nsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJUb1Nob3cgPSB1c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNEcm9wZG93bk9wZW5lZCB9LFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgPC9zcGFuPlxuICAgICksXG4gICAgW3BsYWNlaG9sZGVyLCBpc0Ryb3Bkb3duT3BlbmVkXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RhZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICAgICkgOiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRhZ1dyYXBwZXJ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhZ0NsaWNrfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGFnIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0gY2xvc2FibGUgb25DbG9zZT17aGFuZGxlVGFnQ2xvc2V9PlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBwbGFjZWhvbGRlclRvU2hvd11cbiAgKTtcblxuICBjb25zdCBzaG93QXNUZXh0ID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICA8c3BhblxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb25zfVxuICAgID57YCR7cGxhY2Vob2xkZXJ9ICgke3NlbGVjdGVkT3B0aW9ucy5sZW5ndGh9KWB9PC9zcGFuPlxuICApIDogKFxuICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICk7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICkgOiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbn0+e3NlbGVjdGVkT3B0aW9uc1swXS5sYWJlbH08L3NwYW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3QgfSBmcm9tIFwiLi9TZWxlY3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuXG5cblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgaGVhZGVySGVpZ2h0ID0gVGFibGVDb25maWcuSEVBREVSX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxuICBjbGFzc05hbWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH06IHsgZGF0YTogYW55OyBpbmRleDogbnVtYmVyOyBzdHlsZTogYW55IH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICBpc0hlYWRlclN0aWNreT17aXNIZWFkZXJTdGlja3l9XG4gICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyQ2VsbCBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7XG4gIGNvbHVtbnMsXG4gIHNjcm9sbFRvcCxcbiAgaXNIZWFkZXJTdGlja3ksXG4gIGhlYWRlckhlaWdodCxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5ib3JkZXJCb3R0b21dOiAhIXNjcm9sbFRvcCB9LFxuICAgICAgICB7IFtzdHlsZXMuaXNIZWFkZXJTdGlja3ldOiBpc0hlYWRlclN0aWNreSB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IGhlYWRlckhlaWdodCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXJDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtaGVhZC1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvbkNhcmV0VXAgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC11cC5zdmdcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXJDZWxsKHsgY29sdW1uIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBvblNvcnQsXG4gICAgc29ydGFibGUsXG4gICAgc29ydGVkLFxuICAgIGRlZmF1bHRTb3J0T3JkZXIsXG4gICAgdGl0bGUsXG4gICAgd2lkdGgsXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gY29sdW1uO1xuXG4gIGNvbnN0IFtzb3J0T3JkZXIsIHNldFNvcnRPcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PiBkZWZhdWx0U29ydE9yZGVyIHx8IFNvcnRPcmRlci5ERVNDXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU29ydENvbHVtbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNvcnRlZCkge1xuICAgICAgcmV0dXJuIG9uU29ydChzb3J0T3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0T3JkZXIgPVxuICAgICAgc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQyA/IFNvcnRPcmRlci5BU0MgOiBTb3J0T3JkZXIuREVTQztcbiAgICBzZXRTb3J0T3JkZXIobmV3U29ydE9yZGVyKTtcbiAgICBvblNvcnQobmV3U29ydE9yZGVyKTtcbiAgfSwgW29uU29ydCwgc29ydE9yZGVyLCBzb3J0ZWRdKTtcblxuICBjb25zdCBjZWxsUHJvcHMgPVxuICAgIG9uU29ydCAmJiBzb3J0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgb25DbGljazogaGFuZGxlU29ydENvbHVtbixcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICBjb25zdCBkaXNwbGF5QXJyb3cgPSAoKTogc3RyaW5nID0+IHtcbiAgICBpZiAoc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQykge1xuICAgICAgcmV0dXJuIGljb25DYXJldERvd247XG4gICAgfVxuICAgIHJldHVybiBpY29uQ2FyZXRVcDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5jZWxsUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zb3J0SWNvblZpc2libGVdOiBzb3J0YWJsZSAmJiBzb3J0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5zb3J0YWJsZV06IHNvcnRhYmxlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgID5cbiAgICAgIHt0aXRsZX1cbiAgICAgIHtzb3J0YWJsZSA/IChcbiAgICAgICAgPEljb24gYWx0PXtcIlNvcnQgYnV0dG9uXCJ9IHNpemU9XCJzbWFsbFwiIHNyYz17ZGlzcGxheUFycm93KCl9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZVJvd0NlbGwgZnJvbSBcIi4vVGFibGVSb3dDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvdy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIHJvd0hlaWdodDogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvdyh7XG4gIGRhdGEsXG4gIGNvbHVtbnMsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICByb3dIZWlnaHQsXG4gIGlzQWN0aXZlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uUm93Q2xpY2sgJiYgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9uUm93Q2xpY2soZGF0YSk7XG4gICAgfVxuICB9LCBbZGF0YSwgb25Sb3dDbGlja10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csXG4gICAgICAgICAgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zYWJsZT86IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkRlbGV0ZT86IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNsb3NhYmxlLFxuICB2YWx1ZSxcbiAgb25DbG9zZSxcbiAgZGlzYWJsZWQsXG4gIG9uRGVsZXRlLFxuICBpZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25EZWxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9uQ2xvc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DbG9zZSwgb25EZWxldGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCB9XSl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlQnV0dG9ufSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgPEljb24gc3JjPXtpY29uQ3Jvc3NlZH0gYWx0PVwiQ2xvc2VcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gXCIuL1RhZ1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRhZ09wdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIFRhZ3NJbnB1dCh7XG4gIGNsYXNzTmFtZSxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcInNtYWxsXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoe2lkOiB1dWlkdjQoKSwgbGFiZWw6IHRhZ30pKVxuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKVxuICAgICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0YWdzLCBzZXRUYWdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0FkZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuICAgIGxldCB1cGRhdGVkVGFncyA9IFsuLi50YWdzXTtcblxuICAgIGlmICh0cmltbWVkVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWcgPSB7aWQ6IHV1aWR2NCgpLCBsYWJlbDogdHJpbW1lZFRleHR9XG4gICAgICB1cGRhdGVkVGFncyA9IFsuLi50YWdzLCB0YWddO1xuICAgIH1cblxuICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgIHNldFRleHQoXCJcIik7XG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKVxuICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgfVxuICB9LCBbdGFncywgdGV4dCwgc2V0VGFncywgc2V0VGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT09IFwiRW50ZXJcIiB8fCBlLmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVRhZ0FkZCgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlVGFnQWRkXVxuICApO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBoYW5kbGVUYWdBZGQoKSk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxIaW50IG9wdGlvbnM9e3RhZ09wdGlvbnN9IGFsbG93RW50ZXJGaWxsPXt0cnVlfSBhbGxvd1RhYkZpbGw9e3RydWV9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgICBdKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgIDwvSGludD5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHt0YWdzPy5tYXAoKHtpZCwgbGFiZWx9KSA9PiAoXG4gICAgICAgIDxUYWcga2V5PXtpZH0gdmFsdWU9e2xhYmVsfSBpZD17aWR9IG9uRGVsZXRlPXtoYW5kbGVUYWdEZWxldGV9IGNsb3NhYmxlPlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9UYWc+XG4gICAgICApKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFnSW5wdXR9PntpbnB1dEVsZW1lbnR9PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5leHBvcnQgZGVmYXVsdCBUYWdzSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZ3NJbnB1dCB9IGZyb20gXCIuL1RhZ3NJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1Rvb2x0aXAubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvb2x0aXBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgdGV4dDogc3RyaW5nO1xuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG4gIHNob3dUb29sdGlwOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVG9vbHRpcCh7IGNoaWxkcmVuLCB0ZXh0LCBwbGFjZW1lbnQsIHNob3dUb29sdGlwIH06IFRvb2x0aXBQcm9wcykge1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZTxib29sZWFuPigpO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSBzZXRUaW1lb3V0KCgpID0+IEJvb2xlYW4pO1xuICAgIGlmICh0b29sdGlwSXNWaXNpYmxlKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSksIDUwMDApO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3Rvb2x0aXBJc1Zpc2libGVdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2hvd1Rvb2x0aXAgPyAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRleHQ9e3RleHR9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b29sdGlwXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy50b29sdGlwLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudF0sXG4gICAgICAgICAgICB0eXBlb2YgdG9vbHRpcElzVmlzaWJsZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiB0b29sdGlwSXNWaXNpYmxlXG4gICAgICAgICAgICAgID8gc3R5bGVzLnZpc2libGVcbiAgICAgICAgICAgICAgOiBzdHlsZXMubm90VmlzaWJsZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kSGFuZGxlcn1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9vbHRpcCB9IGZyb20gXCIuL1Rvb2x0aXBcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbGF5b3V0PzogTGF5b3V0O1xuICBhdXRvUGxheT86IGJvb2xlYW47XG4gIGxvb3A/OiBib29sZWFuO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwb3N0ZXI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWRlbyh7XG4gIHNyYyxcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgcG9zdGVyLFxuICBtdXRlZCA9IHRydWUsXG4gIGxvb3AgPSB0cnVlLFxuICBhdXRvUGxheSA9IHRydWUsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJleHBvcnQgZW51bSBUYWJsZUNvbmZpZyB7XG4gIFJPV19IRUlHSFQgPSA0OCxcbiAgSEVBREVSX0hFSUdIVD0zMixcbiAgUEFHRV9TSVpFID0gMTAwLFxuICBJVEVNU19MT0FERUQgPSA1LFxufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4uL2NvbnN0YW50cy9UYWJsZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFibGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ3NJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9EcmF3ZXJcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xLjUgMS41TDEzLjUgMTMuNU0xLjUgMTMuNUwxMy41IDEuNScgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNS40Njg1IDE1LjQ2NjVMMTEuMjAxOCAxMS4xOTk5TTYuOTM1MTYgMTMuMzMzMkMzLjQwMDUzIDEzLjMzMzIgMC41MzUxNTYgMTAuNDY3OCAwLjUzNTE1NiA2LjkzMzJDMC41MzUxNTYgMy4zOTg1OCAzLjQwMDUzIDAuNTMzMjAzIDYuOTM1MTYgMC41MzMyMDNDMTAuNDY5OCAwLjUzMzIwMyAxMy4zMzUyIDMuMzk4NTggMTMuMzM1MiA2LjkzMzJDMTMuMzM1MiAxMC40Njc4IDEwLjQ2OTggMTMuMzMzMiA2LjkzNTE2IDEzLjMzMzJaJyBzdHJva2U9JyUyMzg5ODg5MScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC45MzMxIDQuMjY3NThMNy45OTk3NCAxMS43MzQyTDEuMDY2NDEgNC4yNjc1OCcgc3Ryb2tlPSclMjM4OTg4OTEnIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Mi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92My5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xuXG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG5cbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcblxudmFyIF92NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjUuanNcIikpO1xuXG52YXIgX25pbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmlsLmpzXCIpKTtcblxudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEphdmFTY3JpcHQgTUQ1XG4gKlxuICogTW9kaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5mdW5jdGlvbiBtZDUoYnl0ZXMpIHtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWQ1VG9IZXhFbmNvZGVkQXJyYXkod29yZHNUb01kNShieXRlc1RvV29yZHMoYnl0ZXMpLCBieXRlcy5sZW5ndGggKiA4KSk7XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVUb0hleEVuY29kZWRBcnJheShpbnB1dCkge1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgY29uc3QgbGVuZ3RoMzIgPSBpbnB1dC5sZW5ndGggKiAzMjtcbiAgY29uc3QgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIGNvbnN0IHggPSBpbnB1dFtpID4+IDVdID4+PiBpICUgMzIgJiAweGZmO1xuICAgIGNvbnN0IGhleCA9IHBhcnNlSW50KGhleFRhYi5jaGFyQXQoeCA+Pj4gNCAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZiksIDE2KTtcbiAgICBvdXRwdXQucHVzaChoZXgpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG91dHB1dCBsZW5ndGggd2l0aCBwYWRkaW5nIGFuZCBiaXQgbGVuZ3RoXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGg4KSB7XG4gIHJldHVybiAoaW5wdXRMZW5ndGg4ICsgNjQgPj4+IDkgPDwgNCkgKyAxNCArIDE7XG59XG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHdvcmRzVG9NZDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbZ2V0T3V0cHV0TGVuZ3RoKGxlbikgLSAxXSA9IGxlbjtcbiAgbGV0IGEgPSAxNzMyNTg0MTkzO1xuICBsZXQgYiA9IC0yNzE3MzM4Nzk7XG4gIGxldCBjID0gLTE3MzI1ODQxOTQ7XG4gIGxldCBkID0gMjcxNzMzODc4O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBjb25zdCBvbGRhID0gYTtcbiAgICBjb25zdCBvbGRiID0gYjtcbiAgICBjb25zdCBvbGRjID0gYztcbiAgICBjb25zdCBvbGRkID0gZDtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMyk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG4gICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVBZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gIH1cblxuICByZXR1cm4gW2EsIGIsIGMsIGRdO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgYnl0ZXMgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aDggPSBpbnB1dC5sZW5ndGggKiA4O1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbmd0aDgpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dFtpIC8gOF0gJiAweGZmKSA8PCBpICUgMzI7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cblxuXG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgY29uc3QgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICBjb25zdCBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIG1zdyA8PCAxNiB8IGxzdyAmIDB4ZmZmZjtcbn1cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiBudW0gPDwgY250IHwgbnVtID4+PiAzMiAtIGNudDtcbn1cbi8qXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICovXG5cblxuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVBZGQoYml0Um90YXRlTGVmdChzYWZlQWRkKHNhZmVBZGQoYSwgcSksIHNhZmVBZGQoeCwgdCkpLCBzKSwgYik7XG59XG5cbmZ1bmN0aW9uIG1kNWZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgYyB8IH5iICYgZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgZCB8IGMgJiB+ZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWhoKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIGxldCB2O1xuICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7IC8vIFBhcnNlICMjIyMjIyMjLS4uLi4tLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFyclswXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgwLCA4KSwgMTYpKSA+Pj4gMjQ7XG4gIGFyclsxXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzJdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclszXSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0jIyMjLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoOSwgMTMpLCAxNikpID4+PiA4O1xuICBhcnJbNV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0jIyMjLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzZdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxOCksIDE2KSkgPj4+IDg7XG4gIGFycls3XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tIyMjIy0uLi4uLi4uLi4uLi5cblxuICBhcnJbOF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTksIDIzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzldID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0uLi4uLSMjIyMjIyMjIyMjI1xuICAvLyAoVXNlIFwiL1wiIHRvIGF2b2lkIDMyLWJpdCB0cnVuY2F0aW9uIHdoZW4gYml0LXNoaWZ0aW5nIGhpZ2gtb3JkZXIgYnl0ZXMpXG5cbiAgYXJyWzEwXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMV0gPSB2IC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTJdID0gdiA+Pj4gMjQgJiAweGZmO1xuICBhcnJbMTNdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMTRdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclsxNV0gPSB2ICYgMHhmZjtcbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIF9kZWZhdWx0ID0gcGFyc2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyBBZGFwdGVkIGZyb20gQ2hyaXMgVmVuZXNzJyBTSEExIGNvZGUgYXRcbi8vIGh0dHA6Ly93d3cubW92YWJsZS10eXBlLmNvLnVrL3NjcmlwdHMvc2hhMS5odG1sXG5mdW5jdGlvbiBmKHMsIHgsIHksIHopIHtcbiAgc3dpdGNoIChzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuICB9XG59XG5cbmZ1bmN0aW9uIFJPVEwoeCwgbikge1xuICByZXR1cm4geCA8PCBuIHwgeCA+Pj4gMzIgLSBuO1xufVxuXG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIGNvbnN0IEsgPSBbMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNl07XG4gIGNvbnN0IEggPSBbMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMF07XG5cbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXMucHVzaChtc2cuY2hhckNvZGVBdChpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIC8vIENvbnZlcnQgQXJyYXktbGlrZSB0byBBcnJheVxuICAgIGJ5dGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYnl0ZXMpO1xuICB9XG5cbiAgYnl0ZXMucHVzaCgweDgwKTtcbiAgY29uc3QgbCA9IGJ5dGVzLmxlbmd0aCAvIDQgKyAyO1xuICBjb25zdCBOID0gTWF0aC5jZWlsKGwgLyAxNik7XG4gIGNvbnN0IE0gPSBuZXcgQXJyYXkoTik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tpICogNjQgKyBqICogNF0gPDwgMjQgfCBieXRlc1tpICogNjQgKyBqICogNCArIDFdIDw8IDE2IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAzXTtcbiAgICB9XG5cbiAgICBNW2ldID0gYXJyO1xuICB9XG5cbiAgTVtOIC0gMV1bMTRdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAvIE1hdGgucG93KDIsIDMyKTtcbiAgTVtOIC0gMV1bMTRdID0gTWF0aC5mbG9vcihNW04gLSAxXVsxNF0pO1xuICBNW04gLSAxXVsxNV0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4ICYgMHhmZmZmZmZmZjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCAxNjsgKyt0KSB7XG4gICAgICBXW3RdID0gTVtpXVt0XTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB0ID0gMTY7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBXW3RdID0gUk9UTChXW3QgLSAzXSBeIFdbdCAtIDhdIF4gV1t0IC0gMTRdIF4gV1t0IC0gMTZdLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IEhbMF07XG4gICAgbGV0IGIgPSBIWzFdO1xuICAgIGxldCBjID0gSFsyXTtcbiAgICBsZXQgZCA9IEhbM107XG4gICAgbGV0IGUgPSBIWzRdO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5mbG9vcih0IC8gMjApO1xuICAgICAgY29uc3QgVCA9IFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW3RdID4+PiAwO1xuICAgICAgZSA9IGQ7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBST1RMKGIsIDMwKSA+Pj4gMDtcbiAgICAgIGIgPSBhO1xuICAgICAgYSA9IFQ7XG4gICAgfVxuXG4gICAgSFswXSA9IEhbMF0gKyBhID4+PiAwO1xuICAgIEhbMV0gPSBIWzFdICsgYiA+Pj4gMDtcbiAgICBIWzJdID0gSFsyXSArIGMgPj4+IDA7XG4gICAgSFszXSA9IEhbM10gKyBkID4+PiAwO1xuICAgIEhbNF0gPSBIWzRdICsgZSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiBbSFswXSA+PiAyNCAmIDB4ZmYsIEhbMF0gPj4gMTYgJiAweGZmLCBIWzBdID4+IDggJiAweGZmLCBIWzBdICYgMHhmZiwgSFsxXSA+PiAyNCAmIDB4ZmYsIEhbMV0gPj4gMTYgJiAweGZmLCBIWzFdID4+IDggJiAweGZmLCBIWzFdICYgMHhmZiwgSFsyXSA+PiAyNCAmIDB4ZmYsIEhbMl0gPj4gMTYgJiAweGZmLCBIWzJdID4+IDggJiAweGZmLCBIWzJdICYgMHhmZiwgSFszXSA+PiAyNCAmIDB4ZmYsIEhbM10gPj4gMTYgJiAweGZmLCBIWzNdID4+IDggJiAweGZmLCBIWzNdICYgMHhmZiwgSFs0XSA+PiAyNCAmIDB4ZmYsIEhbNF0gPj4gMTYgJiAweGZmLCBIWzRdID4+IDggJiAweGZmLCBIWzRdICYgMHhmZl07XG59XG5cbnZhciBfZGVmYXVsdCA9IHNoYTE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2MTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfbWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21kNS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHYzID0gKDAsIF92LmRlZmF1bHQpKCd2MycsIDB4MzAsIF9tZC5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHYzO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlVSTCA9IGV4cG9ydHMuRE5TID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gdjM1O1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuRE5TID0gRE5TO1xuY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLlVSTCA9IFVSTDtcblxuZnVuY3Rpb24gdjM1KG5hbWUsIHZlcnNpb24sIGhhc2hmdW5jKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHZhciBfbmFtZXNwYWNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lc3BhY2UgPSAoMCwgX3BhcnNlLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG4gIH0gLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG5cblxuICB0cnkge1xuICAgIGdlbmVyYXRlVVVJRC5uYW1lID0gbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGVycikge30gLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcblxuXG4gIGdlbmVyYXRlVVVJRC5ETlMgPSBETlM7XG4gIGdlbmVyYXRlVVVJRC5VUkwgPSBVUkw7XG4gIHJldHVybiBnZW5lcmF0ZVVVSUQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZlcnNpb24odXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2ZXJzaW9uO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInN0YXJ0c1dpdGgiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BzIiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImhhc093blByb3BlcnR5IiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwiYXJndW1lbnRzIiwicCIsInByb3RvdHlwZSIsIl9fY3JlYXRlQmluZGluZyIsImsyIiwiZW51bWVyYWJsZSIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9fZXNNb2R1bGUiLCJleHBvcnRzIiwiSGludCIsInJlYWN0XzEiLCJ1dGlsc18xIiwiX2IiLCJjaGlsZCIsImRlZmF1bHQiLCJDaGlsZHJlbiIsIm9ubHkiLCJjaGlsZHJlbiIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZUhpbnQiLCJhbGxvd1RhYkZpbGwiLCJhbGxvd0VudGVyRmlsbCIsIm9uRmlsbCIsIm9uSGludCIsInZhbHVlTW9kaWZpZXIiLCJjaGlsZFByb3BzIiwibWFpbklucHV0UmVmIiwiaGludFdyYXBwZXJSZWYiLCJoaW50UmVmIiwidW5Nb2RpZmllZElucHV0VGV4dCIsInNldFVubW9kaWZpZWRJbnB1dFRleHQiLCJfZCIsInRleHQiLCJzZXRUZXh0IiwiX2UiLCJoaW50Iiwic2V0SGludCIsIl9mIiwibWF0Y2giLCJzZXRNYXRjaCIsIl9nIiwiY2hhbmdlRXZlbnQiLCJzZXRDaGFuZ2VFdmVudCIsImR1cGxpY2F0ZSIsImdldEZpcnN0RHVwbGljYXRlT3B0aW9uIiwiY29uc29sZSIsIndhcm4iLCJpbnB1dFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlSGludCIsInNldEhpbnRUZXh0QW5kSWQiLCJmaWx0ZXIiLCJ4Iiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiZGVmYXVsdFByb3BzIiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZQcm9wcyIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJuYW1lIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJmb290ZXIiLCJvcGVuIiwiZHJhd2VyIiwiZHJhd2VyQ29udGVudCIsImRyYXdlckhlYWRlckNvbnRlbnQiLCJkcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50IiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uIiwiSWNvbiIsInNyYyIsImRyYXdlck1haW4iLCJkcmF3ZXJGb290ZXIiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiaXRlbUJvZHlSZW5kZXJlciIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInNldElzT3BlbiIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJidXR0b24iLCJDbGlja2FibGUiLCJNZW51IiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsIkRyb3Bkb3duIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsImhhc092ZXJsYXkiLCJvdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwibGlzdCIsImFjdGl2ZSIsImxpc3RWaWV3SXRlbSIsIkJ1dHRvbkxpbmsiLCJhcyIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsIlBsYWNlbWVudENvbnRleHQiLCJFcnJvciIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibWVudSIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZXZlbnREaWdpdEtleXMiLCJOdW1wYWQiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsIk51bXBhZEtleXMiLCJmaWxsIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwic2hvd0V4cGFuZGVkR3JvdXAiLCJTZWxlY3RDb250ZXh0IiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwiaXNDaGVja2VkIiwiY2hlY2tib3hDb250YWluZXIiLCJDaGVja2JveCIsImlzT3B0aW9uIiwib25GaWx0ZXIiLCJzZWxlY3RBbGxDaGVja2VkIiwidG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCIsInNlYXJjaEtleXdvcmQiLCJzZWxlY3RBbGwiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJoYXNHcm91cE9wdGlvbiIsImZpbHRlck9wdGlvbnMiLCJrZXl3b3JkIiwidHJpbSIsImZpbHRlcmVkT3B0aW9ucyIsInJlZHVjZSIsImZpbHRlcmVkIiwiZ3JvdXBPcHRpb24iLCJmaWx0ZXJlZEdyb3VwT3B0aW9ucyIsImZpbHRlcmVkT3B0aW9uc0NvdW50IiwibmV4dE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uc0NvdW50Iiwic2VsZWN0ZWRPcHRpb24iLCJmaWx0ZXJlZE9wdGlvbiIsImhhbmRsZVNlbGVjdEFsbENsaWNrIiwib3B0aW9uc1RvU2VsZWN0IiwiZmxhdCIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwibm9PcHRpb25zIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsInNjcm9sbE1lbnVJbnRvVmlldyIsInNob3dTZWxlY3RlZEFzVGFncyIsInNob3dTZWFyY2giLCJvcGVuZWQiLCJ0b2dnbGVPcGVuZWQiLCJjb250ZW50UmVmIiwib25SZXNpemUiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJSTyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYW5kbGVPcGVuU2VsZWN0IiwidmFsdWVzIiwiU2VsZWN0Q29udGV4dFByb3ZpZGVyIiwiU2VsZWN0b3IiLCJpc0Ryb3Bkb3duT3BlbmVkIiwiaWNvbkJ1dHRvbiIsInNlYXJjaENvbnRhaW5lciIsIlNlYXJjaCIsIk9wdGlvbkxpc3QiLCJpbml0aWFsU3RhdGUiLCJ1cGRhdGVkU2VsZWN0ZWRPcHRpb25zIiwiY29udGV4dFZhbHVlIiwiaGFuZGxlVGFnQ2xpY2siLCJoYW5kbGVUYWdDbG9zZSIsInBsYWNlaG9sZGVyVG9TaG93Iiwic2hvd0FzVGFncyIsInRhZ1dyYXBwZXIiLCJUYWciLCJjbG9zYWJsZSIsInNob3dBc1RleHQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsIm9uUm93Q2xpY2siLCJoYXNBcnJvdyIsIm9uTG9hZE1vcmUiLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwiVGFibGVDb25maWciLCJQQUdFX1NJWkUiLCJ0YWJsZUhlaWdodCIsIlJPV19IRUlHSFQiLCJoZWFkZXJIZWlnaHQiLCJIRUFERVJfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsInJvdyIsImhhbmRsZUxpc3RTY3JvbGwiLCJsb2FkTW9yZSIsIklURU1TX0xPQURFRCIsInBsYWNlaG9sZGVyQ29udGFpbmVyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiYm9yZGVyQm90dG9tIiwiY29sdW1uIiwib25Tb3J0Iiwic29ydGFibGUiLCJzb3J0ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwidGl0bGUiLCJTb3J0T3JkZXIiLCJERVNDIiwic29ydE9yZGVyIiwic2V0U29ydE9yZGVyIiwiaGFuZGxlU29ydENvbHVtbiIsIm5ld1NvcnRPcmRlciIsIkFTQyIsImNlbGxQcm9wcyIsInRhYmxlSGVhZGVyQ2VsbCIsInNvcnRJY29uVmlzaWJsZSIsImhhbmRsZVJvd0NsaWNrIiwiZGF0YUluZGV4Iiwib25EZWxldGUiLCJjbG9zZUJ1dHRvbiIsInBhdHRlcm4iLCJpbnB1dE1vZGUiLCJ0YWdPcHRpb25zIiwidGFncyIsInNldFRhZ3MiLCJ0YWdzQXJyIiwidGFnIiwiaGFuZGxlVGV4dENoYW5nZSIsImhhbmRsZVRhZ0RlbGV0ZSIsInVwZGF0ZWRUYWdzIiwiaGFuZGxlVGFnQWRkIiwidHJpbW1lZFRleHQiLCJoYW5kbGVLZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidGFnSW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwic2hvd1Rvb2x0aXAiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsIm9uVG91Y2hFbmRIYW5kbGVyIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0b29sdGlwIiwidmlzaWJsZSIsIm5vdFZpc2libGUiLCJvblRvdWNoRW5kIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaXMiLCJsIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJjIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJfbmlsIiwiX3BhcnNlIiwiX3N0cmluZ2lmeSIsIl92IiwiX3YyIiwiX3YzIiwiX3Y0IiwiX3ZhbGlkYXRlIiwiX3ZlcnNpb24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsImxzdyIsIm1kNWNtbiIsInEiLCJudW0iLCJjbnQiLCJtZDVmZiIsIm1kNWdnIiwibWQ1aGgiLCJtZDVpaSIsImJ5dGVzIiwibXNnIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJVaW50OEFycmF5Iiwib3V0cHV0IiwibGVuZ3RoMzIiLCJoZXhUYWIiLCJoZXgiLCJjaGFyQXQiLCJtZDVUb0hleEVuY29kZWRBcnJheSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1IiwibGVuZ3RoOCIsIlVpbnQzMkFycmF5IiwiYnl0ZXNUb1dvcmRzIiwiX2RlZmF1bHQiLCJyYW5kb21VVUlEIiwiY3J5cHRvIiwidXVpZCIsImFyciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwieiIsIlJPVEwiLCJLIiwiSCIsIk4iLCJNIiwiaiIsInBvdyIsIlciLCJUIiwidW5zYWZlU3RyaW5naWZ5IiwiYnl0ZVRvSGV4IiwiX3JuZyIsIl9ub2RlSWQiLCJfY2xvY2tzZXEiLCJfbGFzdE1TZWNzIiwiX2xhc3ROU2VjcyIsImJ1ZiIsIm5vZGUiLCJjbG9ja3NlcSIsInNlZWRCeXRlcyIsInJuZyIsIm1zZWNzIiwibnNlY3MiLCJkdCIsInRsIiwidG1oIiwiX21kIiwiVVJMIiwiRE5TIiwidmVyc2lvbiIsImhhc2hmdW5jIiwiZ2VuZXJhdGVVVUlEIiwibmFtZXNwYWNlIiwiX25hbWVzcGFjZSIsInN0ciIsInN0cmluZ1RvQnl0ZXMiLCJfbmF0aXZlIiwicm5kcyIsIl9zaGEiLCJfcmVnZXgiLCJ0ZXN0IiwicmVxdWlyZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJkZWZpbml0aW9uIiwicHJvcCIsInRvU3RyaW5nVGFnIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJzb3VyY2VSb290IjoiIn0=
2
+ (()=>{"use strict";var e={5348:(e,t,n)=>{n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>Y,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const c=new WeakMap,d={},s={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,j]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],x={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},E={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),j("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{j("online",t),j("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,L=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?S(e):"",t]};let N=0;const z=()=>++N,H=2;var A=H;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const d=!1!==a.revalidate,s=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!/^\$(inf|sub)\$/.test(o)&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=c.get(t),b=v[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=z();_[o]=[S,0];const P=!h(u),C=a(),j=C.data,x=C._c,E=h(x)?j:x;if(P&&(u=m(u)?u(E):u,l({data:u,_c:E})),m(M))try{M=M(E)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=E,l({data:M,_c:p}))}i&&(w||(m(i)&&(M=i(M,E)),l({data:M,_c:p}))),_[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:M;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!c.has(e)){const n=_(E,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(const e of o)e(n,r)},d=()=>{if(!c.has(e)&&(c.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[W,G]=V(new Map),U=_({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},x),K=(0,r.createContext)({}),q=b&&window.__SWR_DEVTOOLS_USE__,Z=q?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(U,(0,r.useContext)(K));Z.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=c.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));q&&(window.__SWR_DEVTOOLS_REACT__=r);const X={dedupe:!0};function Y(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(K),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,u=(0,r.useRef)(p);l&&!u.current&&(u.current=V(l(i.cache||W),a));const c=u.current;return c&&(i.cache=c[0],i.mutate=c[1]),D((()=>{if(c)return c[2]&&c[2](),c[3]}),[]),(0,r.createElement)(K.Provider,_(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",open:"HiCai5Adscx8ZbGll4SR",drawerContent:"iIgBAsoPEjFOkH8UnKVX",drawerHeaderContent:"VC8jvVhJRcftqlacGAGI",drawerHeaderCloseIconContent:"JR5GIFQGA_SZ87ScUlE9",drawerHeaderCloseIcon:"B6Rc33pQzXBOube0jdZ9",drawerMain:"MyiN1UNjbOTgwJ1TXmEY",drawerFooter:"Cea_ntGL595Gdnjs1DqU"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",visible:"uToJfcRCR6eVHIm80wGb",notVisible:"hGxgyhPmQmM97ViOpcv8",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,c=e.allowTabFill,d=e.allowEnterFill,s=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),_=l.useRef(null),g=l.useState(""),b=g[0],y=g[1],O=l.useState(""),w=O[0],M=O[1],S=l.useState(""),P=S[0],C=S[1],j=l.useState(),x=j[0],E=j[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&T(m,_,e)}}));var R=function(e){M(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",C(t),E(n),f&&f(n)},L=function(){if(""!==P&&k){var e=b+P;k.target.value=e,v.onChange&&v.onChange(k),R(""),s&&s(x),y(e)}},T=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},N=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==_?void 0:_.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?L():(t&&c&&"Tab"===e.key&&""!==P||t&&d&&"Enter"===e.key&&""!==P)&&(e.preventDefault(),L()),v.onKeyDown&&v.onKeyDown(e)},ref:N&&"string"!=typeof N?u.mergeRefs(N,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:_,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?P&&""!==P&&(L(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:P&&""!==P?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:P,tabIndex:-1}))))}},2394:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>x});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,d))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=s["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=c[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),d[17]=!0,d[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var v=s[r][f],h=v.splitKey,m=v.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function M(e,t,n){p=[];var r=i(e),l=[],c="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(c=t.scope),t.element&&(f=t.element),t.keyup&&(g=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(c=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(s).forEach((function(n){var r=s[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(s).forEach((function(e){return delete s[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var j=n(6689);function x(){return M.isPressed}M.filter=function(){return!0};var E=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return E(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,j.useRef)(null),m=(0,j.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(I(e)&&!E(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,j.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var D=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>l});var r=n(6689),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},i=function(e){function t(){var e,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,i=Array(o),l=0;l<o;l++)i[l]=arguments[l];return n=r=a(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},a(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const l=i},5022:(e,t,n)=>{function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>E,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var c=n(6689);function d(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var s="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=s(),r={id:requestAnimationFrame((function o(){s()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function _(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var g=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,j=e.shouldResetStyleCacheOnItemSizeChange,x=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,c=r._getItemStyleCache(j&&i,j&&l,j&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;c[s]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),x(e),null};var E=t.prototype;return E.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},E.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,c=a.width,d=this.state,f=d.scrollLeft,p=d.scrollTop,_=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var g=s(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>c?_:0,O=g>l?_:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},E.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},E.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},E.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},E.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,d=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],j=this._getVerticalRangeToRender(),x=j[0],E=j[1],I=[];if(o>0&&g)for(var k=x;k<=E;k++)for(var D=P;D<=C;D++)I.push((0,c.createElement)(t,{columnIndex:D,data:f,isScrolling:O?M:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=s(this.props,this._instanceProps),L=v(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:I,ref:l,style:{height:R,pointerEvents:M?"none":void 0,width:L}}))},E._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],p=d[2],v=d[3];this._callOnItemsRendered(i,l,s,f,u,c,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},E._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,s,this._instanceProps),v=l(this.props,p,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},E._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,d),v=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-p),Math.max(0,Math.min(a-1,f+v)),s,f]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},S=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?C(e,t,n,a,0,r):j(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},j=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},x=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},E=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return x("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return x("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,d=e.getOffsetForIndexAndAlignment,s=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?d:0;c[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(d(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,d=e.innerTagName,s=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],j=[];if(s>0)for(var x=P;x<=C;x++)j.push((0,c.createElement)(t,{data:f,key:v(x,f),index:x,isScrolling:b?O:void 0,style:this._getItemStyle(x)}));var E=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:j,ref:l,style:{height:w?"100%":E,pointerEvents:O?"none":void 0,width:w?E:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=s(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},L=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=L(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},N=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return L(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:N,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=L(e,t,o),f=N(e,o),p=Math.max(0,Math.min(f-d,s.offset)),v=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=v-d&&r<=p+d?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&L(e,n,t).offset<r;)n+=a,a*=2;return T(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,c="horizontal"===o||"horizontal"===l?u:a,d=L(e,t,r),s=n+c,f=d.offset+d.size,p=t;p<i-1&&f<s;)p++,f+=L(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),H=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),A=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,p=Math.max(0,u*c-f),v=Math.min(p,t*c),h=Math.max(0,t*c-f+c+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=d(e,F),o=t.style,a=d(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7237:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,j=void 0!==C&&C,x=e.autoFocus,E=void 0!==x&&x,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=e.size,T=void 0===L?"medium":L,N=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[T],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=j,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:E,type:N,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,c=e.className,d=e.size,s=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,j=void 0!==C&&C,x=e.disabled,E=void 0!==x&&x,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=E,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=j,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},L),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(4115),d=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,s=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},3096:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(2838));t.default=function(e){var t,n=e.header,r=e.footer,c=e.open,d=e.children,s=e.className,f=e.style,p=e.onClose;return a.default.createElement("div",{className:(0,o.default)([u.default.drawer,(t={},t[u.default.open]=c,t),s]),style:f},a.default.createElement("div",{className:u.default.drawerContent},a.default.createElement("div",{className:u.default.drawerHeaderContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIconContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:p},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),!!n&&a.default.createElement("div",null,n)),a.default.createElement("div",{className:u.default.drawerMain},d),!!r&&a.default.createElement("div",{className:u.default.drawerFooter},r)))}},3212:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!v)};return i.default.createElement(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,j=e.rounded,x=void 0!==j&&j,E=e.size,I=void 0===E?"medium":E;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=x,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,p="center"===s.vertical?"verticalCenter":s.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,j=e.size,x=void 0===j?"medium":j,E=e.type,I=void 0===E?"button":E;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[x],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:x,inverted:g}),u)}},2847:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,j=void 0!==C&&C,x=e.size,E=void 0===x?"medium":x,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([c.default.container,c.default[E],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=j,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:E,inverted:h}),d)}},5860:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,f=e.decoding,p=void 0===f?"auto":f,v=e.loading,h=void 0===v?"eager":v,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:p,loading:h,style:m});return u?o.default.createElement("div",{ref:c,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:c,inverted:r,transparent:s,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(c.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),p&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),c=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,c=e.className,d=e.noPadding,s=void 0!==d&&d,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(c(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=d,t)]),onClick:f},n)}},6650:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(4685)),d=n(5348),s=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,d.useToggle)(a),h=i[0],m=i[1],_=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:c.default.header,onClick:_},l.default.createElement("div",{className:c.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[c.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.SelectContext),i=a.multiple,f=a.selectedOptions,p=a.updateSelectedOption,v=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){p(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var c=n(5348),d=i(n(6689)),s=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useMemo)((function(){return P.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[M,P,t.isOption]),j=(0,d.useMemo)((function(){return O.filter((function(e){return P.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,P]),x=(0,d.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=P.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[P,t.isOption,u,w,m]);return(0,d.useEffect)((function(){j===C?m(!0):u&&m(!1)}),[j,C,u,m]),d.default.createElement("div",{className:h.default.container},y&&g&&!!P.length&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:x},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!j&&j!==C,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.length?P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(p.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):d.default.createElement("div",{className:h.default.noOptions},"No matches for",d.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(2396)),d=n(2568),s=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(d.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,t])},l.default.createElement("div",{className:c.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:c.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(3790)),d=i(n(7917)),s=n(5348),f=n(2568),p=n(4745),v=n(8947),h=n(2847),m=n(4292),_=n(4115);t.default=function(e){var t,n,r,o=e.className,a=e.defaultValue,i=e.disabled,g=e.multiple,b=void 0!==g&&g,y=e.options,O=e.placeholder,w=e.label,M=e.selectAll,S=e.showExpandedGroup,P=e.scrollMenuIntoView,C=void 0!==P&&P,j=e.size,x=void 0===j?"medium":j,E=e.showSelectedAsTags,I=void 0!==E&&E,k=e.showSearch,D=void 0!==k&&k,R=e.width,L=e.onChange,T=e.onFilter,N=(0,s.useToggle)(!1),z=N[0],H=N[1],A=(0,s.useOutsideClick)((function(){return H(!1)})),B=(0,l.useRef)(),F=(0,l.useCallback)((function(){B.current&&B.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(B.current&&z&&C){var e=new ResizeObserver(F);return e.observe(B.current),function(){e.disconnect(),e=null}}}),[z,C,F]);var V=(0,l.useCallback)((function(){H()}),[]),W=(0,l.useCallback)((function(e){b||H(!1),L&&L(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:W,selectAll:M,showExpandedGroup:S},l.default.createElement("div",{ref:A},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t),d.default[x],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([d.default.header,(n={},n[d.default.active]=z,n)]),onClick:V},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:I,isDropdownOpened:z}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(r={},r[d.default.expanded]=z,r)]),src:c.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:d.default.content,ref:B},0===y.length?l.default.createElement("div",{className:d.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:T,onChange:W}))))))}},2568:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),c={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(c.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(c.searchKeyword),y=b[0],O=b[1],w=(0,l.useCallback)((function(e){var t;t=o?_.some((function(t){return t.value===e.value}))?_.filter((function(t){return t.value!==e.value})):i(i([],_,!0),[e],!1):[e],g(t),h&&h(t.map((function(e){return e.value})))}),[_,g]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),g(t)}}),[n,v]);var M=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[s,_,g,w,y,O]);return l.default.createElement(d.Provider,{value:M},t)}},237:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),c=n(2568),d=n(2149),s=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(c.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,s.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(d.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),_=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:_:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].label):h}},4745:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),c=l(n(7659)),d=n(5022),s=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,_=e.pageSize,g=void 0===_?v.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,M=e.headerHeight,S=void 0===M?v.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,j=e.itemsCount,x=e.isHeaderSticky,E=void 0!==x&&x,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),L=R[0],T=R[1],N=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;T(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==j&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,j,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},N)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:E,headerHeight:S}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,c=e.isHeaderSticky,d=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),c=i(n(6689)),d=n(4958),s=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,_=n.className,g=(0,c.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return c.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,_,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(7451)),d=n(4958),s=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.disabled]=i,t)])},l.default.createElement("span",{className:s.default.content},n),r&&l.default.createElement("span",{className:s.default.closeButton,onClick:v},l.default.createElement(d.Icon,{src:c.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),c=l(n(7659)),d=n(1982),s=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,_=e.inputRef,g=e.size,b=void 0===g?"small":g,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,M=void 0!==w&&w,S=e.noBorder,P=void 0!==S&&S,C=e.inputMode,j=e.disabled,x=e.tagOptions,E=void 0===x?[]:x,I=(0,u.useState)(""),k=I[0],D=I[1],R=(0,u.useState)(),L=R[0],T=R[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,d.v4)(),label:e}}));T(e)}}),[l,T]);var N=(0,u.useCallback)((function(e){var t=e.target.value;D(t)}),[D]),z=(0,u.useCallback)((function(e){var t=L.filter((function(t){return t.id!==e}));if(T(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[L,T]),H=(0,u.useCallback)((function(){var e=k.trim(),t=i([],L,!0);if(e.length>0){var n={id:(0,d.v4)(),label:e};t=i(i([],L,!0),[n],!1)}if(T(t),D(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[L,k,T,D]),A=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),H())}),[H]),B=(0,f.useOutsideClick)((function(){return H()})),F=u.default.createElement(s.Hint,{options:E,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:_,className:(0,c.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=P,t)]),onChange:N,onKeyDown:A,pattern:m,placeholder:a,name:h,type:O,value:k,autoFocus:M,inputMode:C,disabled:j}));return u.default.createElement("div",{className:(0,c.default)([v.default.container,(n={},n[v.default.disabled]=j,n),r]),ref:B},null==L?void 0:L.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:z,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},F))}},2819:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),c=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.showTooltip,a=(0,l.useState)(),i=a[0],d=a[1],s=(0,l.useCallback)((function(){d(!0)}),[]);return(0,l.useEffect)((function(){var e=setTimeout((function(){return Boolean}));return i&&(e=setTimeout((function(){return d(!1)}),5e3)),function(){return clearTimeout(e)}}),[i]),l.default.createElement(l.default.Fragment,null,o?l.default.createElement("div",{"data-text":n,"data-testid":"tooltip",className:(0,u.default)([c.default.tooltip,c.default[r],void 0===i?null:i?c.default.visible:c.default.notVisible]),onTouchEnd:s},t):t)}},746:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,p=e.autoPlay,v=void 0===p||p,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},3250:(e,t,n)=>{var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},1982:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),c=f(n(6435)),d=f(n(4008)),s=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,c=-271733879,d=-1732584194,s=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=c,p=d,v=s;o=a(o,c,d,s,e[t],7,-680876936),s=a(s,o,c,d,e[t+1],12,-389564586),d=a(d,s,o,c,e[t+2],17,606105819),c=a(c,d,s,o,e[t+3],22,-1044525330),o=a(o,c,d,s,e[t+4],7,-176418897),s=a(s,o,c,d,e[t+5],12,1200080426),d=a(d,s,o,c,e[t+6],17,-1473231341),c=a(c,d,s,o,e[t+7],22,-45705983),o=a(o,c,d,s,e[t+8],7,1770035416),s=a(s,o,c,d,e[t+9],12,-1958414417),d=a(d,s,o,c,e[t+10],17,-42063),c=a(c,d,s,o,e[t+11],22,-1990404162),o=a(o,c,d,s,e[t+12],7,1804603682),s=a(s,o,c,d,e[t+13],12,-40341101),d=a(d,s,o,c,e[t+14],17,-1502002290),c=a(c,d,s,o,e[t+15],22,1236535329),o=i(o,c,d,s,e[t+1],5,-165796510),s=i(s,o,c,d,e[t+6],9,-1069501632),d=i(d,s,o,c,e[t+11],14,643717713),c=i(c,d,s,o,e[t],20,-373897302),o=i(o,c,d,s,e[t+5],5,-701558691),s=i(s,o,c,d,e[t+10],9,38016083),d=i(d,s,o,c,e[t+15],14,-660478335),c=i(c,d,s,o,e[t+4],20,-405537848),o=i(o,c,d,s,e[t+9],5,568446438),s=i(s,o,c,d,e[t+14],9,-1019803690),d=i(d,s,o,c,e[t+3],14,-187363961),c=i(c,d,s,o,e[t+8],20,1163531501),o=i(o,c,d,s,e[t+13],5,-1444681467),s=i(s,o,c,d,e[t+2],9,-51403784),d=i(d,s,o,c,e[t+7],14,1735328473),c=i(c,d,s,o,e[t+12],20,-1926607734),o=l(o,c,d,s,e[t+5],4,-378558),s=l(s,o,c,d,e[t+8],11,-2022574463),d=l(d,s,o,c,e[t+11],16,1839030562),c=l(c,d,s,o,e[t+14],23,-35309556),o=l(o,c,d,s,e[t+1],4,-1530992060),s=l(s,o,c,d,e[t+4],11,1272893353),d=l(d,s,o,c,e[t+7],16,-155497632),c=l(c,d,s,o,e[t+10],23,-1094730640),o=l(o,c,d,s,e[t+13],4,681279174),s=l(s,o,c,d,e[t],11,-358537222),d=l(d,s,o,c,e[t+3],16,-722521979),c=l(c,d,s,o,e[t+6],23,76029189),o=l(o,c,d,s,e[t+9],4,-640364487),s=l(s,o,c,d,e[t+12],11,-421815835),d=l(d,s,o,c,e[t+15],16,530742520),c=l(c,d,s,o,e[t+2],23,-995338651),o=u(o,c,d,s,e[t],6,-198630844),s=u(s,o,c,d,e[t+7],10,1126891415),d=u(d,s,o,c,e[t+14],15,-1416354905),c=u(c,d,s,o,e[t+5],21,-57434055),o=u(o,c,d,s,e[t+12],6,1700485571),s=u(s,o,c,d,e[t+3],10,-1894986606),d=u(d,s,o,c,e[t+10],15,-1051523),c=u(c,d,s,o,e[t+1],21,-2054922799),o=u(o,c,d,s,e[t+8],6,1873313359),s=u(s,o,c,d,e[t+15],10,-30611744),d=u(d,s,o,c,e[t+6],15,-1560198380),c=u(c,d,s,o,e[t+13],21,1309151649),o=u(o,c,d,s,e[t+4],6,-145523070),s=u(s,o,c,d,e[t+11],10,-1120210379),d=u(d,s,o,c,e[t+2],15,718787259),c=u(c,d,s,o,e[t+9],21,-343485551),o=r(o,n),c=r(c,f),d=r(d,p),s=r(s,v)}return[o,c,d,s]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],c=o[2],d=o[3],s=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,c,d)+s+t[o]+a[e]>>>0;s=d,d=c,c=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+c>>>0,o[3]=o[3]+d>>>0,o[4]=o[4]+s>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,c=0;t.default=function(e,t,n){let r=t&&n||0;const d=t||new Array(16);let s=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==s||null==f){const t=e.random||(e.rng||o.default)();null==s&&(s=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:c+1;const h=p-u+(v-c)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,c=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;d[r++]=m>>>24&255,d[r++]=m>>>16&255,d[r++]=m>>>8&255,d[r++]=255&m;const _=p/4294967296*1e4&268435455;d[r++]=_>>>8&255,d[r++]=255&_,d[r++]=_>>>24&15|16,d[r++]=_>>>16&255,d[r++]=f>>>8|128,d[r++]=255&f;for(let e=0;e<6;++e)d[r+e]=s[e];return t||(0,a.unsafeStringify)(d)}},8237:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(r),c.set(e,r.length),c=n(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=c[e];return i}return(0,o.unsafeStringify)(c)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{e.exports=require("react")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE1BQU8sV0FFN0RpRCxPQUFPa0wsZUFBZWlDLEVBQVMsYUFBYyxDQUFFcFEsT0FBTyxHQUFPLEVDRjlELElBQUkreEMsRUFBc0JSLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIubW9kdWxlLmNzcz85MjlkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/N2EwZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz9kNTU3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/MDk5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzFjYWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24ubW9kdWxlLmNzcz81OTZmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz8yYzQ0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz9mMTBlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz80NjlmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcubW9kdWxlLmNzcz8zY2Q0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/ZGZmYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzE5MGEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz9jZDM0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzP2FhY2UiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzP2I1ZGIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzhhODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLm1vZHVsZS5jc3M/NjViZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS5tb2R1bGUuY3NzPzM3MTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vR3JvdXBPcHRpb24ubW9kdWxlLmNzcz80ZGI0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9PcHRpb24ubW9kdWxlLmNzcz9iNjc0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC5tb2R1bGUuY3NzPzQ5YWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL1NlYXJjaC5tb2R1bGUuY3NzP2VkNDMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0Lm1vZHVsZS5jc3M/MWU3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci5tb2R1bGUuY3NzPzlhYmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS5tb2R1bGUuY3NzPzkzYTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci5tb2R1bGUuY3NzPzcwZGYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzcz8xZDBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cubW9kdWxlLmNzcz9iOTU1Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLm1vZHVsZS5jc3M/ZGE1YSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9UYWcubW9kdWxlLmNzcz84ZjM2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L1RhZ3NJbnB1dC5tb2R1bGUuY3NzPzhmZDEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/M2YxZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/NTg4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3M/ZWM4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC5tb2R1bGUuY3NzPzA2YWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2VkYTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlci9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9Hcm91cE9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL09wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvU2VhcmNoLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3RDb250ZXh0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL1RhZy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvVGFnc0lucHV0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9UYWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvdHlwZXMvdGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvYmFja3NwYWNlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC11cC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2xvc2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nyb3NzZWQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25hdGl2ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9uaWwuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcm5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3NoYTEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YxLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92ZXJzaW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmLCBjcmVhdGVFbGVtZW50LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbmNvbnN0IFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgRU1QVFlfQ0FDSEUgPSB7fTtcbmNvbnN0IElOSVRJQUxfQ0FDSEUgPSB7fTtcbmNvbnN0IG5vb3AgPSAoKT0+e307XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFVOREVGSU5FRCA9IC8qI19fTk9JTkxJTkVfXyovIG5vb3AoKTtcbmNvbnN0IE9CSkVDVCA9IE9iamVjdDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHYpPT52ID09PSBVTkRFRklORUQ7XG5jb25zdCBpc0Z1bmN0aW9uID0gKHYpPT50eXBlb2YgdiA9PSAnZnVuY3Rpb24nO1xuY29uc3QgbWVyZ2VPYmplY3RzID0gKGEsIGIpPT4oe1xuICAgICAgICAuLi5hLFxuICAgICAgICAuLi5iXG4gICAgfSk7XG5jb25zdCBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgdGhlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxuY29uc3QgaXNXaW5kb3dEZWZpbmVkID0gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaXNEb2N1bWVudERlZmluZWQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9ICgpPT5pc1dpbmRvd0RlZmluZWQgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGNyZWF0ZUNhY2hlSGVscGVyID0gKGNhY2hlLCBrZXkpPT57XG4gICAgY29uc3Qgc3RhdGUgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgIC8vIEdldHRlclxuICAgICAgICAoKT0+Y2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEUsXG4gICAgICAgIC8vIFNldHRlclxuICAgICAgICAoaW5mbyk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd3JpdGluZyB0byB0aGUgc3RvcmUsIHdlIGtlZXAgdGhlIHZhbHVlIGluIHRoZSBpbml0aWFsIGNhY2hlXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgdGhlcmUgeWV0LlxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBJTklUSUFMX0NBQ0hFKSkge1xuICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NBQ0hFW2tleV0gPSBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl0sXG4gICAgICAgIC8vIEdldCBzZXJ2ZXIgY2FjaGUgc25hcHNob3RcbiAgICAgICAgKCk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSB3YXMgdXBkYXRlZCBvbiB0aGUgY2xpZW50LCB3ZSByZXR1cm4gdGhlIHN0b3JlZCBpbml0aWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gSU5JVElBTF9DQUNIRSkgcmV0dXJuIElOSVRJQUxfQ0FDSEVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZG9uZSBhbnkgY2xpZW50LXNpZGUgdXBkYXRlcywgd2UgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG5jb25zdCB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbmxldCBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNhYmxlLlxuY29uc3Qgc3RhYmxlSGFzaCA9IChhcmcpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUoIWlzVW5kZWZpbmVkKGluZGV4ID0ga2V5cy5wb3AoKSkpe1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlID8gYXJnLnRvSlNPTigpIDogdHlwZSA9PSAnc3ltYm9sJyA/IGFyZy50b1N0cmluZygpIDogdHlwZSA9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGFyZykgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIHRoZSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIHRoZSBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqLyBsZXQgb25saW5lID0gdHJ1ZTtcbmNvbnN0IGlzT25saW5lID0gKCk9Pm9ubGluZTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG5jb25zdCBbb25XaW5kb3dFdmVudCwgb2ZmV2luZG93RXZlbnRdID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gW1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KSxcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbl0gOiBbXG4gICAgbm9vcCxcbiAgICBub29wXG5dO1xuY29uc3QgaXNWaXNpYmxlID0gKCk9PntcbiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGUgPSBpc0RvY3VtZW50RGVmaW5lZCAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG5jb25zdCBpbml0Rm9jdXMgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbmNvbnN0IGluaXRSZWNvbm5lY3QgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIGNvbnN0IG9uT25saW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIGNvbnN0IG9uT2ZmbGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG5jb25zdCBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlXG59O1xuY29uc3QgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Rcbn07XG5cbmNvbnN0IElTX1JFQUNUX0xFR0FDWSA9ICFSZWFjdC51c2VJZDtcbmNvbnN0IElTX1NFUlZFUiA9ICFpc1dpbmRvd0RlZmluZWQgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuY29uc3QgckFGID0gKGYpPT5oYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG5jb25zdCBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxuY29uc3Qgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmIG5hdmlnYXRvckNvbm5lY3Rpb24gJiYgKFtcbiAgICAnc2xvdy0yZycsXG4gICAgJzJnJ1xuXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8IG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoa2V5KT0+e1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwga2V5IGFzIHRoZSBhcmd1bWVudCBvZiBmZXRjaGVyLiBUaGlzIGNhbiBiZSBhIHN0cmluZyBvciBhblxuICAgIC8vIGFycmF5IG9mIHZhbHVlcy5cbiAgICBjb25zdCBhcmdzID0ga2V5O1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPSB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpID8gc3RhYmxlSGFzaChrZXkpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzXG4gICAgXTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG5sZXQgX190aW1lc3RhbXAgPSAwO1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKCk9PisrX190aW1lc3RhbXA7XG5cbmNvbnN0IEZPQ1VTX0VWRU5UID0gMDtcbmNvbnN0IFJFQ09OTkVDVF9FVkVOVCA9IDE7XG5jb25zdCBNVVRBVEVfRVZFTlQgPSAyO1xuY29uc3QgRVJST1JfUkVWQUxJREFURV9FVkVOVCA9IDM7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlQsXG4gIEVSUk9SX1JFVkFMSURBVEVfRVZFTlQ6IEVSUk9SX1JFVkFMSURBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUgYW5kIHVzZVNXUlN1YnNjcmlwdGlvbiBrZXlzLlxuICAgICAgICAgICAgIS9eXFwkKGluZnxzdWIpXFwkLy50ZXN0KGtleSkgJiYga2V5RmlsdGVyKGNhY2hlLmdldChrZXkpLl9rKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWF0Y2hlZEtleXMubWFwKG11dGF0ZUJ5S2V5KSk7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGVCeUtleShfa2V5KTtcbiAgICBhc3luYyBmdW5jdGlvbiBtdXRhdGVCeUtleShfaykge1xuICAgICAgICAvLyBTZXJpYWxpemUga2V5XG4gICAgICAgIGNvbnN0IFtrZXldID0gc2VyaWFsaXplKF9rKTtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2dldCwgc2V0XSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgICAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgICAgIGNvbnN0IHN0YXJ0UmV2YWxpZGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbigoKT0+Z2V0KCkuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldCgpLmRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBfZGF0YTtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHRpbWVzdGFtcHMuXG4gICAgICAgIGNvbnN0IGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtcbiAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXQoKTtcbiAgICAgICAgLy8gYGRpc3BsYXllZERhdGFgIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9uIHNjcmVlbi4gSXQgY291bGQgYmUgdGhlIG9wdGltaXN0aWMgdmFsdWVcbiAgICAgICAgLy8gdGhhdCBpcyBnb2luZyB0byBiZSBvdmVycmlkZGVuIGJ5IGEgYGNvbW1pdHRlZERhdGFgLCBvciBnZXQgcmV2ZXJ0ZWQgYmFjay5cbiAgICAgICAgLy8gYGNvbW1pdHRlZERhdGFgIGlzIHRoZSB2YWxpZGF0ZWQgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZmV0Y2ggb3IgbXV0YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc3BsYXllZERhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHN0YXRlLl9jO1xuICAgICAgICBjb25zdCBjb21taXR0ZWREYXRhID0gaXNVbmRlZmluZWQoY3VycmVudERhdGEpID8gZGlzcGxheWVkRGF0YSA6IGN1cnJlbnREYXRhO1xuICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICBpZiAoaGFzT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihvcHRpbWlzdGljRGF0YSkgPyBvcHRpbWlzdGljRGF0YShjb21taXR0ZWREYXRhKSA6IG9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBzZXQgb3B0aW1pc3RpYyBkYXRhLCBiYWNrdXAgdGhlIGN1cnJlbnQgY29tbWl0dGVkRGF0YSBkYXRhIGluIGBfY2AuXG4gICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IG9wdGltaXN0aWNEYXRhLFxuICAgICAgICAgICAgICAgIF9jOiBjb21taXR0ZWREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBgZGF0YWAgaXMgYSBwcm9taXNlL3RoZW5hYmxlLCByZXNvbHZlIHRoZSBmaW5hbCBkYXRhIGZpcnN0LlxuICAgICAgICBpZiAoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGEuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGhhc09wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNvbW1pdHRlZERhdGE7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSB0byBiZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBkYXRhLCBhbmQgY2xlYXIgdGhlIGBfY2AgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCBjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIFNXUiBIb29rcycgaW50ZXJuYWwgc3RhdGVzOlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgLy8gVGhlIG11dGF0aW9uIGFuZCByZXZhbGlkYXRpb24gYXJlIGVuZGVkLCB3ZSBjYW4gY2xlYXIgaXQgc2luY2UgdGhlIGRhdGEgaXNcbiAgICAgICAgLy8gbm90IGFuIG9wdGltaXN0aWMgdmFsdWUgYW55bW9yZS5cbiAgICAgICAgc2V0KHtcbiAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhO1xuICAgIH1cbn1cblxuY29uc3QgcmV2YWxpZGF0ZUFsbEtleXMgPSAocmV2YWxpZGF0b3JzLCB0eXBlKT0+e1xuICAgIGZvcihjb25zdCBrZXkgaW4gcmV2YWxpZGF0b3JzKXtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKSByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xuY29uc3QgaW5pdENhY2hlID0gKHByb3ZpZGVyLCBvcHRpb25zKT0+e1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICBjb25zdCBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIGNvbnN0IEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICBjb25zdCBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICBsZXQgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gKGtleSwgY2FsbGJhY2spPT57XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldIHx8IFtdO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1trZXldID0gc3VicztcbiAgICAgICAgICAgIHN1YnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCk9PnN1YnMuc3BsaWNlKHN1YnMuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSAoa2V5LCB2YWx1ZSwgcHJldik9PntcbiAgICAgICAgICAgIHByb3ZpZGVyLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2Ygc3Vicyl7XG4gICAgICAgICAgICAgICAgICAgIGZuKHZhbHVlLCBwcmV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIGluaXRpYWxpemUgdGhlIGNhY2hlIG9ubHkgb24gZmlyc3QgYWNjZXNzLlxuICAgIGNvbnN0IGNhY2hlQ29udGV4dFJlZiA9IHVzZVJlZihVTkRFRklORUQpO1xuICAgIGlmIChwcm92aWRlciAmJiAhY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQgPSBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZUNvbnRleHQgPSBjYWNoZUNvbnRleHRSZWYuY3VycmVudDtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCByZXZhbGlkYXRlRXZlbnRzLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmV2YWxpZGF0ZUlmU3RhbGUgLCByZWZyZXNoSW50ZXJ2YWwgLCByZWZyZXNoV2hlbkhpZGRlbiAsIHJlZnJlc2hXaGVuT2ZmbGluZSAsIGtlZXBQcmV2aW91c0RhdGEgIH0gPSBjb25maWc7XG4gICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdgIGlzIHRoZSBhcmd1bWVudC9hcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICBjb25zdCBba2V5LCBmbkFyZ10gPSBzZXJpYWxpemUoX2tleSk7XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIGNvbnN0IGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgY29uc3Qga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgY29uc3QgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICBjb25zdCBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICBjb25zdCBnZXRDb25maWcgPSAoKT0+Y29uZmlnUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoKT0+Z2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBbZ2V0Q2FjaGUsIHNldENhY2hlLCBzdWJzY3JpYmVDYWNoZSwgZ2V0SW5pdGlhbENhY2hlXSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzID0gdXNlUmVmKHt9KS5jdXJyZW50O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHJldHVybmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbdF0gIT09IHByZXZbdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZUlmU3RhbGUpKSByZXR1cm4gcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgLy8gR2V0IHRoZSBjYWNoZSBhbmQgbWVyZ2UgaXQgd2l0aCBleHBlY3RlZCBzdGF0ZXMuXG4gICAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2FjaGUgPSAoc3RhdGUpPT57XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNlbGVjdCB0aGUgbmVlZGVkIGZpZWxkcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbWVyZ2VPYmplY3RzKHN0YXRlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzbmFwc2hvdC5faztcbiAgICAgICAgICAgIGlmICghc2hvdWxkU3RhcnRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLnNuYXBzaG90XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Q2FjaGUoKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSBnZXRJbml0aWFsQ2FjaGUoKTtcbiAgICAgICAgY29uc3QgY2xpZW50U25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGNhY2hlZERhdGEpO1xuICAgICAgICBjb25zdCBzZXJ2ZXJTbmFwc2hvdCA9IGNhY2hlZERhdGEgPT09IGluaXRpYWxEYXRhID8gY2xpZW50U25hcHNob3QgOiBnZXRTZWxlY3RlZENhY2hlKGluaXRpYWxEYXRhKTtcbiAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIHRvIGF2b2lkXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMsIHdlIGtlZXAgdGhlIHByZXZpb3VzIHNuYXBzaG90IGFuZCB1c2UgZGVlcFxuICAgICAgICAvLyBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IG9uZS5cbiAgICAgICAgbGV0IG1lbW9yaXplZFNuYXBzaG90ID0gY2xpZW50U25hcHNob3Q7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAoKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChuZXdTbmFwc2hvdCwgbWVtb3JpemVkU25hcHNob3QpID8gbWVtb3JpemVkU25hcHNob3QgOiBtZW1vcml6ZWRTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpPT5zZXJ2ZXJTbmFwc2hvdFxuICAgICAgICBdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICBjb25zdCBjYWNoZWQgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSh1c2VDYWxsYmFjaygoY2FsbGJhY2spPT5zdWJzY3JpYmVDYWNoZShrZXksIChjdXJyZW50LCBwcmV2KT0+e1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSBjYWxsYmFjaygpO1xuICAgICAgICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pLCBnZXRTbmFwc2hvdFswXSwgZ2V0U25hcHNob3RbMV0pO1xuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaGFzUmV2YWxpZGF0b3IgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XSAmJiBFVkVOVF9SRVZBTElEQVRPUlNba2V5XS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBjYWNoZWQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBmYWxsYmFjayA6IGNhY2hlZERhdGE7XG4gICAgY29uc3QgZXJyb3IgPSBjYWNoZWQuZXJyb3I7XG4gICAgLy8gVXNlIGEgcmVmIHRvIHN0b3JlIHByZXZpb3VzbHkgcmV0dXJuZWQgZGF0YS4gVXNlIHRoZSBpbml0aWFsIGRhdGEgYXMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgY29uc3QgbGFnZ3lEYXRhUmVmID0gdXNlUmVmKGRhdGEpO1xuICAgIGNvbnN0IHJldHVybmVkRGF0YSA9IGtlZXBQcmV2aW91c0RhdGEgPyBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGxhZ2d5RGF0YVJlZi5jdXJyZW50IDogY2FjaGVkRGF0YSA6IGRhdGE7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICBjb25zdCBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24gPSAoKCk9PntcbiAgICAgICAgLy8gaWYgYSBrZXkgYWxyZWFkeSBoYXMgcmV2YWxpZGF0b3JzIGFuZCBhbHNvIGhhcyBlcnJvciwgd2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHJldmFsaWRhdGlvblxuICAgICAgICBpZiAoaGFzUmV2YWxpZGF0b3IgJiYgIWlzVW5kZWZpbmVkKGVycm9yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG1vdW50IGl0IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH0pKCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nIHN0YXRlOlxuICAgIC8vIElmIGl0J3MgYWJsZSB0byB2YWxpZGF0ZSwgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIHdoZW4gbW91bnQsIHRoaXMgd2lsbCBiZSB0cnVlLlxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgPSAhIShrZXkgJiYgZmV0Y2hlciAmJiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc1ZhbGlkYXRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc1ZhbGlkYXRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzTG9hZGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzTG9hZGluZztcbiAgICAvLyBUaGUgcmV2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgd3JhcHBlciBvZiB0aGUgb3JpZ2luYWxcbiAgICAvLyBgZmV0Y2hlcmAsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG1hbnkgZWRnZSBjYXNlcy5cbiAgICBjb25zdCByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJldmFsaWRhdGVPcHRzKT0+e1xuICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hlciA9IGZldGNoZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWN1cnJlbnRGZXRjaGVyIHx8IHVubW91bnRlZFJlZi5jdXJyZW50IHx8IGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3RGF0YTtcbiAgICAgICAgbGV0IHN0YXJ0QXQ7XG4gICAgICAgIGxldCBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvbmdvaW5nIGNvbmN1cnJlbnQgcmVxdWVzdCwgb3IgYGRlZHVwZWAgaXMgbm90IHNldCwgYVxuICAgICAgICAvLyBuZXcgcmVxdWVzdCBzaG91bGQgYmUgaW5pdGlhdGVkLlxuICAgICAgICBjb25zdCBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgIC8qXG4gICAgICAgICBGb3IgUmVhY3QgMTdcbiAgICAgICAgIERvIHVubW91bnQgY2hlY2sgZm9yIGNhbGxzOlxuICAgICAgICAgSWYga2V5IGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgcmV2YWxpZGF0aW9uLCBvciB0aGUgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAgICB1bm1vdW50ZWQsIG9sZCBkaXNwYXRjaCBhbmQgb2xkIGV2ZW50IGNhbGxiYWNrcyBzaG91bGQgbm90IHRha2UgYW55XG4gICAgICAgICBlZmZlY3RcblxuICAgICAgICBGb3IgUmVhY3QgMThcbiAgICAgICAgb25seSBjaGVjayBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODJcbiAgICAgICovIGNvbnN0IGNhbGxiYWNrU2FmZWd1YXJkID0gKCk9PntcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQgJiYgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgZmluYWwgc3RhdGUgb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgc2V0Q2FjaGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNsZWFudXBTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lIHJlcXVlc3QgYmVmb3JlIGRlbGV0aW5nIGl0LlxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoaW5nLiBDaGFuZ2UgdGhlIGBpc1ZhbGlkYXRpbmdgIHN0YXRlLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSXQgaXMgaW4gdGhlIGBpc0xvYWRpbmdgIHN0YXRlLCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZGF0YS5cbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyBmYWxsYmFjayBkYXRhIGFuZCBsYWdneSBkYXRhLlxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBzZXRDYWNoZShpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vIGNhY2hlIGlzIGJlaW5nIHJlbmRlcmVkIGN1cnJlbnRseSAoaXQgc2hvd3MgYSBibGFuayBwYWdlKSxcbiAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiBpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgYW5kIHNhdmUgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICAvLyBLZXkgbXVzdCBiZSB0cnV0aHkgaWYgZW50ZXJpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmV0Y2hlcihmbkFyZyksXG4gICAgICAgICAgICAgICAgICAgIGdldFRpbWVzdGFtcCgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtuZXdEYXRhLCBzdGFydEF0XSA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBuZXdEYXRhID0gYXdhaXQgbmV3RGF0YTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCBpbnRlcnJ1cHRlZCwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAvLyAgIHJlcTEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzMSAgICAgICAgKGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgbWF5YmUgYmUgYHVuZGVmaW5lZGAgb3IgYSBudW1iZXJcbiAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciBlcnJvci5cbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBVTkRFRklORUQ7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBtdXRhdGlvbnMocyksIHRoYXQgb3ZlcmxhcHBlZCB3aXRoIHRoZSBjdXJyZW50IHJldmFsaWRhdGlvbjpcbiAgICAgICAgICAgIC8vIGNhc2UgMTpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAyOlxuICAgICAgICAgICAgLy8gICAgICAgICByZXEtLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMzpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tLS4uLi0tLS0tLS0tLS0+XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgcmV2YWxpZGF0aW9uIHJlc3VsdCAocmVzKSBiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyIGZyZXNoLlxuICAgICAgICAgICAgLy8gbWVhbndoaWxlLCBhIG5ldyByZXZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBtdXRhdGlvbiBlbmRzLlxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQobXV0YXRpb25JbmZvKSAmJiAvLyBjYXNlIDFcbiAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fCAvLyBjYXNlIDJcbiAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8IC8vIGNhc2UgM1xuICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSB0byBhdm9pZCBleHRyYSByZS1yZW5kZXJzLlxuICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRDYWNoZSgpLmRhdGE7XG4gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29tcGFyZSBmbiBjb3VsZCBiZSBjdXN0b20gZm5cbiAgICAgICAgICAgIC8vIGNhY2hlRGF0YSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBuZXdEYXRhIGV2ZW4gd2hlbiBjb21wYXJlIGZuIHJldHVybnMgVHJ1ZVxuICAgICAgICAgICAgZmluYWxTdGF0ZS5kYXRhID0gY29tcGFyZShjYWNoZURhdGEsIG5ld0RhdGEpID8gY2FjaGVEYXRhIDogbmV3RGF0YTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwU3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnlPbkVycm9yICB9ID0gY3VycmVudENvbmZpZztcbiAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlLCBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgZXJyb3IsIGRvbid0IHVzZSBkZWVwIGNvbXBhcmlzb24gZm9yIGVycm9ycy5cbiAgICAgICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGV2ZW50IGFuZCByZXRyeSBsb2dpYy4gT25seSBmb3IgdGhlIGFjdHVhbCByZXF1ZXN0LCBub3RcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvcihlcnIsIGtleSwgY3VycmVudENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeU9uRXJyb3IgPT09IHRydWUgfHwgaXNGdW5jdGlvbihzaG91bGRSZXRyeU9uRXJyb3IpICYmIHNob3VsZFJldHJ5T25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgaW5hY3RpdmUsIHN0b3AuIEl0IHdpbGwgYXV0by1yZXZhbGlkYXRlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZvY3VzaW5nIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGxpY2F0aW9uIGlzIGFsd2F5cyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvclJldHJ5KGVyciwga2V5LCBjdXJyZW50Q29uZmlnLCAoX29wdHMpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0b3JzWzBdKHJldmFsaWRhdGVFdmVudHMuRVJST1JfUkVWQUxJREFURV9FVkVOVCwgX29wdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUsIG9wdHMgPSB7fSk9PntcbiAgICAgICAgICAgIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25Gb2N1cyAmJiBub3cgPiBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IG5vdyArIGdldENvbmZpZygpLmZvY3VzVGhyb3R0bGVJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5SRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5NVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRVJST1JfUkVWQUxJREFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKG9wdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bnN1YkV2ZW50cyA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgRVZFTlRfUkVWQUxJREFUT1JTLCBvblJldmFsaWRhdGUpO1xuICAgICAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgYXMgbW91bnRlZCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgcmVmcy5cbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAga2V5UmVmLmN1cnJlbnQgPSBrZXk7XG4gICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAvLyBLZWVwIHRoZSBvcmlnaW5hbCBrZXkgaW4gdGhlIGNhY2hlLlxuICAgICAgICBzZXRDYWNoZSh7XG4gICAgICAgICAgICBfazogZm5BcmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZXZhbGlkYXRlIGlmIHdlIGhhdmUgZGF0YSB0byByZXR1cm4gc28gd2Ugd29uJ3QgYmxvY2tcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcuXG4gICAgICAgICAgICAgICAgckFGKHNvZnRSZXZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJFdmVudHMoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKSA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKSA6IHJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3RhcnQgdGhlIG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSwgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFnZXRDYWNoZSgpLmVycm9yICYmIChyZWZyZXNoV2hlbkhpZGRlbiB8fCBnZXRDb25maWcoKS5pc1Zpc2libGUoKSkgJiYgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgcmVmcmVzaEludGVydmFsLFxuICAgICAgICByZWZyZXNoV2hlbkhpZGRlbixcbiAgICAgICAgcmVmcmVzaFdoZW5PZmZsaW5lLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShyZXR1cm5lZERhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGFuIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gU1dSIHNob3VsZCB0aHJvdyB3aGVuIHRyeWluZyB0byB1c2UgU3VzcGVuc2Ugb24gdGhlIHNlcnZlciB3aXRoIFJlYWN0IDE4LFxuICAgICAgICAvLyB3aXRob3V0IHByb3ZpZGluZyBhbnkgaW5pdGlhbCBkYXRhLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xODMyXG4gICAgICAgIGlmICghSVNfUkVBQ1RfTEVHQUNZICYmIElTX1NFUlZFUikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWxsYmFjayBkYXRhIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc3VzcGVuc2UgaW4gU1NSLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZGF0YSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuZWREYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNWYWxpZGF0aW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNMb2FkaW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBTV1JDb25maWcgPSBPQkpFQ1QuZGVmaW5lUHJvcGVydHkoU1dSQ29uZmlnJDEsICdkZWZhdWx0VmFsdWUnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xuY29uc3QgdW5zdGFibGVfc2VyaWFsaXplID0gKGtleSk9PnNlcmlhbGl6ZShrZXkpWzBdO1xuLyoqXG4gKiBBIGhvb2sgdG8gZmV0Y2ggZGF0YS5cbiAqXG4gKiBAbGluayBodHRwczovL3N3ci52ZXJjZWwuYXBwXG4gKiBAZXhhbXBsZVxuICogYGBganN4XG4gKiBpbXBvcnQgdXNlU1dSIGZyb20gJ3N3cidcbiAqIGZ1bmN0aW9uIFByb2ZpbGUoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUignL2FwaS91c2VyJywgZmV0Y2hlcilcbiAqICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5mYWlsZWQgdG8gbG9hZDwvZGl2PlxuICogICBpZiAoIWRhdGEpIHJldHVybiA8ZGl2PmxvYWRpbmcuLi48L2Rpdj5cbiAqICAgcmV0dXJuIDxkaXY+aGVsbG8ge2RhdGEubmFtZX0hPC9kaXY+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVtS0FabUxrQVJMelgzZ251S2twXCIsXCJsZWZ0XCI6XCJ1MWw1QUpHYlVpUDZSVkZJS3hPSVwiLFwic21hbGxcIjpcImh4WnBLOUNwQksxd1IwVzB2NFNEXCIsXCJsYXJnZVwiOlwibzlEWW10NHhmTGFJbWlWekk5ZFFcIixcInhsYXJnZVwiOlwicW1FVnhTWlM1a2ZMM2FWYmVlMW5cIixcImludmVydGVkXCI6XCJDTk9aSExkOVhib2t6T1c2TFlCUFwiLFwicm91bmRlZFwiOlwiakpDQXp3MlN5YUg0dElXWHJBbFJcIixcInJpZ2h0T2Zmc2V0XCI6XCJLR0N1N2FQalF5X2FGTmpIV051d1wiLFwibGVmdE9mZnNldFwiOlwiZERIWXlHelhOaTc3M0ZBbDEzR1hcIixcIm5vU2hhZG93XCI6XCJsUUYxWWNVcU0wT0h2UFNsU3dsX1wiLFwibm9Cb3JkZXJcIjpcInNFbzI1RWl2NnpzMURfeDVxOFZ5XCIsXCJ0cmFuc3BhcmVudFwiOlwidm0zY21BTk51WWxhUU01WXF6OUdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlBpa2Z6ajd6WWcySW50ZEp5bXVLXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwib1NnVjVjd1g2aW5rU2JDRzk4dzhcIixcIm5vUGFkZGluZ1wiOlwiZ1NackdSMXhxbThRMWlSVWZHZ2FcIixcImNvbnRlbnRcIjpcInBZTFVqOW5vQXFUOFd5dGpET09iXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcImlPeV90aFVmd3hJcVpPcldTSXp4XCIsXCJpbnZlcnRlZFwiOlwiZzc5ampjV1ZubXhMb1BOeUF4NDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlVuajRycDFEeTcxQUNydXpYbDc1XCIsXCJsZWZ0XCI6XCJFWFdNUnZ2ZVJ2UWlmaXh6VEgwMlwiLFwic21hbGxcIjpcIl9VMHpuVWs1UVRBelBuUzJnYUxDXCIsXCJtZWRpdW1cIjpcImFIOHU0czJNdFljNXk0dnl1YkR3XCIsXCJsYXJnZVwiOlwiYzMwNnlWNzhhbF9lR3dCU2ttRm1cIixcInhsYXJnZVwiOlwieHZBMW1lVW1FMjhBRU9wanNXYzlcIixcImludmVydGVkXCI6XCJXQjc3WUlET1N3Sm9YNjhOamxVR1wiLFwicm91bmRlZFwiOlwiazJuSkNzRU5OZ0N6Mkhsc2pfYkdcIixcInJpZ2h0T2Zmc2V0XCI6XCJqQWU1RVZFMzdPcktZdmtYZGMxc1wiLFwibGVmdE9mZnNldFwiOlwiRGdidEI2RzRMb0JEZDA0UF9Nek9cIixcIm5vU2hhZG93XCI6XCJLcFFJOTVfZjhuSHZrN0cySjZoOFwiLFwidHJhbnNwYXJlbnRcIjpcIkw4UG54VVFvZ3pnRk1NVDdRSTRkXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKdWxheFNjY29HbXF0Z1ROSm1rOVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInpUWXI5VzdnMlNxYlZqUEZBb2tHXCIsXCJub1BhZGRpbmdcIjpcIlVIelRtNTFrVnlsbDUyX1M3c0dCXCIsXCJub0JvcmRlclwiOlwiaFJQMVhZZnVKNDlUc1lVX2NPNUFcIixcImRpc2FibGVkXCI6XCJsd1dJVFBoTTlUTW81ODVEc2F3OFwiLFwiY29udGVudFwiOlwiTXlUX1B1ZkpkRXZzWkUzaFNXOFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwic3k4bEtWV1A1NkFsT1I3eXNfOUFcIixcInNtYWxsXCI6XCJYamZwY3VQdGd1Rlp2S3J4eHQ3eVwiLFwibWVkaXVtXCI6XCJ0TFAzZFpXZXBYSDNIS2cxN3NPSFwiLFwibGFyZ2VcIjpcIldncDlxSFdEclFpOWZtY3hRSVZLXCIsXCJ4bGFyZ2VcIjpcImxVQTZ0cExrV2NHRmdub3FDRnZ1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIktrMmRwMTVId01aeklOYlVGQVo0XCIsXCJob3Jpem9udGFsXCI6XCJKc3pPX1VnN3BLTFlRMERlaE44X1wiLFwidmVydGljYWxcIjpcIkVWVDYybGdoQzk5ZTliZGpZbHk1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcIlB2YmVCbTRTTXRNcWxRTlR5UWpRXCIsXCJzbWFsbFwiOlwiUzdFM0VQeV9BV1F1a0VleHV2VGZcIixcImxhcmdlXCI6XCJhMUZzSXRLUFFFT0JlVHFCQ3VEbFwiLFwieGxhcmdlXCI6XCJzRmhnUUVOX1VPTDNaeE9BUjFJZVwiLFwic2VsZWN0ZWRcIjpcImFVeDJ1U0JTczE0VnF3UHFqdmxRXCIsXCJzck9ubHlcIjpcIkpJUW1lWmRkOVRGbDVJX2dpZlBpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaWlZIY1g0NVhDYmxtRGFiOWV3WlwiLFwibW9kYWxIZWFkZXJcIjpcInhUWDFYSmZDU1VzcmhfeUxsWm9pXCIsXCJtb2RhbENvbnRlbnRcIjpcIlRlNmpIZGx5anNRWG1uVHM5YmFuXCIsXCJub1BhZGRpbmdcIjpcIkx6X2d3U3dQM1FDTjV6WXpGc0VpXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIkdoMXV2eE1mRWdQVGR0NjZRaXMyXCIsXCJtb2RhbEJ1dHRvbnNcIjpcIklhdzM0RmtNSnFqckdRNThCR2Z4XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiZHJhd2VyXCI6XCJVM2RDenFUeXlueXpCbjJtRmttV1wiLFwib3BlblwiOlwiSGlDYWk1QWRzY3g4WmJHbGw0U1JcIixcImRyYXdlckNvbnRlbnRcIjpcImlJZ0JBc29QRWpGT2tIOFVuS1ZYXCIsXCJkcmF3ZXJIZWFkZXJDb250ZW50XCI6XCJWQzhqdlZoSlJjZnRxbGFjR0FHSVwiLFwiZHJhd2VySGVhZGVyQ2xvc2VJY29uQ29udGVudFwiOlwiSlI1R0lGUUdBX1NaODdTY1VsRTlcIixcImRyYXdlckhlYWRlckNsb3NlSWNvblwiOlwiQjZSYzMzcFF6WEJPdWJlMGpkWjlcIixcImRyYXdlck1haW5cIjpcIk15aU4xVU5qYk9UZ3dKMVRYbUVZXCIsXCJkcmF3ZXJGb290ZXJcIjpcIkNlYV9udEdMNTk1R2RuanMxRHFVXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyQmFmWGtvVENuMkFoNnhZWW14ZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJLV2s3b1o4dHZQZlFpY2dRWWxWYVwiLFwibGFiZWxcIjpcImU2enJ4N1VPUF9CU29NTTNHcmpRXCIsXCJzbWFsbFwiOlwiaWhTbkRRZzB5Z3hjVkxJeVNKa01cIixcImxhcmdlXCI6XCJGcHdoYkQ3SFh4X3VGVDNsMDF3YlwiLFwieGxhcmdlXCI6XCJZVmRzNHVfRGZXU0cxcjBTQUduU1wiLFwiaW52ZXJ0ZWRcIjpcIkNLeW5vTGhpTGQ2S3pBWWk1TnRHXCIsXCJyb3VuZGVkXCI6XCJ2NzJtekp1bUZTaURPT0UxTW5YSFwiLFwibm9TaGFkb3dcIjpcIkVvZXdKRURiR2R0ZUpfTlJmUzVGXCIsXCJub0JvcmRlclwiOlwiY2I3bDR4dmNObkhObFFabUxqa2JcIixcIm5vUGFkZGluZ1wiOlwidmNPd0RZdUdGMmV0b1BmeUZEWDVcIixcInRyYW5zcGFyZW50XCI6XCJsMDhraGFYSVVPY3J1QkZId3M3WFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSTB4dkpiQjBMTlQwUzE1alRNV1dcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJYNmZxVWNWSDFCbENSSkJpaUppaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajFtZmlZRUdvbFRSbWJCbUdLbFFcIixcInJvd1wiOlwiRUdhS3ZtcU0yU2F3aUZyVzhDdHVcIixcImNvbHVtblwiOlwiTk1pME1UMWI3cnAxWmp5ZThVVkFcIixcImZpeGVkXCI6XCJnMGoza2tRcl9BakNLRmQ5NFMxc1wiLFwicGxhaW5cIjpcIkZyMXE3V25GMW5Gbm5iZmdwYVJ6XCIsXCJ0cmFuc3BhcmVudFwiOlwidWRSWmU5SDBiS1VIWGpPd0cxRm5cIixcInRvcFwiOlwidVlpS3c2VnZERWtoalpIenZvN2VcIixcInRvcEVkZ2VcIjpcInRSYkVjWWpFM0tuY3NOd1RidlZNXCIsXCJ0b3BPbkVkZ2VcIjpcIkxHdW5HMzdYMV9IUmV1dzNxenVhXCIsXCJyaWdodFwiOlwibHcyN3JHVmxvMzRheEN4dzNRSGlcIixcInJpZ2h0RWRnZVwiOlwiUFpJdHZsZUZJSWowSngyTWlrUkVcIixcInJpZ2h0T25FZGdlXCI6XCJLTnVHYURQcTlybVhmZ21PM3BjYlwiLFwiYm90dG9tXCI6XCJkbjF1aDF0YXNHeERHcW1VMThITlwiLFwiYm90dG9tRWRnZVwiOlwiZUQwVUNyQlJwc1JUUFB3d0lvVmdcIixcImJvdHRvbU9uRWRnZVwiOlwiSXJoSDVnZnlHc1E2a2RjUDk0UlFcIixcImxlZnRcIjpcIkQ1ZkdIbkFHQ01SNEx0Yjl5NEhyXCIsXCJsZWZ0RWRnZVwiOlwiX0F0QWQydHI3dDFrWHVzUmJYU3pcIixcImxlZnRPbkVkZ2VcIjpcIl84QzlkZDBYX0pYWTR1SHp3NU5qXCIsXCJob3Jpem9udGFsQ2VudGVyXCI6XCJRRGtzOG92dDlSVmNGV2VFQjh3YlwiLFwidmVydGljYWxDZW50ZXJcIjpcIkNWdVFSRTY1MkdIMlZKbjh6T1RzXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiZnBfQkxKMkZXNE95eWIwYkhpRDRcIixcInNtYWxsXCI6XCJ6c1ZETmZOUmtvczBRNXV2OUZSOVwiLFwibWVkaXVtXCI6XCJlU2xpbDNldlB0UEJzd1dGODBDNVwiLFwibGFyZ2VcIjpcIlQ3VUx5cTF5RTlBVlhFTWtuVjRHXCIsXCJ4bGFyZ2VcIjpcIlFQQWNlVlFkWjZRSVEyUXZpandnXCIsXCJpbnZlcnRlZFwiOlwibUZUR2JoTGE0TmxVTzE2bnZKcmtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIldjZW15cjJHcjhaQ0djNkJqYnF3XCIsXCJzbWFsbFwiOlwiVF9wYThDY3BMMUd2dURzZHZzcXFcIixcIm1lZGl1bVwiOlwibkxMRXJqT2dmYTViMnNPZVpyUTVcIixcImxhcmdlXCI6XCJRNzFORkJIclN4UUxRRTRBR0QyaFwiLFwieGxhcmdlXCI6XCJFYkJpeUYxcmc2d1JheFNNSzhzb1wiLFwicm91bmRlZFwiOlwidExqdXdSU3NJaUxKR1ZzcmFyYmRcIixcInRvcE9mZnNldFwiOlwiZDRLTHBJNzlDdVNVNmdrUFBJbkFcIixcInJpZ2h0T2Zmc2V0XCI6XCJHN2hKWm9ZdjhxSXJObUZDeWdNRVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJEWnMzQXZHa1ZkT3ZKZkxlSjhHaFwiLFwibGVmdE9mZnNldFwiOlwid0VFbldSY3Z1dm9taF9PTE81aXFcIixcImludmVydGVkXCI6XCJLOVdHQ0ZwVWFkTzlXSVh3RmFqX1wiLFwibm9TaGFkb3dcIjpcImVBUUoxMGtFa1BtRHhNR3ZsWXp5XCIsXCJub0JvcmRlclwiOlwiT2xFTlI5bnR1V1lMR09LS0tyR1JcIixcInRyYW5zcGFyZW50XCI6XCJLT2NzUHJpdnI5NHJ4bmZIVmxmZVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ1VTVHkzX05wMW1HSkhXMU4zZ3hcIixcInNtYWxsXCI6XCJJWXVWemgxSEJ6Z29UQ2kyV1FfcFwiLFwibWVkaXVtXCI6XCJKTmczX2JDRWZJdmk0Z2VFY3NTM1wiLFwibGFyZ2VcIjpcIm42MXNheEEyMF9Fd01ndDlHdzRzXCIsXCJ4bGFyZ2VcIjpcImdxR252bkg5WDZtR3Z6d2w0YUd6XCIsXCJyb3VuZGVkXCI6XCJEa3p1cWhFYWlNUjNYTXMxTTFJZlwiLFwidG9wT2Zmc2V0XCI6XCJzR252ZXZ2c3hCWlVhWHJwWlFwSVwiLFwicmlnaHRPZmZzZXRcIjpcImhnWTNacGt5RDcwcDdFOHJuM2JpXCIsXCJib3R0b21PZmZzZXRcIjpcIlJPb1FZNk9hUm5RekRPZlhfUURGXCIsXCJsZWZ0T2Zmc2V0XCI6XCJLZXZtNTgyZTNnWFBKRTNPRG9wYVwiLFwiaW52ZXJ0ZWRcIjpcIk9Pem5DYkFiak9MYzRfYkNFcWZ5XCIsXCJub1NoYWRvd1wiOlwieHJIeGZjZTAzNGRnWU5Fa25sVk1cIixcIm5vQm9yZGVyXCI6XCJlSHRfUklxOEpHb1lIYzRpQ29lZ1wiLFwidHJhbnNwYXJlbnRcIjpcIm5mZ3F0U2dmcnRyR0ZEV2Zab25RXCIsXCJkaXNhYmxlZFwiOlwiSV9uaEo5dTZwVERfMlNGM3FsX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJPNVc2RFFrNE50b1dyd21LTVdnXCIsXCJoYXNPdmVybGF5XCI6XCJsbHZubUk4SzEzZzlQVEJpQ056M1wiLFwib3ZlcmxheVwiOlwiR1ZrMmo4d1YxdDNnWTV1WFE0cUlcIixcImltYWdlXCI6XCJnWGpZcUtlOXczTmdZdXJZd1VRcFwiLFwiY292ZXJcIjpcIl9sN09OT1dheXI4dHl1R2l5VXNjXCIsXCJjb250YWluXCI6XCJTWWpPYjhsQWhtRGJkeWxGSVFZOVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSGtyb3pTZmxsVEZsa2ticXhYV2hcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ4eUhYaGhIRVlYTVllYXZXWndfTlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiUkRaeWxDTWxHZmVDVXdTYnllSXFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImk4R3VfVzF3OFdCQVlmbExJWXp3XCIsXCJoZWFkZXJcIjpcIkdwN1I4d1l3YUx0Rm9LRmNSdGdOXCIsXCJoZWFkZXJMYWJlbFwiOlwiVkdrb3RNVG5xUFJhS2NHVjhSamdcIixcImxpc3RcIjpcInZnOVFMdENZVEFzNXgzZkY3OXpwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGlzdFZpZXdJdGVtXCI6XCJaRlVkN29TcFBMdDBFZDJYcWFXWlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcInhROUJmazBYMUhtWmdpaEN1dFpWXCIsXCJvcGVuXCI6XCJ1dHY5RllPVTdRMEpOblpXMWVqdlwiLFwiZW50cmFuY2VcIjpcInlZS2pjQ3ZEMkw5NEZwUGdPaWdRXCIsXCJoZWFkZXJcIjpcIndOTDg2czl6R0ZpOFhLMTFLbG9SXCIsXCJmb290ZXJcIjpcIm11NEpldjFjNEtjaWZlRjhNenFnXCIsXCJub0JvcmRlclwiOlwiRWFQU2pMMW5Yc3o3VEN4MTFMcmZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImtZaDdES1lxSDZqZExYZDdQZEp3XCIsXCJtZW51Q29udGFpbmVyXCI6XCJRbGVBTzN5bVRsaVU2Wk5CUXhmZ1wiLFwidG9wXCI6XCJheGZjcmpTSDRsdnVqenJzazJRcFwiLFwicmlnaHRcIjpcIkx0Vmx0VzNCUFo1Z05YVnh4a3JQXCIsXCJsZWZ0XCI6XCJQUmI1ZjhYY01aT2NZNXVmUE1kcVwiLFwiYm90dG9tXCI6XCJfX01aNU9vaUlyVmlkRlhiUWZqdVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVJdGVtXCI6XCJnR1pmX0dzV3N3a3IwTlREX25iUVwiLFwibm9QYWRkaW5nXCI6XCJDTTJiSFNDeHd1aXRNZXM3dTlXZlwiLFwiYWN0aXZlXCI6XCJzNHRKbEs0T0ZjM3JuWEwwTXhxa1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwiWDFGNFNRa2hRaDBmeHo1WXUzdEhcIixcIm5vUGFkZGluZ1wiOlwia3BETFhaU0QyS3AxOWg5c3VSTEFcIixcImFjdGl2ZVwiOlwiSXdJVGpHbjZ2VFp0ZUVLak5vWWNcIixcIm1lbnVJdGVtXCI6XCJsZG9SNnBHT3J0Z0hNWFNwbUg3RlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcImowaDloZF9nbHZJOXhkT25hYXVZXCIsXCJub092ZXJsYXlcIjpcIlNMNDhTelp1ZktnZE1pR1kzWVROXCIsXCJtb2RhbFwiOlwiaFRYY1pldkd5eUkwQWN2cHJYVkpcIixcInRyYW5zcGFyZW50XCI6XCJpYnFsb0cxSHhIeDNzdGRrVlpTalwiLFwibm9TaGFkb3dcIjpcIklFbzV2RWVmdHZMcG13aTBWeWpEXCIsXCJtb2RhbEJ1dHRvblwiOlwiRm9QZkMzajdjSWcyQllmenFRR0VcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJudW1wYWRcIjpcIkdldmJiRzNEMFIzNHhHVUZzNVkxXCIsXCJudW1iZXJzXCI6XCJmTDVJMVdLWENhVTl2ckJHeUpCNFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkRoNmpzUTE1ZU15ZHNTTVRDd1J3XCIsXCJ0cmFuc3BhcmVudFwiOlwiV1Q2T1BsakMycWZiQVdzazB6NHJcIixcImZpeGVkXCI6XCJwdTZzOU1qNVQxWUlnbXY0TE9uQ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImhlYWRlclwiOlwiV1NZWUJBejUzZGhxdUlPWlBXQlBcIixcImxhYmVsXCI6XCJiNTVoeVowb0hsMHM0T3Q5T2h3TVwiLFwiZXhwYW5kZWRcIjpcIk4zQXpPNWtabGg0SEFQa25uWXpxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJTbUNpNHhPeEVzTHRpNjFHb1lrNFwiLFwic2VsZWN0ZWRcIjpcIl80ckp0Q09acG5mM3huOHBtRnZDUVwiLFwiY2hlY2tib3hDb250YWluZXJcIjpcIk1TWFpGN3hjQzVhb3FIbHFwSTBnXCIsXCJjaGVja2JveFwiOlwiTkpqcTlfZ0FlZERSck9FX1hXRTFcIixcImxhYmVsXCI6XCJ2d21ETGM5NkQ5dFhnV3FzNElLelwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIixcIm5vT3B0aW9uc1wiOlwib3ZLdkI1SDhFb0Z6bnVNcVV1amxcIixcInNlYXJjaEtleXdvcmRcIjpcIlR3Y1ZhUkR6OGNva0lLOUQ5RHhKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpeDNhWldNZU41QWw0VUs4eWViSlwiLFwiaWNvblNlYXJjaENvbnRhaW5lclwiOlwiWjVMUHg0N3liRUtlWDI5WEJZQkNcIixcInJlc2V0QnV0dG9uXCI6XCJoalQ5Wlh2bXZjNVFVcnV3ejhFbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRVRHYlhUZFlBcDBHNDBUSlBMbktcIixcImRpc2FibGVkXCI6XCJuRUNnR2RYT3NwVXJRV0hqendrZ1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiYWN0aXZlXCI6XCJlYmVtenRaRVdJVjRfNkFzS1BRSFwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcIm5vT3B0aW9uc1wiOlwiZkxQNHg0SXhueWlXaHA1QlA1c1RcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImljb25CdXR0b25cIjpcImFWS3AzSDNKV3JhQmY3RzVVZGFQXCIsXCJleHBhbmRlZFwiOlwiQnJ4cnREM2FNWDdJVTUyckEyMjBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJwbGFjZWhvbGRlclwiOlwiZGRsUmlkbkl6WWhRQzlER3BnSXRcIixcImFjdGl2ZVwiOlwic2hIc0VKR3RiejRjbUE2eDFHMWxcIixcInRhZ1dyYXBwZXJcIjpcIkJHRVNoYzdxdTJmazlEWkUyUlVzXCIsXCJzZWxlY3RlZE9wdGlvblwiOlwibWE5QklqdUdDUWVLRjQ0c2d1Y1RcIixcInNlbGVjdGVkT3B0aW9uc1wiOlwiblJwQXd2OTdDZXNxUWJETGNldDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImc1T1IwYU9OT1cxT3MxeHRrTkhpXCIsXCJ0YWJsZVwiOlwic01SMVZiNjJYRXZPT1dScldjNFFcIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJfN3gyejdwX2tiUU9MRG1FWDU0aUFcIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiRUFIMTRYUGVKQnVEV0dwNU5WWW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImo0UGlnSk9MNURnekQ4T1l4c2t6XCIsXCJpc0hlYWRlclN0aWNreVwiOlwiQVlSXzRIZW9sQWpKQ09zbDNIWkpcIixcImJvcmRlckJvdHRvbVwiOlwiaVpyRDN0SDEyekRJRk9XdkpVRDdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0YWJsZUhlYWRlckNlbGxcIjpcIkpjQTFWelY0TXdWUTNORWgwdnpFXCIsXCJzb3J0SWNvblZpc2libGVcIjpcIklxN094c1F6TDA2eGo5OE8wTHFKXCIsXCJzb3J0YWJsZVwiOlwiVlNUU2hZN0xUaF9JSWpuclBfX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImRPdmlnU2doeHlRNENiYkNNa0NSXCIsXCJhY3RpdmVcIjpcInRxbllkWTBIdERsbVc2MXRqR2JRXCIsXCJoYXNBcnJvd1wiOlwicXFPNmExak5MNkhUSkc3SFIxMXRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkF2UjdXQ0RSeEN3dlJVQV9qODBQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ6S0YzNGFLdllabmJMdVp6akVlT1wiLFwiY29udGVudFwiOlwib18yMXJfRWpMS0IzeGhnR3k3NHNcIixcImNsb3NlQnV0dG9uXCI6XCJaWlBSWkxVcTlNUXlpZkQ4eDJqSFwiLFwiZGlzYWJsZWRcIjpcInVDTHowdmJOblFaRlg4a1Z1VWlHXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnd1lLUlBwR2RJTVZYa2lOMEg5QlwiLFwidGFnSW5wdXRcIjpcImF2SW1HczNYY0xlRExHaHhEOGJ3XCIsXCJkaXNhYmxlZFwiOlwieVQ4UHA4VFV2UDdzUVNHZUdMTkpcIixcInRleHRJbnB1dFwiOlwiWmlOTmYyb0xWakV4eHA5UlQyc19cIixcInNtYWxsXCI6XCJMZW1NVVRzZWlneEhibUlZVlZUY1wiLFwibWVkaXVtXCI6XCJQVUhKZE03WkViM0xGUmVNMV9VZ1wiLFwibGFyZ2VcIjpcImo5bWs1MmhHaG9Gd2p3NEZXSFE5XCIsXCJ4bGFyZ2VcIjpcIkVpV3FlRnFRWEU5TEhVaDF2eHBYXCIsXCJub0JvcmRlclwiOlwiTzZXc09wVVpvWmVUaFViX1ZpWG5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIk5QWnJrc0NwblhWSlNxX3NuSGpSXCIsXCJzbWFsbFwiOlwialFHcmlRSlNhMDR6c29HMWEydTlcIixcIm1lZGl1bVwiOlwibFZvWTlEcDE3SE9CaW5NajBRN29cIixcImxhcmdlXCI6XCJRbFVhUGJYOEVhSWk3clo0RmI4b1wiLFwieGxhcmdlXCI6XCJyWVBPTTlmTnRWTGRQRnlXS2tHRVwiLFwibm9Cb3JkZXJcIjpcIktEVElOc0hkb2xZUmVTYkxjb29IXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInpGaXVBVGdzU0I0MlZkRW1jSlpZXCIsXCJlbnRyYW5jZVwiOlwiUjhycE9VT3RuZ1lPRXQ3STBwR01cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiWGxMUU9lNDc0T3RCaWFjX2dVN0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJLbTZVVXkwanBxTTBMQTJlWGNjY1wiLFwidmlzaWJsZVwiOlwidVRvSmZjUkNSNmVWSEltODB3R2JcIixcIm5vdFZpc2libGVcIjpcImhHeGd5aFBtUW1NOTdWaU9wY3Y4XCIsXCJsZWZ0XCI6XCJ5QnYxbHdESHBleHhPM0RQcGQxdlwiLFwicmlnaHRcIjpcInY4NTJFeHhtUTZBdFNRRjJzWDhBXCIsXCJ0b3BcIjpcImlWMnl6UGl6b291OW9tVzgxMWhnXCIsXCJib3R0b21cIjpcIlZtbUU4RU5zQ2t6YndMcEwzWEpnXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ5WTlIVjQwSVRUV2dBVjhxTHcxd1wiLFwiaGFzT3ZlcmxheVwiOlwienViNWJxZFZYbTRORnhwSTRIQmZcIixcInZpZGVvXCI6XCJNVkNEVmpmZ21IRTdRZW1jWXhHbFwiLFwiY292ZXJcIjpcIlY0bkVjbTE3OXZaZTJNTGdSVmFNXCIsXCJjb250YWluXCI6XCJ1Ml9NZmVDak1TbF9hQk5KbjVuTFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwibGpmc1lzOEJRcWxlS3piTGtrYWRcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJISnRScWJBRkxPblhWeUd6OGlGVVwiLFwib3ZlcmxheVwiOlwiQUxIaE9IQWVMbEJEeTFEcFlxaXZcIn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5IaW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgY2hpbGQgPSByZWFjdF8xLmRlZmF1bHQuQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKCgoX2IgPSAoX2EgPSBjaGlsZC50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkpICE9PSAnaW5wdXQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogJ0hpbnQnIG9ubHkgYWNjZXB0cyBhbiAnaW5wdXQnIGVsZW1lbnQgYXMgY2hpbGQuXCIpO1xuICAgIH1cbiAgICB2YXIgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsIGRpc2FibGVIaW50ID0gcHJvcHMuZGlzYWJsZUhpbnQsIGFsbG93VGFiRmlsbCA9IHByb3BzLmFsbG93VGFiRmlsbCwgYWxsb3dFbnRlckZpbGwgPSBwcm9wcy5hbGxvd0VudGVyRmlsbCwgb25GaWxsID0gcHJvcHMub25GaWxsLCBvbkhpbnQgPSBwcm9wcy5vbkhpbnQsIHZhbHVlTW9kaWZpZXIgPSBwcm9wcy52YWx1ZU1vZGlmaWVyO1xuICAgIHZhciBjaGlsZFByb3BzID0gY2hpbGQucHJvcHM7XG4gICAgdmFyIG1haW5JbnB1dFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50V3JhcHBlclJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9jID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHVuTW9kaWZpZWRJbnB1dFRleHQgPSBfY1swXSwgc2V0VW5tb2RpZmllZElucHV0VGV4dCA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB0ZXh0ID0gX2RbMF0sIHNldFRleHQgPSBfZFsxXTtcbiAgICB2YXIgX2UgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgaGludCA9IF9lWzBdLCBzZXRIaW50ID0gX2VbMV07XG4gICAgdmFyIF9mID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBtYXRjaCA9IF9mWzBdLCBzZXRNYXRjaCA9IF9mWzFdO1xuICAgIHZhciBfZyA9IHJlYWN0XzEudXNlU3RhdGUoKSwgY2hhbmdlRXZlbnQgPSBfZ1swXSwgc2V0Q2hhbmdlRXZlbnQgPSBfZ1sxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhciBkdXBsaWNhdGUgPSB1dGlsc18xLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiBcXFwiXCIgKyBkdXBsaWNhdGUgKyBcIlxcXCIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGFuZCBtYXkgY2F1c2UgZXJyb3JzLiBPcHRpb25zIHNob3VsZCBub3QgY29udGFpbiBkdXBsaWNhdGUgdmFsdWVzIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtvcHRpb25zXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZGlzYWJsZUhpbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRTdHlsZSA9IG1haW5JbnB1dFJlZi5jdXJyZW50ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG1haW5JbnB1dFJlZi5jdXJyZW50KTtcbiAgICAgICAgaW5wdXRTdHlsZSAmJiBzdHlsZUhpbnQoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpO1xuICAgIH0pO1xuICAgIHZhciBnZXRNYXRjaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICghdGV4dCB8fCB0ZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnNbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzEgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMiA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB1dGlsc18xLnNvcnRBc2MoYS5sYWJlbCwgYi5sYWJlbCk7IH0pWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzZXRIaW50VGV4dEFuZElkID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgc2V0VGV4dCh0ZXh0KTtcbiAgICAgICAgdmFyIG1hdGNoID0gZ2V0TWF0Y2godGV4dCk7XG4gICAgICAgIHZhciBoaW50O1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBoaW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5sYWJlbC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SGludChoaW50KTtcbiAgICAgICAgc2V0TWF0Y2gobWF0Y2gpO1xuICAgICAgICBvbkhpbnQgJiYgb25IaW50KG1hdGNoKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVPbkZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChoaW50ID09PSAnJyB8fCAhY2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VW5Nb2RpZmllZFRleHQgPSB1bk1vZGlmaWVkSW5wdXRUZXh0ICsgaGludDtcbiAgICAgICAgY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlID0gbmV3VW5Nb2RpZmllZFRleHQ7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShjaGFuZ2VFdmVudCk7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICBvbkZpbGwgJiYgb25GaWxsKG1hdGNoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChuZXdVbk1vZGlmaWVkVGV4dCk7XG4gICAgfTtcbiAgICB2YXIgc3R5bGVIaW50ID0gZnVuY3Rpb24gKGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoX2EgPSBoaW50V3JhcHBlclJlZiA9PT0gbnVsbCB8fCBoaW50V3JhcHBlclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFdyYXBwZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBpbnB1dFN0eWxlLndpZHRoO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBpbnB1dFN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm94U2l6aW5nID0gaW5wdXRTdHlsZS5ib3hTaXppbmc7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLm1hcmdpbiA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnbWFyZ2luJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLnBhZGRpbmcgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyU3R5bGUgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICdzdHlsZScpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJXaWR0aCA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChfYiA9IGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRDaGFuZ2VFdmVudChlKTtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICB2YXIgbW9kaWZpZWRWYWx1ZSA9IHZhbHVlTW9kaWZpZXIgPyB2YWx1ZU1vZGlmaWVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKG1vZGlmaWVkVmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uRm9jdXMgJiYgY2hpbGRQcm9wcy5vbkZvY3VzKGUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vT25seSBibHVyIGl0IGlmIHRoZSBuZXcgZm9jdXMgaXNuJ3QgdGhlIHRoZSBoaW50IGlucHV0XG4gICAgICAgIGlmICgoaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpICE9PSBlLnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICAgICAgY2hpbGRQcm9wcy5vbkJsdXIgJiYgY2hpbGRQcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBBUlJPV1JJR0hUID0gJ0Fycm93UmlnaHQnO1xuICAgIHZhciBUQUIgPSAnVGFiJztcbiAgICB2YXIgRU5URVIgPSAnRW50ZXInO1xuICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VsZWN0YWJsZSBpbnB1dCB0eXBlcyAoXCJ0ZXh0XCIsIFwic2VhcmNoXCIpLCBvbmx5IHNlbGVjdCB0aGUgaGludCBpZlxuICAgICAgICAgICAgLy8gaXQncyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB2YWx1ZS4gRm9yIG5vbi1zZWxlY3RhYmxlIHR5cGVzIChcImVtYWlsXCIsXG4gICAgICAgICAgICAvLyBcIm51bWJlclwiKSwgYWx3YXlzIHNlbGVjdCB0aGUgaGludC5cbiAgICAgICAgICAgIHZhciBpc05vblNlbGVjdGFibGVUeXBlID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gaXNOb25TZWxlY3RhYmxlVHlwZSB8fCBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBlLmN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGNhcmV0SXNBdFRleHRFbmQ7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGUua2V5ID09PSBBUlJPV1JJR0hUKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93VGFiRmlsbCAmJiBlLmtleSA9PT0gVEFCICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93RW50ZXJGaWxsICYmIGUua2V5ID09PSBFTlRFUiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRQcm9wcy5vbktleURvd24gJiYgY2hpbGRQcm9wcy5vbktleURvd24oZSk7XG4gICAgfTtcbiAgICB2YXIgb25IaW50Q2xpY2sgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBoaW50Q2FyZXRQb3NpdGlvbiA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgLy8gSWYgdXNlciBjbGlja3MgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBoaW50LCBcbiAgICAgICAgLy8gbW92ZSBmb2N1cyB0byB0aGUgZW5kIG9mIHRoZSBtYWluSW5wdXQgdGV4dFxuICAgICAgICBpZiAoaGludENhcmV0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFoaW50ICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHZhciBjYXJldFBvc2l0aW9uID0gdGV4dC5sZW5ndGggKyBoaW50Q2FyZXRQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAoX2IgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zaXRpb24sIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGlsZFJlZiA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkKS5yZWY7XG4gICAgdmFyIG1haW5JbnB1dCA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyksIHsgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sIHJlZjogY2hpbGRSZWYgJiYgdHlwZW9mIChjaGlsZFJlZikgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHV0aWxzXzEubWVyZ2VSZWZzKGNoaWxkUmVmLCBtYWluSW5wdXRSZWYpXG4gICAgICAgICAgICA6IG1haW5JbnB1dFJlZiB9KSk7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaW5wdXQtd3JhcHBlclwiLCBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgICAgICAgfSB9LCBkaXNhYmxlSGludFxuICAgICAgICA/IGNoaWxkXG4gICAgICAgIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0XzEuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgIG1haW5JbnB1dCxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludC13cmFwcGVyXCIsIHJlZjogaGludFdyYXBwZXJSZWYsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzUpJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB9IH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAncmFoLXRleHQtZmlsbGVyJywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB0ZXh0KSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50XCIsIHJlZjogaGludFJlZiwgb25DbGljazogb25IaW50Q2xpY2ssIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAhaGludCB8fCBoaW50ID09PSAnJyA/ICdub25lJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICAgICAgICAgICAgICB9LCBkZWZhdWx0VmFsdWU6IGhpbnQsIHRhYkluZGV4OiAtMSB9KSkpKSkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGV4cG9ydHMuc29ydEFzYyA9IGV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGV4cG9ydHMubWVyZ2VSZWZzID0gdm9pZCAwO1xuZnVuY3Rpb24gbWVyZ2VSZWZzKCkge1xuICAgIHZhciByZWZzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgcmVmc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyZWRSZWZzID0gcmVmcy5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgZmlsdGVyZWRSZWZzXzEgPSBmaWx0ZXJlZFJlZnM7IF9pIDwgZmlsdGVyZWRSZWZzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVmID0gZmlsdGVyZWRSZWZzXzFbX2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZWYoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IGluc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZVJlZnMgPSBtZXJnZVJlZnM7XG47XG4vLyBJRSBkb2Vzbid0IHNlZW0gdG8gZ2V0IHRoZSBjb21wb3NpdGUgY29tcHV0ZWQgdmFsdWUgKGVnOiAncGFkZGluZycsXG4vLyAnYm9yZGVyU3R5bGUnLCBldGMuKSwgc28gZ2VuZXJhdGUgdGhlc2UgZnJvbSB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVN0eWxlKHN0eWxlcywgYXR0ciwgc3ViYXR0cikge1xuICAgIGlmIChzdWJhdHRyID09PSB2b2lkIDApIHsgc3ViYXR0ciA9ICcnOyB9XG4gICAgLy8gVGl0bGUtY2FzZSB0aGUgc3ViLWF0dHJpYnV0ZS5cbiAgICBpZiAoc3ViYXR0cikge1xuICAgICAgICBzdWJhdHRyID0gc3ViYXR0ci5yZXBsYWNlKHN1YmF0dHJbMF0sIHN1YmF0dHJbMF0udG9VcHBlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBbJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddXG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IChhdHRyICsgZGlyICsgc3ViYXR0cikgcHJvcGVydHkgY2Fubm90IGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGRpcikgeyByZXR1cm4gc3R5bGVzW2F0dHIgKyBkaXIgKyBzdWJhdHRyXTsgfSlcbiAgICAgICAgLmpvaW4oJyAnKTtcbn1cbmV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGludGVycG9sYXRlU3R5bGU7XG5mdW5jdGlvbiBzb3J0QXNjKGEsIGIpIHtcbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZXhwb3J0cy5zb3J0QXNjID0gc29ydEFzYztcbmZ1bmN0aW9uIGdldEZpcnN0RHVwbGljYXRlT3B0aW9uKGFycmF5KSB7XG4gICAgdmFyIHRyYWNrZXIgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmFja2VyW2FycmF5W2ldLmxhYmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb247XG4iLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjQgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAodHlwZW9mIGtleXNJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQsIF9yZWYkY3VycmVudDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50IHx8IChfcmVmJGN1cnJlbnQgPSByZWYuY3VycmVudCkgIT0gbnVsbCAmJiBfcmVmJGN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG5cbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5ID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoX3JlZikge1xuICB2YXIgY29sdW1uSW5kZXggPSBfcmVmLmNvbHVtbkluZGV4LFxuICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDtcbiAgcmV0dXJuIHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudChfcmVmMikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRDb2x1bW5PZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5PZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgZ2V0Q29sdW1uV2lkdGggPSBfcmVmMi5nZXRDb2x1bW5XaWR0aCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgICAgIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgICAgIGdldFJvd0hlaWdodCA9IF9yZWYyLmdldFJvd0hlaWdodCxcbiAgICAgIGdldFJvd09mZnNldCA9IF9yZWYyLmdldFJvd09mZnNldCxcbiAgICAgIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYyLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYyLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZjIudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShHcmlkLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gR3JpZChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsTGVmdDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0IDogMCxcbiAgICAgICAgc2Nyb2xsVG9wOiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wIDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsIG92ZXJzY2FuUm93U3RvcEluZGV4LCB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIHZpc2libGVSb3dTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdmFyIGtleSA9IHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogX29mZnNldCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IF9vZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6IGdldFJvd09mZnNldChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG5cbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgR3JpZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBHcmlkLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKF9yZWYzKSB7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9yZWYzLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3JlZjMuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCdcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKF9yZWY0KSB7XG4gICAgICB2YXIgX3JlZjQkYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY0JGFsaWduID09PSB2b2lkIDAgPyAnYXV0bycgOiBfcmVmNCRhbGlnbixcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF9yZWY0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjQucm93SW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzMi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczIuaGVpZ2h0LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHMyLnJvd0NvdW50LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZS5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG5cbiAgICAgIHZhciBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdmFyIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6IHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMsIGhvcml6b250YWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbFRvcFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbExlZnQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbExlZnQsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbFRvcCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsVG9wO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMi5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlMi5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkNvdW50LFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM0LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNC5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNC5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczQkaXRlbUtleSA9IF90aGlzJHByb3BzNC5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkgOiBfdGhpcyRwcm9wczQkaXRlbUtleSxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNC5yb3dDb3VudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNC51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNC53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMF0sXG4gICAgICAgICAgY29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzFdO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgcm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblswXSxcbiAgICAgICAgICByb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAodmFyIF9yb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IF9yb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IF9yb3dJbmRleCsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2NvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgX2NvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgX2NvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleSh7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4LFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9yb3dJbmRleCwgX2NvbHVtbkluZGV4KVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNS5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQgPSBfdGhpcyRwcm9wczUub25JdGVtc1JlbmRlcmVkLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM1LnJvd0NvdW50O1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlszXTtcblxuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4yID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgX292ZXJzY2FuUm93U3RhcnRJbmRleCwgX292ZXJzY2FuUm93U3RvcEluZGV4LCBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4LCBfdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIF92aXNpYmxlUm93U3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbExlZnQsXG4gICAgICAgICAgICBfc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUzLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgICAgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsTGVmdCwgX3Njcm9sbFRvcCwgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM2LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNC5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU0LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTQuc2Nyb2xsTGVmdDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczcuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93Q291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNy5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU1LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU1LnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlNS5zY3JvbGxUb3A7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBHcmlkO1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufVxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjUsIF9yZWY2KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjUuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjUub3V0ZXJUYWdOYW1lLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgIG92ZXJzY2FuQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvdW50LFxuICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfcmVmNS5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgIHdpZHRoID0gX3JlZjUud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWY2Lmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIHJvd0NvdW50ID0gX3JlZi5yb3dDb3VudDtcbiAgdmFyIHJvd01ldGFkYXRhTWFwID0gX3JlZjIucm93TWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmMi5lc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IF9yZWYyLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWYzLCBfcmVmNCkge1xuICB2YXIgY29sdW1uQ291bnQgPSBfcmVmMy5jb2x1bW5Db3VudDtcbiAgdmFyIGNvbHVtbk1ldGFkYXRhTWFwID0gX3JlZjQuY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY0LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBfcmVmNC5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLmNvbHVtbldpZHRoO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMucm93SGVpZ2h0O1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICB2YXIgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKSA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuXG4gIH1cbn07XG5cbnZhciBWYXJpYWJsZVNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IHByb3BzLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoO1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgncm93JywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gcHJvcHMucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY1ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjUuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWY1LmVzdGltYXRlZFJvd0hlaWdodDtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge31cbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gZnVuY3Rpb24gKHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciBjb2x1bW5JbmRleCA9IF9yZWY2LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjYucm93SW5kZXgsXG4gICAgICAgICAgX3JlZjYkc2hvdWxkRm9yY2VVcGRhID0gX3JlZjYuc2hvdWxkRm9yY2VVcGRhdGUsXG4gICAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRzaG91bGRGb3JjZVVwZGE7XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LCBjb2x1bW5JbmRleCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCwgcm93SW5kZXggLSAxKTtcbiAgICAgIH0gLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSQxID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoaW5kZXgsIGRhdGEpIHtcbiAgcmV0dXJuIGluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoX3JlZikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRJdGVtT2Zmc2V0ID0gX3JlZi5nZXRJdGVtT2Zmc2V0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gX3JlZi5nZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICBnZXRJdGVtU2l6ZSA9IF9yZWYuZ2V0SXRlbVNpemUsXG4gICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IF9yZWYuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZi5nZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYuZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKExpc3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbE9mZnNldDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5TdGFydEluZGV4LCBvdmVyc2NhblN0b3BJbmRleCwgdmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4OiB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGl0ZW1TaXplID0gX3RoaXMkcHJvcHMuaXRlbVNpemUsXG4gICAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wcy5sYXlvdXQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbik7XG5cbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldEl0ZW1PZmZzZXQoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgc2l6ZSA9IGdldEl0ZW1TaXplKF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIHZhciBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDA7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMCxcbiAgICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbFZlcnRpY2FsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldDIgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsVG9wO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIExpc3QuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzJDEobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBMaXN0LnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKHNjcm9sbE9mZnNldCkge1xuICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pIHtcbiAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczIuaXRlbUNvdW50LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMi5sYXlvdXQ7XG4gICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gdGhpcy5zdGF0ZS5zY3JvbGxPZmZzZXQ7XG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cblxuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSAwO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsSGVpZ2h0ID4gb3V0ZXJSZWYuY2xpZW50SGVpZ2h0ID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvKGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMzLmRpcmVjdGlvbixcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsT2Zmc2V0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxPZmZzZXQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMzLmxheW91dDtcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczQubGF5b3V0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczUuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczUuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNS5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczUuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM1Lml0ZW1Db3VudCxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNS5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczUkaXRlbUtleSA9IF90aGlzJHByb3BzNS5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkkMSA6IF90aGlzJHByb3BzNSRpdGVtS2V5LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNS5sYXlvdXQsXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczUudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczUud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgdmFyIG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZCA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzBdLFxuICAgICAgICAgIHN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgIGtleTogaXRlbUtleShfaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgIGluZGV4OiBfaW5kZXgsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX2luZGV4KVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBpc0hvcml6b250YWwgPyAnMTAwJScgOiBlc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuXG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZDIgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhblN0YXJ0SW5kZXgsIF9vdmVyc2NhblN0b3BJbmRleCwgX3Zpc2libGVTdGFydEluZGV4LCBfdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX3Njcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMi5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsT2Zmc2V0LCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczYuaXRlbUNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGUzLmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbE9mZnNldDtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExpc3Q7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIGxheW91dDogJ3ZlcnRpY2FsJyxcbiAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59IC8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMkMSA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgbGF5b3V0ID0gX3JlZjIubGF5b3V0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjIuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjIub3V0ZXJUYWdOYW1lLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjMuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUkMSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lJDEuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfSAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgKyAoXCJcXFwiXCIgKyBsYXlvdXQgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZlcnRpY2FsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSA9IDUwO1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhJDEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0kMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBpdGVtQ291bnQgPSBfcmVmMi5pdGVtQ291bnQ7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBfcmVmMy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWYzLmVzdGltYXRlZEl0ZW1TaXplLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBfcmVmMy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IGl0ZW1Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaXRlbUNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkSXRlbVNpemU7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBWYXJpYWJsZVNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgb2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY0ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjQuZXN0aW1hdGVkSXRlbVNpemU7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXgsIGluZGV4IC0gMSk7IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY1KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBpbmRleCAqIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjIuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChfcmVmMywgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0O1xuICAgIHJldHVybiBpbmRleCAqIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQoX3JlZjQsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY0LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZjUpIHtcbiAgICB2YXIgcm93Q291bnQgPSBfcmVmNS5yb3dDb3VudCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjUucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQgKiByb3dDb3VudDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmNikge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY2LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY2LmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aCAqIGNvbHVtbkNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChfcmVmNywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjcuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHdpZHRoID0gX3JlZjcud2lkdGg7XG4gICAgdmFyIGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5Db3VudCAqIGNvbHVtbldpZHRoIC0gd2lkdGgpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Q29sdW1uT2Zmc2V0LCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCAtIHdpZHRoICsgc2Nyb2xsYmFyU2l6ZSArIGNvbHVtbldpZHRoKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KF9yZWY4LCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmOC5yb3dIZWlnaHQsXG4gICAgICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmOC5yb3dDb3VudDtcbiAgICB2YXIgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KDAsIHJvd0NvdW50ICogcm93SGVpZ2h0IC0gaGVpZ2h0KTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdFJvd09mZnNldCwgcm93SW5kZXggKiByb3dIZWlnaHQpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCByb3dJbmRleCAqIHJvd0hlaWdodCAtIGhlaWdodCArIHNjcm9sbGJhclNpemUgKyByb3dIZWlnaHQpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjksIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmOS5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmOS5jb2x1bW5Db3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyBjb2x1bW5XaWR0aCkpKTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTAsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTAuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjEwLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IF9yZWYxMC53aWR0aDtcbiAgICB2YXIgbGVmdCA9IHN0YXJ0SW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgICB2YXIgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gY29sdW1uV2lkdGgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWYxMSwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMS5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjExLnJvd0NvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSkpO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMiwgc3RhcnRJbmRleCwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMi5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjEyLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBfcmVmMTIuaGVpZ2h0O1xuICAgIHZhciB0b3AgPSBzdGFydEluZGV4ICogcm93SGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbCgoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvIHJvd0hlaWdodCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmMTMpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTMuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYxMy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaW5kZXggKiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYyLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjMpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjMuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWYzLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZSAqIGl0ZW1Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KF9yZWY0LCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY0LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjQuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY0Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNC5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbUNvdW50ICogaXRlbVNpemUgLSBzaXplKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdEl0ZW1PZmZzZXQsIGluZGV4ICogaXRlbVNpemUpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpbmRleCAqIGl0ZW1TaXplIC0gc2l6ZSArIGl0ZW1TaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEl0ZW1PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY1LCBvZmZzZXQpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjUuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBNYXRoLmZsb29yKG9mZnNldCAvIGl0ZW1TaXplKSkpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWY2LCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjYuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY2Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNi5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjYubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY2LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgb2Zmc2V0ID0gc3RhcnRJbmRleCAqIGl0ZW1TaXplO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVJdGVtcyA9IE1hdGguY2VpbCgoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyBpdGVtU2l6ZSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjcuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldiwgbmV4dCkge1xuICBmb3IgKHZhciBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX2F0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbX2F0dHJpYnV0ZV0gIT09IG5leHRbX2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiXTtcbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5cbmZ1bmN0aW9uIGFyZUVxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3R5bGUgPSBwcmV2UHJvcHMuc3R5bGUsXG4gICAgICBwcmV2UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICB2YXIgbmV4dFN0eWxlID0gbmV4dFByb3BzLnN0eWxlLFxuICAgICAgbmV4dFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShuZXh0UHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIHJldHVybiAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpO1xufVxuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuXG5mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCB7IEZpeGVkU2l6ZUdyaWQsIEZpeGVkU2l6ZUxpc3QsIFZhcmlhYmxlU2l6ZUdyaWQsIFZhcmlhYmxlU2l6ZUxpc3QsIGFyZUVxdWFsLCBzaG91bGRDb21wb25lbnRVcGRhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIC8+XG4gICAgPC9MYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBDb25maXJtYXRpb25Nb2RhbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgeyEhaGVhZGVyICYmIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPn1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nsb3NlLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlO1xuICBmb290ZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9wZW46IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gRHJhd2VyKHtcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIG9wZW4sXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBvbkNsb3NlLFxufTogRHJhd2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXIsIHsgW3N0eWxlcy5vcGVuXTogb3BlbiB9LCBjbGFzc05hbWVdKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyQ29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ29udGVudH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ2xvc2VJY29ufSBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9e1wieGxhcmdlXCJ9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7ISFoZWFkZXIgJiYgPGRpdj57aGVhZGVyfTwvZGl2Pn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyTWFpbn0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7ISFmb290ZXIgJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJGb290ZXJ9Pntmb290ZXJ9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyIH0gZnJvbSBcIi4vRHJhd2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9DbGlja2FibGUubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFxuICBSZW5kZXJEaXNwbGF5UHJvcHM8VD4sXG4gIFwic2VsZWN0ZWRJdGVtXCIgfCBcInRvZ2dsZUlzT3BlblwiXG4+ICYge1xuICBvbkNsaWNrOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5bXCJ0b2dnbGVJc09wZW5cIl07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGRpc3BsYXksXG4gIGlzRGlzYWJsZWQsXG4gIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxufTogQ2xpY2thYmxlUHJvcHM8VD4pIHtcbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY29udGFpbmVyfT5cbiAgICAgICAge2Rpc3BsYXl9XG4gICAgICAgIDxJY29uIGFsdD1cIkRyb3Bkb3duXCIgc3JjPXtpY29uTWVudX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQnV0dG9uPlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFjY2VwdD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcbn07XG5cbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XG4gIGNoaWxkcmVuLFxuICBhY2NlcHQsXG4gIG9uQ2hhbmdlLFxuICBpbnB1dFJlZixcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmxhYmVsLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5pbnB1dH1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBpZD1cImZpbGVcIlxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xufTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgc3JjLFxuICBhbHQsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNXaWR0aD86IG51bWJlcjtcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCI7XG4gIGxvYWRpbmc/OiBcImVhZ2VyXCIgfCBcImxhenlcIjtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xuICBzcmMsXG4gIGFsdCxcbiAgc3JjV2lkdGgsXG4gIHNyY0hlaWdodCxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG4gIGRlY29kaW5nID0gXCJhdXRvXCIsXG4gIGxvYWRpbmcgPSBcImVhZ2VyXCIsXG4gIHN0eWxlLFxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnRDb250ZXh0IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG4gIHNtYXJ0TGF5b3V0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBzbWFydExheW91dCA9IHRydWUsXG59OiBNZW51UHJvcHMpIHtcbiAgY29uc3QgbWVudVBsYWNlbWVudCA9IHVzZUNvbnRleHQoUGxhY2VtZW50Q29udGV4dCk7XG4gIGNvbnN0IGlubmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZiB8fCBpbm5lclJlZjtcblxuICBpZiAoIW1lbnVQbGFjZW1lbnQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNZW51IGNvbXBvbmVudCBtdXN0IGJlIHdyYXBwZWQgYnkgYSBNZW51Q29udGFpbmVyIGNvbXBvbmVudC5cIlxuICAgICk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc21hcnRMYXlvdXQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20gfSA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlzdGFuY2VUb0VkZ2UgPVxuICAgICAgICBtZW51UGxhY2VtZW50LnZlcnRpY2FsID09PSBcInRvcFwiID8gdG9wIDogd2luZG93LmlubmVySGVpZ2h0IC0gYm90dG9tO1xuXG4gICAgICBpZiAoZGlzdGFuY2VUb0VkZ2UgPCAwKSB7XG4gICAgICAgIGNvbnN0IHVsRWwgPSByZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSB1bEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSxhXCIpO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSB1bEVsLmNsaWVudEhlaWdodCArIGRpc3RhbmNlVG9FZGdlO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjaGlsZEVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZEVsZW1lbnRzWzBdKS5taW5IZWlnaHRcbiAgICAgICAgICA6IDA7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke29mZnNldH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnQsIHNtYXJ0TGF5b3V0XSk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5tZW51LFxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57Y2hpbGRyZW59PC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBPdmVybGF5UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gT3ZlcmxheSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIGlzRml4ZWQgPSBmYWxzZSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogT3ZlcmxheVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG59O1xuXG5mdW5jdGlvbiBHcm91cE9wdGlvbih7IGNsYXNzTmFtZSwgbGFiZWwsIG9wdGlvbnMgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzaG93RXhwYW5kZWRHcm91cCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcbiAgY29uc3QgW2V4cGFuZGVkLCB0b2dnbGVFeHBhbmRdID0gdXNlVG9nZ2xlKHNob3dFeHBhbmRlZEdyb3VwKTtcblxuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUV4cGFuZCgpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBvbkNsaWNrPXtoYW5kbGVHcm91cENsaWNrfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+e2xhYmVsfTwvZGl2PlxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogZXhwYW5kZWQgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgYWx0PXtleHBhbmRlZCA/IFwiQ29sbGFwc2VcIiA6IFwiRXhwYW5kXCJ9XG4gICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7ZXhwYW5kZWQgJiZcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JvdXBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4vR3JvdXBPcHRpb25cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhOiBPcHRpb25UeXBlO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgZGF0YSB9OiBQcm9wcykge1xuICBjb25zdCB7IG11bHRpcGxlLCBzZWxlY3RlZE9wdGlvbnMsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKS5pbmNsdWRlcyhkYXRhLnZhbHVlKSxcbiAgICBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGRhdGEpO1xuICB9LCBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLnNlbGVjdGVkXTogaXNDaGVja2VkICYmICFtdWx0aXBsZSB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHttdWx0aXBsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94Q29udGFpbmVyfT5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uXCI7XG4iLCJpbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4uL0dyb3VwT3B0aW9uXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb25MaXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG4vLyBzZWUgZG9jcyB0byB1bmRlcnN0YW5kIG5lZWQgb2YgdGhlIGZ1bmN0aW9uIGJlbG93IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzXG5leHBvcnQgY29uc3QgaXNPcHRpb24gPSAoXG4gIG9wdGlvbjogT3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZVxuKTogb3B0aW9uIGlzIE9wdGlvblR5cGUgPT4ge1xuICByZXR1cm4gKG9wdGlvbiBhcyBPcHRpb25UeXBlKS52YWx1ZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uTGlzdCh7IG9wdGlvbnMsIG9uRmlsdGVyLCBvbkNoYW5nZSB9OiBQcm9wcykge1xuICBjb25zdCBbc2VsZWN0QWxsQ2hlY2tlZCwgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgbXVsdGlwbGUsXG4gICAgc2VhcmNoS2V5d29yZCxcbiAgICBzZWxlY3RBbGwsXG4gICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFzR3JvdXBPcHRpb24gPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIWlzT3B0aW9uKG9wdGlvbikpO1xuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnMgPSAob3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT4pID0+IHtcbiAgICBjb25zdCBrZXl3b3JkID0gc2VhcmNoS2V5d29yZC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiBrZXl3b3JkLmxlbmd0aFxuICAgICAgPyBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIG9uRmlsdGVyXG4gICAgICAgICAgICA/IG9uRmlsdGVyKG9wdGlvbiwga2V5d29yZClcbiAgICAgICAgICAgIDogb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZClcbiAgICAgICAgKVxuICAgICAgOiBvcHRpb25zO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHVzZU1lbW88QXJyYXk8R3JvdXBPcHRpb25UeXBlIHwgT3B0aW9uVHlwZT4+KCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLnJlZHVjZSgobGVuZ3RoOiBudW1iZXIsIG5leHRPcHRpb24pID0+IHtcbiAgICAgIGlmIChpc09wdGlvbihuZXh0T3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyBuZXh0T3B0aW9uLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9LCBbaGFzR3JvdXBPcHRpb24sIGZpbHRlcmVkT3B0aW9ucywgaXNPcHRpb25dKTtcblxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5maW5kKChmaWx0ZXJlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pXG4gICAgICAgICAgPyBmaWx0ZXJlZE9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pLmxlbmd0aDtcbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgZmlsdGVyZWRPcHRpb25zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBjb25zdCBvcHRpb25zVG9TZWxlY3QgPSBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLm1hcCgoZmlsdGVyZWRPcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pID8gZmlsdGVyZWRPcHRpb24gOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShvcHRpb25zVG9TZWxlY3QubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIGlzT3B0aW9uLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uc0NvdW50ID09PSBmaWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50LFxuICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50LFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7c2VsZWN0QWxsICYmIG11bHRpcGxlICYmICEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRPcHRpb25zQ291bnQgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPT0gZmlsdGVyZWRPcHRpb25zQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHshIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihvcHRpb24pID8gKFxuICAgICAgICAgICAgPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5cbiAgICAgICAgICBObyBtYXRjaGVzIGZvclxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaEtleXdvcmR9PntgICR7c2VhcmNoS2V5d29yZH1gfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb25MaXN0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb25MaXN0LCBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlYXJjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gXCIuLi8uLi9UZXh0SW5wdXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGljb25TZWFyY2ggZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWFyY2guc3ZnXCI7XG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IGNsYXNzTmFtZSB9OiBQcm9wcykge1xuICBjb25zdCB7IHNlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmQgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hLZXl3b3JkKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZWFyY2hLZXl3b3JkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaEtleXdvcmQoXCJcIik7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uU2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgPEljb24gc3JjPXtpY29uU2VhcmNofSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIHZhbHVlPXtzZWFyY2hLZXl3b3JkfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2V9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAvPlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVzZXRCdXR0b259XG4gICAgICAgIHNyYz17aWNvbkNyb3NzZWR9XG4gICAgICAgIGFsdD1cIkNsZWFyXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXshc2VhcmNoS2V5d29yZH1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljaywgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwiLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IHsgT3B0aW9uTGlzdCB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5cbnR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dTZWxlY3RlZEFzVGFncz86IGJvb2xlYW47XG4gIHNob3dTZWFyY2g/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNjcm9sbE1lbnVJbnRvVmlldz86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICB3aWR0aDogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc2FibGVkLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgbGFiZWwsXG4gIHNlbGVjdEFsbCxcbiAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gIHNjcm9sbE1lbnVJbnRvVmlldyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHNob3dTZWFyY2ggPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcbiAgY29uc3QgY29udGVudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICBjb25zdCBvblJlc2l6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZW50UmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCB8fCAhb3BlbmVkIHx8ICFzY3JvbGxNZW51SW50b1ZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgUk8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXNpemUpO1xuICAgIFJPLm9ic2VydmUoY29udGVudFJlZi5jdXJyZW50KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBSTy5kaXNjb25uZWN0KCk7XG4gICAgICBSTyA9IG51bGw7XG4gICAgfTtcbiAgfSwgW29wZW5lZCwgc2Nyb2xsTWVudUludG9WaWV3LCBvblJlc2l6ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWxlY3QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlT3BlbmVkKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjaygodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB7XG4gICAgaWYgKCFtdWx0aXBsZSkgdG9nZ2xlT3BlbmVkKGZhbHNlKTtcblxuICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHZhbHVlcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0UHJvdmlkZXJcbiAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbH1cbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwPXtzaG93RXhwYW5kZWRHcm91cH1cbiAgICA+XG4gICAgICA8ZGl2IHJlZj17cmVmfT5cbiAgICAgICAge2xhYmVsID8gPExhYmVsIHZhbHVlPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaGVhZGVyLCB7IFtzdHlsZXMuYWN0aXZlXTogb3BlbmVkIH1dKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5TZWxlY3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlbGVjdG9yXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgc2hvd1NlbGVjdGVkQXNUYWdzPXtzaG93U2VsZWN0ZWRBc1RhZ3N9XG4gICAgICAgICAgICAgIGlzRHJvcGRvd25PcGVuZWQ9e29wZW5lZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbkJ1dHRvbixcbiAgICAgICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBvcGVuZWQgfSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICAgICAgYWx0PXtvcGVuZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7b3BlbmVkICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0gcmVmPXtjb250ZW50UmVmfT5cbiAgICAgICAgICAgICAge29wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5ObyBvcHRpb25zIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxPcHRpb25MaXN0XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29udGV4dFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgc2VsZWN0ZWRPcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246IChvcHRpb246IE9wdGlvblR5cGUpID0+IHZvaWQ7XG4gIHNlYXJjaEtleXdvcmQ6IHN0cmluZztcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB2b2lkO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgc2VsZWN0QWxsOiBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXA6IHRydWUsXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAodmFsdWU6IE9wdGlvblR5cGUpID0+IHt9LFxuICBzZWFyY2hLZXl3b3JkOiBcIlwiLFxuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4ge30sXG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB7fSxcbn07XG5cbmNvbnN0IFNlbGVjdENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNlbGVjdENvbnRleHRTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuY29uc3QgU2VsZWN0Q29udGV4dFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgc2VsZWN0QWxsID0gZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwID0gdHJ1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uVHlwZVtdPihcbiAgICBpbml0aWFsU3RhdGUuc2VsZWN0ZWRPcHRpb25zXG4gICk7XG4gIGNvbnN0IFtzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkXSA9IHVzZVN0YXRlKFxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hLZXl3b3JkXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB7XG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gc2VsZWN0ZWRPcHRpb25zLnNvbWUoXG4gICAgICAgICAgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgICApXG4gICAgICAgICAgPyBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBvcHRpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtvcHRpb25dO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKVxuICAgICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgICA6IFtkZWZhdWx0VmFsdWVdO1xuXG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZSgoYWxsLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGlzT3B0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgaXRlbV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5pdGVtLm9wdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRWYWx1ZSwgb3B0aW9uc10pO1xuXG4gIGNvbnN0IGNvbnRleHRWYWx1ZTogU2VsZWN0Q29udGV4dFN0YXRlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzaG93RXhwYW5kZWRHcm91cCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlbGVjdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBTZWxlY3RDb250ZXh0LCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdG9yLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL1RhZ1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M6IGJvb2xlYW47XG4gIGlzRHJvcGRvd25PcGVuZWQ6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Rvcih7XG4gIHBsYWNlaG9sZGVyLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MsXG4gIGlzRHJvcGRvd25PcGVuZWQsXG59OiBQcm9wcykge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgbXVsdGlwbGUsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xpY2sgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0Nsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJUb1Nob3cgPSB1c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNEcm9wZG93bk9wZW5lZCB9LFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgPC9zcGFuPlxuICAgICksXG4gICAgW3BsYWNlaG9sZGVyLCBpc0Ryb3Bkb3duT3BlbmVkXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RhZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICAgICkgOiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRhZ1dyYXBwZXJ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhZ0NsaWNrfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGFnIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0gY2xvc2FibGUgb25DbG9zZT17aGFuZGxlVGFnQ2xvc2V9PlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBwbGFjZWhvbGRlclRvU2hvd11cbiAgKTtcblxuICBjb25zdCBzaG93QXNUZXh0ID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICA8c3BhblxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb25zfVxuICAgID57YCR7cGxhY2Vob2xkZXJ9ICgke3NlbGVjdGVkT3B0aW9ucy5sZW5ndGh9KWB9PC9zcGFuPlxuICApIDogKFxuICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICk7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICkgOiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbn0+e3NlbGVjdGVkT3B0aW9uc1swXS5sYWJlbH08L3NwYW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3QgfSBmcm9tIFwiLi9TZWxlY3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuXG5cblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgaGVhZGVySGVpZ2h0ID0gVGFibGVDb25maWcuSEVBREVSX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxuICBjbGFzc05hbWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH06IHsgZGF0YTogYW55OyBpbmRleDogbnVtYmVyOyBzdHlsZTogYW55IH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICBpc0hlYWRlclN0aWNreT17aXNIZWFkZXJTdGlja3l9XG4gICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyQ2VsbCBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7XG4gIGNvbHVtbnMsXG4gIHNjcm9sbFRvcCxcbiAgaXNIZWFkZXJTdGlja3ksXG4gIGhlYWRlckhlaWdodCxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5ib3JkZXJCb3R0b21dOiAhIXNjcm9sbFRvcCB9LFxuICAgICAgICB7IFtzdHlsZXMuaXNIZWFkZXJTdGlja3ldOiBpc0hlYWRlclN0aWNreSB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IGhlYWRlckhlaWdodCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXJDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtaGVhZC1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvbkNhcmV0VXAgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC11cC5zdmdcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXJDZWxsKHsgY29sdW1uIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBvblNvcnQsXG4gICAgc29ydGFibGUsXG4gICAgc29ydGVkLFxuICAgIGRlZmF1bHRTb3J0T3JkZXIsXG4gICAgdGl0bGUsXG4gICAgd2lkdGgsXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gY29sdW1uO1xuXG4gIGNvbnN0IFtzb3J0T3JkZXIsIHNldFNvcnRPcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PiBkZWZhdWx0U29ydE9yZGVyIHx8IFNvcnRPcmRlci5ERVNDXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU29ydENvbHVtbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNvcnRlZCkge1xuICAgICAgcmV0dXJuIG9uU29ydChzb3J0T3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0T3JkZXIgPVxuICAgICAgc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQyA/IFNvcnRPcmRlci5BU0MgOiBTb3J0T3JkZXIuREVTQztcbiAgICBzZXRTb3J0T3JkZXIobmV3U29ydE9yZGVyKTtcbiAgICBvblNvcnQobmV3U29ydE9yZGVyKTtcbiAgfSwgW29uU29ydCwgc29ydE9yZGVyLCBzb3J0ZWRdKTtcblxuICBjb25zdCBjZWxsUHJvcHMgPVxuICAgIG9uU29ydCAmJiBzb3J0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgb25DbGljazogaGFuZGxlU29ydENvbHVtbixcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICBjb25zdCBkaXNwbGF5QXJyb3cgPSAoKTogc3RyaW5nID0+IHtcbiAgICBpZiAoc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQykge1xuICAgICAgcmV0dXJuIGljb25DYXJldERvd247XG4gICAgfVxuICAgIHJldHVybiBpY29uQ2FyZXRVcDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5jZWxsUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zb3J0SWNvblZpc2libGVdOiBzb3J0YWJsZSAmJiBzb3J0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5zb3J0YWJsZV06IHNvcnRhYmxlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgID5cbiAgICAgIHt0aXRsZX1cbiAgICAgIHtzb3J0YWJsZSA/IChcbiAgICAgICAgPEljb24gYWx0PXtcIlNvcnQgYnV0dG9uXCJ9IHNpemU9XCJzbWFsbFwiIHNyYz17ZGlzcGxheUFycm93KCl9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZVJvd0NlbGwgZnJvbSBcIi4vVGFibGVSb3dDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvdy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIHJvd0hlaWdodDogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvdyh7XG4gIGRhdGEsXG4gIGNvbHVtbnMsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICByb3dIZWlnaHQsXG4gIGlzQWN0aXZlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uUm93Q2xpY2sgJiYgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9uUm93Q2xpY2soZGF0YSk7XG4gICAgfVxuICB9LCBbZGF0YSwgb25Sb3dDbGlja10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csXG4gICAgICAgICAgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zYWJsZT86IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkRlbGV0ZT86IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNsb3NhYmxlLFxuICB2YWx1ZSxcbiAgb25DbG9zZSxcbiAgZGlzYWJsZWQsXG4gIG9uRGVsZXRlLFxuICBpZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25EZWxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9uQ2xvc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DbG9zZSwgb25EZWxldGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCB9XSl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlQnV0dG9ufSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgPEljb24gc3JjPXtpY29uQ3Jvc3NlZH0gYWx0PVwiQ2xvc2VcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gXCIuL1RhZ1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRhZ09wdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIFRhZ3NJbnB1dCh7XG4gIGNsYXNzTmFtZSxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcInNtYWxsXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoe2lkOiB1dWlkdjQoKSwgbGFiZWw6IHRhZ30pKVxuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKVxuICAgICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0YWdzLCBzZXRUYWdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0FkZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuICAgIGxldCB1cGRhdGVkVGFncyA9IFsuLi50YWdzXTtcblxuICAgIGlmICh0cmltbWVkVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWcgPSB7aWQ6IHV1aWR2NCgpLCBsYWJlbDogdHJpbW1lZFRleHR9XG4gICAgICB1cGRhdGVkVGFncyA9IFsuLi50YWdzLCB0YWddO1xuICAgIH1cblxuICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgIHNldFRleHQoXCJcIik7XG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKVxuICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgfVxuICB9LCBbdGFncywgdGV4dCwgc2V0VGFncywgc2V0VGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT09IFwiRW50ZXJcIiB8fCBlLmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVRhZ0FkZCgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlVGFnQWRkXVxuICApO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBoYW5kbGVUYWdBZGQoKSk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxIaW50IG9wdGlvbnM9e3RhZ09wdGlvbnN9IGFsbG93RW50ZXJGaWxsPXt0cnVlfSBhbGxvd1RhYkZpbGw9e3RydWV9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgICBdKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgIDwvSGludD5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHt0YWdzPy5tYXAoKHtpZCwgbGFiZWx9KSA9PiAoXG4gICAgICAgIDxUYWcga2V5PXtpZH0gdmFsdWU9e2xhYmVsfSBpZD17aWR9IG9uRGVsZXRlPXtoYW5kbGVUYWdEZWxldGV9IGNsb3NhYmxlPlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9UYWc+XG4gICAgICApKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFnSW5wdXR9PntpbnB1dEVsZW1lbnR9PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5leHBvcnQgZGVmYXVsdCBUYWdzSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZ3NJbnB1dCB9IGZyb20gXCIuL1RhZ3NJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1Rvb2x0aXAubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvb2x0aXBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgdGV4dDogc3RyaW5nO1xuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG4gIHNob3dUb29sdGlwOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVG9vbHRpcCh7IGNoaWxkcmVuLCB0ZXh0LCBwbGFjZW1lbnQsIHNob3dUb29sdGlwIH06IFRvb2x0aXBQcm9wcykge1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZTxib29sZWFuPigpO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSBzZXRUaW1lb3V0KCgpID0+IEJvb2xlYW4pO1xuICAgIGlmICh0b29sdGlwSXNWaXNpYmxlKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSksIDUwMDApO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3Rvb2x0aXBJc1Zpc2libGVdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2hvd1Rvb2x0aXAgPyAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRleHQ9e3RleHR9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b29sdGlwXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy50b29sdGlwLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudF0sXG4gICAgICAgICAgICB0eXBlb2YgdG9vbHRpcElzVmlzaWJsZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiB0b29sdGlwSXNWaXNpYmxlXG4gICAgICAgICAgICAgID8gc3R5bGVzLnZpc2libGVcbiAgICAgICAgICAgICAgOiBzdHlsZXMubm90VmlzaWJsZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kSGFuZGxlcn1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9vbHRpcCB9IGZyb20gXCIuL1Rvb2x0aXBcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbGF5b3V0PzogTGF5b3V0O1xuICBhdXRvUGxheT86IGJvb2xlYW47XG4gIGxvb3A/OiBib29sZWFuO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwb3N0ZXI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWRlbyh7XG4gIHNyYyxcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgcG9zdGVyLFxuICBtdXRlZCA9IHRydWUsXG4gIGxvb3AgPSB0cnVlLFxuICBhdXRvUGxheSA9IHRydWUsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJleHBvcnQgZW51bSBUYWJsZUNvbmZpZyB7XG4gIFJPV19IRUlHSFQgPSA0OCxcbiAgSEVBREVSX0hFSUdIVD0zMixcbiAgUEFHRV9TSVpFID0gMTAwLFxuICBJVEVNU19MT0FERUQgPSA1LFxufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4uL2NvbnN0YW50cy9UYWJsZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFibGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ3NJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9EcmF3ZXJcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xLjUgMS41TDEzLjUgMTMuNU0xLjUgMTMuNUwxMy41IDEuNScgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNS40Njg1IDE1LjQ2NjVMMTEuMjAxOCAxMS4xOTk5TTYuOTM1MTYgMTMuMzMzMkMzLjQwMDUzIDEzLjMzMzIgMC41MzUxNTYgMTAuNDY3OCAwLjUzNTE1NiA2LjkzMzJDMC41MzUxNTYgMy4zOTg1OCAzLjQwMDUzIDAuNTMzMjAzIDYuOTM1MTYgMC41MzMyMDNDMTAuNDY5OCAwLjUzMzIwMyAxMy4zMzUyIDMuMzk4NTggMTMuMzM1MiA2LjkzMzJDMTMuMzM1MiAxMC40Njc4IDEwLjQ2OTggMTMuMzMzMiA2LjkzNTE2IDEzLjMzMzJaJyBzdHJva2U9JyUyMzg5ODg5MScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC45MzMxIDQuMjY3NThMNy45OTk3NCAxMS43MzQyTDEuMDY2NDEgNC4yNjc1OCcgc3Ryb2tlPSclMjM4OTg4OTEnIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Mi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92My5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xuXG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG5cbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcblxudmFyIF92NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjUuanNcIikpO1xuXG52YXIgX25pbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmlsLmpzXCIpKTtcblxudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEphdmFTY3JpcHQgTUQ1XG4gKlxuICogTW9kaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5mdW5jdGlvbiBtZDUoYnl0ZXMpIHtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWQ1VG9IZXhFbmNvZGVkQXJyYXkod29yZHNUb01kNShieXRlc1RvV29yZHMoYnl0ZXMpLCBieXRlcy5sZW5ndGggKiA4KSk7XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVUb0hleEVuY29kZWRBcnJheShpbnB1dCkge1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgY29uc3QgbGVuZ3RoMzIgPSBpbnB1dC5sZW5ndGggKiAzMjtcbiAgY29uc3QgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIGNvbnN0IHggPSBpbnB1dFtpID4+IDVdID4+PiBpICUgMzIgJiAweGZmO1xuICAgIGNvbnN0IGhleCA9IHBhcnNlSW50KGhleFRhYi5jaGFyQXQoeCA+Pj4gNCAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZiksIDE2KTtcbiAgICBvdXRwdXQucHVzaChoZXgpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG91dHB1dCBsZW5ndGggd2l0aCBwYWRkaW5nIGFuZCBiaXQgbGVuZ3RoXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGg4KSB7XG4gIHJldHVybiAoaW5wdXRMZW5ndGg4ICsgNjQgPj4+IDkgPDwgNCkgKyAxNCArIDE7XG59XG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHdvcmRzVG9NZDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbZ2V0T3V0cHV0TGVuZ3RoKGxlbikgLSAxXSA9IGxlbjtcbiAgbGV0IGEgPSAxNzMyNTg0MTkzO1xuICBsZXQgYiA9IC0yNzE3MzM4Nzk7XG4gIGxldCBjID0gLTE3MzI1ODQxOTQ7XG4gIGxldCBkID0gMjcxNzMzODc4O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBjb25zdCBvbGRhID0gYTtcbiAgICBjb25zdCBvbGRiID0gYjtcbiAgICBjb25zdCBvbGRjID0gYztcbiAgICBjb25zdCBvbGRkID0gZDtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMyk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG4gICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVBZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gIH1cblxuICByZXR1cm4gW2EsIGIsIGMsIGRdO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgYnl0ZXMgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aDggPSBpbnB1dC5sZW5ndGggKiA4O1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbmd0aDgpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dFtpIC8gOF0gJiAweGZmKSA8PCBpICUgMzI7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cblxuXG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgY29uc3QgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICBjb25zdCBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIG1zdyA8PCAxNiB8IGxzdyAmIDB4ZmZmZjtcbn1cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiBudW0gPDwgY250IHwgbnVtID4+PiAzMiAtIGNudDtcbn1cbi8qXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICovXG5cblxuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVBZGQoYml0Um90YXRlTGVmdChzYWZlQWRkKHNhZmVBZGQoYSwgcSksIHNhZmVBZGQoeCwgdCkpLCBzKSwgYik7XG59XG5cbmZ1bmN0aW9uIG1kNWZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgYyB8IH5iICYgZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgZCB8IGMgJiB+ZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWhoKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIGxldCB2O1xuICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7IC8vIFBhcnNlICMjIyMjIyMjLS4uLi4tLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFyclswXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgwLCA4KSwgMTYpKSA+Pj4gMjQ7XG4gIGFyclsxXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzJdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclszXSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0jIyMjLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoOSwgMTMpLCAxNikpID4+PiA4O1xuICBhcnJbNV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0jIyMjLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzZdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxOCksIDE2KSkgPj4+IDg7XG4gIGFycls3XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tIyMjIy0uLi4uLi4uLi4uLi5cblxuICBhcnJbOF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTksIDIzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzldID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0uLi4uLSMjIyMjIyMjIyMjI1xuICAvLyAoVXNlIFwiL1wiIHRvIGF2b2lkIDMyLWJpdCB0cnVuY2F0aW9uIHdoZW4gYml0LXNoaWZ0aW5nIGhpZ2gtb3JkZXIgYnl0ZXMpXG5cbiAgYXJyWzEwXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMV0gPSB2IC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTJdID0gdiA+Pj4gMjQgJiAweGZmO1xuICBhcnJbMTNdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMTRdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclsxNV0gPSB2ICYgMHhmZjtcbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIF9kZWZhdWx0ID0gcGFyc2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyBBZGFwdGVkIGZyb20gQ2hyaXMgVmVuZXNzJyBTSEExIGNvZGUgYXRcbi8vIGh0dHA6Ly93d3cubW92YWJsZS10eXBlLmNvLnVrL3NjcmlwdHMvc2hhMS5odG1sXG5mdW5jdGlvbiBmKHMsIHgsIHksIHopIHtcbiAgc3dpdGNoIChzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuICB9XG59XG5cbmZ1bmN0aW9uIFJPVEwoeCwgbikge1xuICByZXR1cm4geCA8PCBuIHwgeCA+Pj4gMzIgLSBuO1xufVxuXG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIGNvbnN0IEsgPSBbMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNl07XG4gIGNvbnN0IEggPSBbMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMF07XG5cbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXMucHVzaChtc2cuY2hhckNvZGVBdChpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIC8vIENvbnZlcnQgQXJyYXktbGlrZSB0byBBcnJheVxuICAgIGJ5dGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYnl0ZXMpO1xuICB9XG5cbiAgYnl0ZXMucHVzaCgweDgwKTtcbiAgY29uc3QgbCA9IGJ5dGVzLmxlbmd0aCAvIDQgKyAyO1xuICBjb25zdCBOID0gTWF0aC5jZWlsKGwgLyAxNik7XG4gIGNvbnN0IE0gPSBuZXcgQXJyYXkoTik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tpICogNjQgKyBqICogNF0gPDwgMjQgfCBieXRlc1tpICogNjQgKyBqICogNCArIDFdIDw8IDE2IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAzXTtcbiAgICB9XG5cbiAgICBNW2ldID0gYXJyO1xuICB9XG5cbiAgTVtOIC0gMV1bMTRdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAvIE1hdGgucG93KDIsIDMyKTtcbiAgTVtOIC0gMV1bMTRdID0gTWF0aC5mbG9vcihNW04gLSAxXVsxNF0pO1xuICBNW04gLSAxXVsxNV0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4ICYgMHhmZmZmZmZmZjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCAxNjsgKyt0KSB7XG4gICAgICBXW3RdID0gTVtpXVt0XTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB0ID0gMTY7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBXW3RdID0gUk9UTChXW3QgLSAzXSBeIFdbdCAtIDhdIF4gV1t0IC0gMTRdIF4gV1t0IC0gMTZdLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IEhbMF07XG4gICAgbGV0IGIgPSBIWzFdO1xuICAgIGxldCBjID0gSFsyXTtcbiAgICBsZXQgZCA9IEhbM107XG4gICAgbGV0IGUgPSBIWzRdO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5mbG9vcih0IC8gMjApO1xuICAgICAgY29uc3QgVCA9IFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW3RdID4+PiAwO1xuICAgICAgZSA9IGQ7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBST1RMKGIsIDMwKSA+Pj4gMDtcbiAgICAgIGIgPSBhO1xuICAgICAgYSA9IFQ7XG4gICAgfVxuXG4gICAgSFswXSA9IEhbMF0gKyBhID4+PiAwO1xuICAgIEhbMV0gPSBIWzFdICsgYiA+Pj4gMDtcbiAgICBIWzJdID0gSFsyXSArIGMgPj4+IDA7XG4gICAgSFszXSA9IEhbM10gKyBkID4+PiAwO1xuICAgIEhbNF0gPSBIWzRdICsgZSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiBbSFswXSA+PiAyNCAmIDB4ZmYsIEhbMF0gPj4gMTYgJiAweGZmLCBIWzBdID4+IDggJiAweGZmLCBIWzBdICYgMHhmZiwgSFsxXSA+PiAyNCAmIDB4ZmYsIEhbMV0gPj4gMTYgJiAweGZmLCBIWzFdID4+IDggJiAweGZmLCBIWzFdICYgMHhmZiwgSFsyXSA+PiAyNCAmIDB4ZmYsIEhbMl0gPj4gMTYgJiAweGZmLCBIWzJdID4+IDggJiAweGZmLCBIWzJdICYgMHhmZiwgSFszXSA+PiAyNCAmIDB4ZmYsIEhbM10gPj4gMTYgJiAweGZmLCBIWzNdID4+IDggJiAweGZmLCBIWzNdICYgMHhmZiwgSFs0XSA+PiAyNCAmIDB4ZmYsIEhbNF0gPj4gMTYgJiAweGZmLCBIWzRdID4+IDggJiAweGZmLCBIWzRdICYgMHhmZl07XG59XG5cbnZhciBfZGVmYXVsdCA9IHNoYTE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2MTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfbWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21kNS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHYzID0gKDAsIF92LmRlZmF1bHQpKCd2MycsIDB4MzAsIF9tZC5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHYzO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlVSTCA9IGV4cG9ydHMuRE5TID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gdjM1O1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuRE5TID0gRE5TO1xuY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLlVSTCA9IFVSTDtcblxuZnVuY3Rpb24gdjM1KG5hbWUsIHZlcnNpb24sIGhhc2hmdW5jKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHZhciBfbmFtZXNwYWNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lc3BhY2UgPSAoMCwgX3BhcnNlLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG4gIH0gLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG5cblxuICB0cnkge1xuICAgIGdlbmVyYXRlVVVJRC5uYW1lID0gbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGVycikge30gLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcblxuXG4gIGdlbmVyYXRlVVVJRC5ETlMgPSBETlM7XG4gIGdlbmVyYXRlVVVJRC5VUkwgPSBVUkw7XG4gIHJldHVybiBnZW5lcmF0ZVVVSUQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZlcnNpb24odXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2ZXJzaW9uO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInRlc3QiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiZm4iLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicHJvcHMiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsInUxIiwiZjEiLCJ1MiIsImYyIiwibWVyZ2VDb25maWdzIiwiY2FjaGVDb250ZXh0UmVmIiwiY2FjaGVDb250ZXh0IiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwiaGFzT3duUHJvcGVydHkiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInMiLCJhcmd1bWVudHMiLCJwIiwicHJvdG90eXBlIiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJlbnVtZXJhYmxlIiwiX19zZXRNb2R1bGVEZWZhdWx0IiwiX19pbXBvcnRTdGFyIiwibW9kIiwiX19lc01vZHVsZSIsImV4cG9ydHMiLCJIaW50IiwicmVhY3RfMSIsInV0aWxzXzEiLCJfYiIsImNoaWxkIiwiZGVmYXVsdCIsIkNoaWxkcmVuIiwib25seSIsImNoaWxkcmVuIiwidG9Mb3dlckNhc2UiLCJkaXNhYmxlSGludCIsImFsbG93VGFiRmlsbCIsImFsbG93RW50ZXJGaWxsIiwib25GaWxsIiwib25IaW50IiwidmFsdWVNb2RpZmllciIsImNoaWxkUHJvcHMiLCJtYWluSW5wdXRSZWYiLCJoaW50V3JhcHBlclJlZiIsImhpbnRSZWYiLCJ1bk1vZGlmaWVkSW5wdXRUZXh0Iiwic2V0VW5tb2RpZmllZElucHV0VGV4dCIsIl9kIiwidGV4dCIsInNldFRleHQiLCJfZSIsImhpbnQiLCJzZXRIaW50IiwiX2YiLCJtYXRjaCIsInNldE1hdGNoIiwiX2ciLCJjaGFuZ2VFdmVudCIsInNldENoYW5nZUV2ZW50IiwiZHVwbGljYXRlIiwiZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImlucHV0U3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGVIaW50Iiwic2V0SGludFRleHRBbmRJZCIsImZpbHRlciIsIngiLCJzdGFydHNXaXRoIiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIkluZmluaXRlTG9hZGVyIiwiX1B1cmVDb21wb25lbnQiLCJfdGVtcCIsImluc3RhbmNlIiwiY2xhc3NDYWxsQ2hlY2siLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiZGVmYXVsdFByb3BzIiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZQcm9wcyIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJuYW1lIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJmb290ZXIiLCJvcGVuIiwiZHJhd2VyIiwiZHJhd2VyQ29udGVudCIsImRyYXdlckhlYWRlckNvbnRlbnQiLCJkcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50IiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uIiwiSWNvbiIsInNyYyIsImRyYXdlck1haW4iLCJkcmF3ZXJGb290ZXIiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiaXRlbUJvZHlSZW5kZXJlciIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInNldElzT3BlbiIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJidXR0b24iLCJDbGlja2FibGUiLCJNZW51IiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsIkRyb3Bkb3duIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsImhhc092ZXJsYXkiLCJvdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwibGlzdCIsImFjdGl2ZSIsImxpc3RWaWV3SXRlbSIsIkJ1dHRvbkxpbmsiLCJhcyIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsIlBsYWNlbWVudENvbnRleHQiLCJFcnJvciIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibWVudSIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZXZlbnREaWdpdEtleXMiLCJOdW1wYWQiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsIk51bXBhZEtleXMiLCJmaWxsIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwic2hvd0V4cGFuZGVkR3JvdXAiLCJTZWxlY3RDb250ZXh0IiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwiaXNDaGVja2VkIiwiY2hlY2tib3hDb250YWluZXIiLCJDaGVja2JveCIsImlzT3B0aW9uIiwib25GaWx0ZXIiLCJzZWxlY3RBbGxDaGVja2VkIiwidG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCIsInNlYXJjaEtleXdvcmQiLCJzZWxlY3RBbGwiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJoYXNHcm91cE9wdGlvbiIsImZpbHRlck9wdGlvbnMiLCJrZXl3b3JkIiwidHJpbSIsImZpbHRlcmVkT3B0aW9ucyIsInJlZHVjZSIsImZpbHRlcmVkIiwiZ3JvdXBPcHRpb24iLCJmaWx0ZXJlZEdyb3VwT3B0aW9ucyIsImZpbHRlcmVkT3B0aW9uc0NvdW50IiwibmV4dE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uc0NvdW50Iiwic2VsZWN0ZWRPcHRpb24iLCJmaWx0ZXJlZE9wdGlvbiIsImhhbmRsZVNlbGVjdEFsbENsaWNrIiwib3B0aW9uc1RvU2VsZWN0IiwiZmxhdCIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwibm9PcHRpb25zIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsInNjcm9sbE1lbnVJbnRvVmlldyIsInNob3dTZWxlY3RlZEFzVGFncyIsInNob3dTZWFyY2giLCJvcGVuZWQiLCJ0b2dnbGVPcGVuZWQiLCJjb250ZW50UmVmIiwib25SZXNpemUiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJSTyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYW5kbGVPcGVuU2VsZWN0IiwidmFsdWVzIiwiU2VsZWN0Q29udGV4dFByb3ZpZGVyIiwiU2VsZWN0b3IiLCJpc0Ryb3Bkb3duT3BlbmVkIiwiaWNvbkJ1dHRvbiIsInNlYXJjaENvbnRhaW5lciIsIlNlYXJjaCIsIk9wdGlvbkxpc3QiLCJpbml0aWFsU3RhdGUiLCJ1cGRhdGVkU2VsZWN0ZWRPcHRpb25zIiwiY29udGV4dFZhbHVlIiwiaGFuZGxlVGFnQ2xpY2siLCJoYW5kbGVUYWdDbG9zZSIsInBsYWNlaG9sZGVyVG9TaG93Iiwic2hvd0FzVGFncyIsInRhZ1dyYXBwZXIiLCJUYWciLCJjbG9zYWJsZSIsInNob3dBc1RleHQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsIm9uUm93Q2xpY2siLCJoYXNBcnJvdyIsIm9uTG9hZE1vcmUiLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwiVGFibGVDb25maWciLCJQQUdFX1NJWkUiLCJ0YWJsZUhlaWdodCIsIlJPV19IRUlHSFQiLCJoZWFkZXJIZWlnaHQiLCJIRUFERVJfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsInJvdyIsImhhbmRsZUxpc3RTY3JvbGwiLCJsb2FkTW9yZSIsIklURU1TX0xPQURFRCIsInBsYWNlaG9sZGVyQ29udGFpbmVyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiYm9yZGVyQm90dG9tIiwiY29sdW1uIiwib25Tb3J0Iiwic29ydGFibGUiLCJzb3J0ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwidGl0bGUiLCJTb3J0T3JkZXIiLCJERVNDIiwic29ydE9yZGVyIiwic2V0U29ydE9yZGVyIiwiaGFuZGxlU29ydENvbHVtbiIsIm5ld1NvcnRPcmRlciIsIkFTQyIsImNlbGxQcm9wcyIsInRhYmxlSGVhZGVyQ2VsbCIsInNvcnRJY29uVmlzaWJsZSIsImhhbmRsZVJvd0NsaWNrIiwiZGF0YUluZGV4Iiwib25EZWxldGUiLCJjbG9zZUJ1dHRvbiIsInBhdHRlcm4iLCJpbnB1dE1vZGUiLCJ0YWdPcHRpb25zIiwidGFncyIsInNldFRhZ3MiLCJ0YWdzQXJyIiwidGFnIiwiaGFuZGxlVGV4dENoYW5nZSIsImhhbmRsZVRhZ0RlbGV0ZSIsInVwZGF0ZWRUYWdzIiwiaGFuZGxlVGFnQWRkIiwidHJpbW1lZFRleHQiLCJoYW5kbGVLZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidGFnSW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwic2hvd1Rvb2x0aXAiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsIm9uVG91Y2hFbmRIYW5kbGVyIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0b29sdGlwIiwidmlzaWJsZSIsIm5vdFZpc2libGUiLCJvblRvdWNoRW5kIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaXMiLCJsIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJjIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJfbmlsIiwiX3BhcnNlIiwiX3N0cmluZ2lmeSIsIl92IiwiX3YyIiwiX3YzIiwiX3Y0IiwiX3ZhbGlkYXRlIiwiX3ZlcnNpb24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsImxzdyIsIm1kNWNtbiIsInEiLCJudW0iLCJjbnQiLCJtZDVmZiIsIm1kNWdnIiwibWQ1aGgiLCJtZDVpaSIsImJ5dGVzIiwibXNnIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJVaW50OEFycmF5Iiwib3V0cHV0IiwibGVuZ3RoMzIiLCJoZXhUYWIiLCJoZXgiLCJjaGFyQXQiLCJtZDVUb0hleEVuY29kZWRBcnJheSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1IiwibGVuZ3RoOCIsIlVpbnQzMkFycmF5IiwiYnl0ZXNUb1dvcmRzIiwiX2RlZmF1bHQiLCJyYW5kb21VVUlEIiwiY3J5cHRvIiwidXVpZCIsImFyciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwieiIsIlJPVEwiLCJLIiwiSCIsIk4iLCJNIiwiaiIsInBvdyIsIlciLCJUIiwidW5zYWZlU3RyaW5naWZ5IiwiYnl0ZVRvSGV4IiwiX3JuZyIsIl9ub2RlSWQiLCJfY2xvY2tzZXEiLCJfbGFzdE1TZWNzIiwiX2xhc3ROU2VjcyIsImJ1ZiIsIm5vZGUiLCJjbG9ja3NlcSIsInNlZWRCeXRlcyIsInJuZyIsIm1zZWNzIiwibnNlY3MiLCJkdCIsInRsIiwidG1oIiwiX21kIiwiVVJMIiwiRE5TIiwidmVyc2lvbiIsImhhc2hmdW5jIiwiZ2VuZXJhdGVVVUlEIiwibmFtZXNwYWNlIiwiX25hbWVzcGFjZSIsInN0ciIsInN0cmluZ1RvQnl0ZXMiLCJfbmF0aXZlIiwicm5kcyIsIl9zaGEiLCJfcmVnZXgiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJwcm9wIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==