@touchtech/baselayer-ui 8.3.4-alpha.0 → 8.3.4-alpha.1
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.
- package/dist/components/Drawer/Drawer.d.ts +2 -1
- package/dist/index.js +2 -2
- package/dist/styles.css +24 -3
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
(()=>{var e={5348:(e,t,n)=>{"use strict";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 s=new WeakMap,c={},d={},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=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,_(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},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],E={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},x={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),N=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 T=0;const z=()=>++T,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 c=!1!==a.revalidate,d=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]=N(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=s.get(t),b=v[o],y=()=>c&&(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,E=C._c,x=h(E)?j:E;if(P&&(u=m(u)?u(x):u,l({data:u,_c:x})),m(M))try{M=M(x)}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&&d(w)&&(i=!0,M=x,l({data:M,_c:p}))}i&&(w||(m(i)&&(M=i(M,x)),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(!s.has(e)){const n=_(x,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)},c=()=>{if(!s.has(e)&&(s.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(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.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:{}},E),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=N(t)[0],[,,,o]=s.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 s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(K.Provider,_(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";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){"use strict";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,s=e.allowTabFill,c=e.allowEnterFill,d=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(),E=j[0],x=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&&N(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),x(n),f&&f(n)},L=function(){if(""!==P&&k){var e=b+P;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(E),y(e)}},N=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)},T=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&&s&&"Tab"===e.key&&""!==P||t&&c&&"Enter"===e.key&&""!==P)&&(e.preventDefault(),L()),v.onKeyDown&&v.onKeyDown(e)},ref:T&&"string"!=typeof T?u.mergeRefs(T,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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>E});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},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},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],s="*"===i?"*":_(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].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,c))}))}}))};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,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[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=d["*"],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=s[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 c){for(var o in c[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[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 d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[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=[],s="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&&(s=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&&(s=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 d||(d[e]=[]),d[e].push({keyup:g,keydown:b,scope:s,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 c)for(var r in c[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()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[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(d).forEach((function(n){var r=d[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(d).forEach((function(e){return delete d[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:s};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 E(){return M.isPressed}M.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return x(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,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,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)?!c:!!(I(e)&&!x(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)=>{"use strict";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,s=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 s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{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)=>{"use strict";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:()=>x,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 s=n(6689);function c(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 d="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=d(),r={id:requestAnimationFrame((function o(){d()-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,c=e.getColumnWidth,d=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,E=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,s=r._getItemStyleCache(j&&i,j&&l,j&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=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:c(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,s=a;if("rtl"===t)switch(_()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,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),E(e),null};var x=t.prototype;return x.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)},x.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,s=a.width,c=this.state,f=c.scrollLeft,p=c.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=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?_: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})},x.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()},x.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()},x.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},x.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,c=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(),E=j[0],x=j[1],I=[];if(o>0&&g)for(var k=E;k<=x;k++)for(var D=P;D<=C;D++)I.push((0,s.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=d(this.props,this._instanceProps),L=v(this.props,this._instanceProps);return(0,s.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,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:M?"none":void 0,width:L}}))},x._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],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,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)}},x._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},x._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,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=S(this.props,s,this._instanceProps),f=P(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.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 s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"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)},E=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),s="column"===e?M(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},x=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,s=t;s<o-1&&u<l;)s++,u+=S("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return E("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return E("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,s=t;s<o-1&&u<l;)s++,u+=S("row",e,s,r).size;return s},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,c=e.getOffsetForIndexAndAlignment,d=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,s=r._getItemStyleCache(g&&i,g&&u,g&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"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(c(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,c=e.innerTagName,d=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(d>0)for(var E=P;E<=C;E++)j.push((0,s.createElement)(t,{data:f,key:v(E,f),index:E,isScrolling:b?O:void 0,style:this._getItemStyle(E)}));var x=i(this.props,this._instanceProps);return(0,s.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,s.createElement)(u||c||"div",{children:j,ref:l,style:{height:w?"100%":x,pointerEvents:O?"none":void 0,width:w?x:"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=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.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 s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},N=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},T=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:T,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=L(e,t,o),f=T(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"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?N(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 N(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,s="horizontal"===o||"horizontal"===l?u:a,c=L(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)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,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},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,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+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,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-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=c(e,F),o=t.style,a=c(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";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,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,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,E=e.autoFocus,x=void 0!==E&&E,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=e.size,N=void 0===L?"medium":L,T=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[N],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:d,autoFocus:x,type:T,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){"use strict";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){"use strict";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){"use strict";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){"use strict";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,s=e.className,c=e.size,d=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,E=e.disabled,x=void 0!==E&&E,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:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],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]=x,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),s])},L),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";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){"use strict";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)),s=n(4115),c=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,d=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(s.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)([c.default.checkbox,d,c.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){"use strict";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){"use strict";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,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},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){"use strict";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){"use strict";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,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";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){"use strict";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,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,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:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),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){"use strict";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){"use strict";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,s=e.open,c=e.children,d=e.className,f=e.style,p=e.noCloseIcon,v=void 0!==p&&p,h=e.onClose;return a.default.createElement("div",{className:(0,o.default)([u.default.drawer,(t={},t[u.default.open]=s,t),d]),style:f},a.default.createElement("div",{className:u.default.drawerContent},a.default.createElement("div",{className:u.default.drawerHeaderContent},!v&&a.default.createElement("div",{className:u.default.drawerHeaderCloseIconContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:h},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},c),!!r&&a.default.createElement("div",{className:u.default.drawerFooter},r)))}},3212:function(e,t,n){"use strict";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){"use strict";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){"use strict";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),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,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(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:c,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";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){"use strict";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,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,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,E=void 0!==j&&j,x=e.size,I=void 0===x?"medium":x;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]=E,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:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";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){"use strict";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,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.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[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";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){"use strict";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,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";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){"use strict";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,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,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,E=void 0===j?"medium":j,x=e.type,I=void 0===x?"button":x;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[E],(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:s,alt:c,size:E,inverted:g}),u)}},2847:function(e,t,n){"use strict";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){"use strict";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),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=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,E=e.size,x=void 0===E?"medium":E,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)([s.default.container,s.default[x],(t={},t[s.default.inverted]=h,t[s.default.rounded]=M,t[s.default.noShadow]=_,t[s.default.noBorder]=b,t[s.default.disabled]=j,t[s.default.transparent]=O,t[s.default.topOffset]=M&&P.includes("top"),t[s.default.rightOffset]=M&&P.includes("right"),t[s.default.bottomOffset]=M&&P.includes("bottom"),t[s.default.leftOffset]=M&&P.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:x,inverted:h}),c)}},5860:function(e,t,n){"use strict";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){"use strict";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,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,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[d]]),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:s,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){"use strict";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){"use strict";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){"use strict";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){"use strict";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){"use strict";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,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,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:s,inverted:r,transparent:d,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";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),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,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)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";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){"use strict";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)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.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,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";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)),s=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,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";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,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";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,s=e.className,c=e.noPadding,d=void 0!==c&&c,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,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";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){"use strict";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),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,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,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:c.default.modalButton},i))}},1391:function(e,t,n){"use strict";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){"use strict";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)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["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(s(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(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(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(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";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){"use strict";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,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;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]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(4685)),c=n(5348),d=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,c.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:s.default.header,onClick:_},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(8054)),c=n(4616),d=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(d.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)([s.default.container,(t={},t[s.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:s.default.label},n))}},3781:function(e,t,n){"use strict";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){"use strict";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 s=n(5348),c=i(n(6689)),d=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,s.useToggle)(!1),u=i[0],m=i[1],_=(0,c.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,c.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,c.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,c.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]),E=(0,c.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,c.useEffect)((function(){j===C?m(!0):u&&m(!1)}),[j,C,u,m]),c.default.createElement("div",{className:h.default.container},y&&g&&!!P.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:E},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!j&&j!==C,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),P.length?P.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:e.value,data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(2396)),c=n(2568),d=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)(c.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)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(3790)),c=i(n(7917)),d=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,E=void 0===j?"medium":j,x=e.showSelectedAsTags,I=void 0!==x&&x,k=e.showSearch,D=void 0!==k&&k,R=e.width,L=e.onChange,N=e.onFilter,T=(0,d.useToggle)(!1),z=T[0],H=T[1],A=(0,d.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)([c.default.container,(t={},t[c.default.disabled]=i,t),c.default[E],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([c.default.header,(n={},n[c.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)([c.default.iconButton,(r={},r[c.default.expanded]=z,r)]),src:s.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:c.default.content,ref:B},0===y.length?l.default.createElement("div",{className:c.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:c.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:N,onChange:W}))))))}},2568:function(e,t,n){"use strict";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),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(s.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(s.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:d,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[d,_,g,w,y,O]);return l.default.createElement(c.Provider,{value:M},t)}},237:function(e,t,n){"use strict";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)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.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,d.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(c.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){"use strict";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){"use strict";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){"use strict";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)),s=l(n(7659)),c=n(5022),d=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,E=e.isHeaderSticky,x=void 0!==E&&E,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),L=R[0],N=R[1],T=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[s.id])}))}),[t,C,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;N(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,s.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(d.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},T)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:x,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){"use strict";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,s=e.isHeaderSticky,c=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]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";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)),s=i(n(6689)),c=n(4958),d=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,s.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,s.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 s.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?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";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)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";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){"use strict";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){"use strict";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)),s=i(n(7451)),c=n(4958),d=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)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";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){"use strict";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)),s=l(n(7659)),c=n(1982),d=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.withScroll,j=void 0!==C&&C,E=e.inputMode,x=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],L=D[1],N=(0,u.useState)(),T=N[0],z=N[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var H=(0,u.useCallback)((function(e){var t=e.target.value;L(t)}),[L]),A=(0,u.useCallback)((function(e){var t=T.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[T,z]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],T,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],T,!0),[n],!1)}if(z(t),L(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[T,R,z,L]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){return B()})),W=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:_,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=P,t)]),onChange:H,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:M,inputMode:E,disabled:x}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=x,n[v.default.scrollable]=j,n),r]),ref:V},null==T?void 0:T.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:A,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},W))}},2819:function(e,t,n){"use strict";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){"use strict";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)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=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)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:d,autoFocus:y,inputMode:M});return n?l.default.createElement(s.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){"use strict";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){"use strict";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){"use strict";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){"use strict";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){"use strict";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(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=(0,l.useState)({left:0,top:0}),v=p[0],h=p[1],m=(0,l.useState)(!1),_=m[0],g=m[1],b=(0,l.useRef)(null),y=(0,l.useRef)(null),O=(0,l.useCallback)((function(){if(y.current){var e=y.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);h(t),g(!0)}}),[r,a]),w=(0,l.useCallback)((function(){O()}),[O]),M=(0,l.useCallback)((function(){g(!1)}),[]),S=(0,l.useCallback)((function(){b.current&&(clearTimeout(b.current),b.current=null),O()}),[O]),P=(0,l.useCallback)((function(){b.current=setTimeout((function(){g(!1),b.current=null}),5e3)}),[]);return(0,l.useEffect)((function(){return function(){return b.current&&clearTimeout(b.current)}}),[]),(0,l.useEffect)((function(){if(y.current&&"absolute"===a){var e=(0,s.default)(y.current);if(e){var t=function(){return g(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:S,onMouseEnter:w,onMouseLeave:M,onTouchEnd:P,ref:y},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&_?l.default.createElement("div",{style:v,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";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){"use strict";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,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,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:c,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:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";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)=>{"use strict";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){"use strict";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){"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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 s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="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,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";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 d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.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 s.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)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";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,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(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)=>{"use strict";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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>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)=>{"use strict";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)=>{"use strict";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,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=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:s+1;const h=p-u+(v-s)/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,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const _=p/4294967296*1e4&268435455;c[r++]=_>>>8&255,c[r++]=255&_,c[r++]=_>>>24&15|16,c[r++]=_>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";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)=>{"use strict";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 s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},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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Q3hCLElBQUkrRixFQUFTL0YsR0FBVUEsRUFBT3A5QixXQUM3QixJQUFPbzlCLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMkYsRUFBb0IvRixFQUFFbUcsRUFBUSxDQUFFenZDLEVBQUd5dkMsSUFDNUJBLENBQU0sRUNMZEosRUFBb0IvRixFQUFJLENBQUMvOEIsRUFBU21qQyxLQUNqQyxJQUFJLElBQUlsdkMsS0FBT2t2QyxFQUNYTCxFQUFvQi96QyxFQUFFbzBDLEVBQVlsdkMsS0FBUzZ1QyxFQUFvQi96QyxFQUFFaVIsRUFBUy9MLElBQzVFcEIsT0FBT2tMLGVBQWVpQyxFQUFTL0wsRUFBSyxDQUFFMEwsWUFBWSxFQUFNeEwsSUFBS2d2QyxFQUFXbHZDLElBRTFFLEVDTkQ2dUMsRUFBb0IvekMsRUFBSSxDQUFDK1AsRUFBS2twQixJQUFVbjFCLE9BQU8yTSxVQUFVTixlQUFlM1AsS0FBS3VQLEVBQUtrcEIsR0NDbEY4YSxFQUFvQjF6QyxFQUFLNFEsSUFDSCxvQkFBWDlRLFFBQTBCQSxPQUFPazBDLGFBQzFDdndDLE9BQU9rTCxlQUFlaUMsRUFBUzlRLE9BQU9rMEMsWUFBYSxDQUFFeHpDLE1BQU8sV0FFN0RpRCxPQUFPa0wsZUFBZWlDLEVBQVMsYUFBYyxDQUFFcFEsT0FBTyxHQUFPLEVDRjlELElBQUl5ekMsRUFBc0JQLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIubW9kdWxlLmNzcz85MjlkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/N2EwZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz9kNTU3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/MDk5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzFjYWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24ubW9kdWxlLmNzcz81OTZmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz8yYzQ0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz9mMTBlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz80NjlmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcubW9kdWxlLmNzcz8zY2Q0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/ZGZmYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzE5MGEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz9jZDM0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzP2FhY2UiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzP2I1ZGIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzhhODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLm1vZHVsZS5jc3M/NjViZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS5tb2R1bGUuY3NzPzM3MTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vR3JvdXBPcHRpb24ubW9kdWxlLmNzcz80ZGI0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9PcHRpb24ubW9kdWxlLmNzcz9iNjc0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC5tb2R1bGUuY3NzPzQ5YWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL1NlYXJjaC5tb2R1bGUuY3NzP2VkNDMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0Lm1vZHVsZS5jc3M/MWU3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci5tb2R1bGUuY3NzPzlhYmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS5tb2R1bGUuY3NzPzkzYTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci5tb2R1bGUuY3NzPzcwZGYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzcz8xZDBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cubW9kdWxlLmNzcz9iOTU1Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLm1vZHVsZS5jc3M/ZGE1YSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9UYWcubW9kdWxlLmNzcz84ZjM2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L1RhZ3NJbnB1dC5tb2R1bGUuY3NzPzhmZDEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/M2YxZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/NTg4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3M/ZWM4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC5tb2R1bGUuY3NzPzA2YWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2VkYTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlci9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3Njcm9sbHBhcmVudC9zY3JvbGxwYXJlbnQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY3Jvc3NlZC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiwgY3JlYXRlRWxlbWVudCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBJTklUSUFMX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdyaXRpbmcgdG8gdGhlIHN0b3JlLCB3ZSBrZWVwIHRoZSB2YWx1ZSBpbiB0aGUgaW5pdGlhbCBjYWNoZVxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3Mgbm90IHRoZXJlIHlldC5cbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gSU5JVElBTF9DQUNIRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DQUNIRVtrZXldID0gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdLFxuICAgICAgICAvLyBHZXQgc2VydmVyIGNhY2hlIHNuYXBzaG90XG4gICAgICAgICgpPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQgb24gdGhlIGNsaWVudCwgd2UgcmV0dXJuIHRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIElOSVRJQUxfQ0FDSEUpIHJldHVybiBJTklUSUFMX0NBQ0hFW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGRvbmUgYW55IGNsaWVudC1zaWRlIHVwZGF0ZXMsIHdlIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRTtcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcbmNvbnN0IEVSUk9SX1JFVkFMSURBVEVfRVZFTlQgPSAzO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5ULFxuICBFUlJPUl9SRVZBTElEQVRFX0VWRU5UOiBFUlJPUl9SRVZBTElEQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGFuZCB1c2VTV1JTdWJzY3JpcHRpb24ga2V5cy5cbiAgICAgICAgICAgICEvXlxcJChpbmZ8c3ViKVxcJC8udGVzdChrZXkpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHN1YnMpe1xuICAgICAgICAgICAgICAgICAgICBmbih2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBpbml0aWFsaXplIHRoZSBjYWNoZSBvbmx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBjYWNoZUNvbnRleHRSZWYgPSB1c2VSZWYoVU5ERUZJTkVEKTtcbiAgICBpZiAocHJvdmlkZXIgJiYgIWNhY2hlQ29udGV4dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNhY2hlQ29udGV4dFJlZi5jdXJyZW50ID0gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVDb250ZXh0ID0gY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQ7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgcmV2YWxpZGF0ZUV2ZW50cywgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGdldENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShjYWNoZWREYXRhKTtcbiAgICAgICAgY29uc3Qgc2VydmVyU25hcHNob3QgPSBjYWNoZWREYXRhID09PSBpbml0aWFsRGF0YSA/IGNsaWVudFNuYXBzaG90IDogZ2V0U2VsZWN0ZWRDYWNoZShpbml0aWFsRGF0YSk7XG4gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdXNlIGRlZXBcbiAgICAgICAgLy8gY29tcGFyaXNvbiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIG5ldyBvbmUuXG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGNsaWVudFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwobmV3U25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBuZXdTbmFwc2hvdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKT0+c2VydmVyU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgKF9vcHRzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdG9yc1swXShyZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQsIF9vcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlLCBvcHRzID0ge30pPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZShvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlclwiOlwiVTNkQ3pxVHl5bnl6Qm4ybUZrbVdcIixcIm9wZW5cIjpcIkhpQ2FpNUFkc2N4OFpiR2xsNFNSXCIsXCJkcmF3ZXJDb250ZW50XCI6XCJpSWdCQXNvUEVqRk9rSDhVbktWWFwiLFwiZHJhd2VySGVhZGVyQ29udGVudFwiOlwiVkM4anZWaEpSY2Z0cWxhY0dBR0lcIixcImRyYXdlckhlYWRlckNsb3NlSWNvbkNvbnRlbnRcIjpcIkpSNUdJRlFHQV9TWjg3U2NVbEU5XCIsXCJkcmF3ZXJIZWFkZXJDbG9zZUljb25cIjpcIkI2UmMzM3BRelhCT3ViZTBqZFo5XCIsXCJkcmF3ZXJNYWluXCI6XCJNeWlOMVVOamJPVGd3SjFUWG1FWVwiLFwiZHJhd2VyRm9vdGVyXCI6XCJDZWFfbnRHTDU5NUdkbmpzMURxVVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwickJhZlhrb1RDbjJBaDZ4WVlteGZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiS1drN29aOHR2UGZRaWNnUVlsVmFcIixcImxhYmVsXCI6XCJlNnpyeDdVT1BfQlNvTU0zR3JqUVwiLFwic21hbGxcIjpcImloU25EUWcweWd4Y1ZMSXlTSmtNXCIsXCJsYXJnZVwiOlwiRnB3aGJEN0hYeF91RlQzbDAxd2JcIixcInhsYXJnZVwiOlwiWVZkczR1X0RmV1NHMXIwU0FHblNcIixcImludmVydGVkXCI6XCJDS3lub0xoaUxkNkt6QVlpNU50R1wiLFwicm91bmRlZFwiOlwidjcybXpKdW1GU2lET09FMU1uWEhcIixcIm5vU2hhZG93XCI6XCJFb2V3SkVEYkdkdGVKX05SZlM1RlwiLFwibm9Cb3JkZXJcIjpcImNiN2w0eHZjTm5ITmxRWm1MamtiXCIsXCJub1BhZGRpbmdcIjpcInZjT3dEWXVHRjJldG9QZnlGRFg1XCIsXCJ0cmFuc3BhcmVudFwiOlwibDA4a2hhWElVT2NydUJGSHdzN1hcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkkweHZKYkIwTE5UMFMxNWpUTVdXXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiWDZmcVVjVkgxQmxDUkpCaWlKaWlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImoxbWZpWUVHb2xUUm1iQm1HS2xRXCIsXCJyb3dcIjpcIkVHYUt2bXFNMlNhd2lGclc4Q3R1XCIsXCJjb2x1bW5cIjpcIk5NaTBNVDFiN3JwMVpqeWU4VVZBXCIsXCJmaXhlZFwiOlwiZzBqM2trUXJfQWpDS0ZkOTRTMXNcIixcInBsYWluXCI6XCJGcjFxN1duRjFuRm5uYmZncGFSelwiLFwidHJhbnNwYXJlbnRcIjpcInVkUlplOUgwYktVSFhqT3dHMUZuXCIsXCJ0b3BcIjpcInVZaUt3NlZ2REVraGpaSHp2bzdlXCIsXCJ0b3BFZGdlXCI6XCJ0UmJFY1lqRTNLbmNzTndUYnZWTVwiLFwidG9wT25FZGdlXCI6XCJMR3VuRzM3WDFfSFJldXczcXp1YVwiLFwicmlnaHRcIjpcImx3MjdyR1ZsbzM0YXhDeHczUUhpXCIsXCJyaWdodEVkZ2VcIjpcIlBaSXR2bGVGSUlqMEp4Mk1pa1JFXCIsXCJyaWdodE9uRWRnZVwiOlwiS051R2FEUHE5cm1YZmdtTzNwY2JcIixcImJvdHRvbVwiOlwiZG4xdWgxdGFzR3hER3FtVTE4SE5cIixcImJvdHRvbUVkZ2VcIjpcImVEMFVDckJScHNSVFBQd3dJb1ZnXCIsXCJib3R0b21PbkVkZ2VcIjpcIklyaEg1Z2Z5R3NRNmtkY1A5NFJRXCIsXCJsZWZ0XCI6XCJENWZHSG5BR0NNUjRMdGI5eTRIclwiLFwibGVmdEVkZ2VcIjpcIl9BdEFkMnRyN3Qxa1h1c1JiWFN6XCIsXCJsZWZ0T25FZGdlXCI6XCJfOEM5ZGQwWF9KWFk0dUh6dzVOalwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiUURrczhvdnQ5UlZjRldlRUI4d2JcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJDVnVRUkU2NTJHSDJWSm44ek9Uc1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcImZwX0JMSjJGVzRPeXliMGJIaUQ0XCIsXCJzbWFsbFwiOlwienNWRE5mTlJrb3MwUTV1djlGUjlcIixcIm1lZGl1bVwiOlwiZVNsaWwzZXZQdFBCc3dXRjgwQzVcIixcImxhcmdlXCI6XCJUN1VMeXExeUU5QVZYRU1rblY0R1wiLFwieGxhcmdlXCI6XCJRUEFjZVZRZFo2UUlRMlF2aWp3Z1wiLFwiaW52ZXJ0ZWRcIjpcIm1GVEdiaExhNE5sVU8xNm52SnJrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJXY2VteXIyR3I4WkNHYzZCamJxd1wiLFwic21hbGxcIjpcIlRfcGE4Q2NwTDFHdnVEc2R2c3FxXCIsXCJtZWRpdW1cIjpcIm5MTEVyak9nZmE1YjJzT2VaclE1XCIsXCJsYXJnZVwiOlwiUTcxTkZCSHJTeFFMUUU0QUdEMmhcIixcInhsYXJnZVwiOlwiRWJCaXlGMXJnNndSYXhTTUs4c29cIixcInJvdW5kZWRcIjpcInRManV3UlNzSWlMSkdWc3JhcmJkXCIsXCJ0b3BPZmZzZXRcIjpcImQ0S0xwSTc5Q3VTVTZna1BQSW5BXCIsXCJyaWdodE9mZnNldFwiOlwiRzdoSlpvWXY4cUlyTm1GQ3lnTUVcIixcImJvdHRvbU9mZnNldFwiOlwiRFpzM0F2R2tWZE92SmZMZUo4R2hcIixcImxlZnRPZmZzZXRcIjpcIndFRW5XUmN2dXZvbWhfT0xPNWlxXCIsXCJpbnZlcnRlZFwiOlwiSzlXR0NGcFVhZE85V0lYd0Zhal9cIixcIm5vU2hhZG93XCI6XCJlQVFKMTBrRWtQbUR4TUd2bFl6eVwiLFwibm9Cb3JkZXJcIjpcIk9sRU5SOW50dVdZTEdPS0tLckdSXCIsXCJ0cmFuc3BhcmVudFwiOlwiS09jc1ByaXZyOTRyeG5mSFZsZmVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImdVU1R5M19OcDFtR0pIVzFOM2d4XCIsXCJzbWFsbFwiOlwiSVl1VnpoMUhCemdvVENpMldRX3BcIixcIm1lZGl1bVwiOlwiSk5nM19iQ0VmSXZpNGdlRWNzUzNcIixcImxhcmdlXCI6XCJuNjFzYXhBMjBfRXdNZ3Q5R3c0c1wiLFwieGxhcmdlXCI6XCJncUdudm5IOVg2bUd2endsNGFHelwiLFwicm91bmRlZFwiOlwiRGt6dXFoRWFpTVIzWE1zMU0xSWZcIixcInRvcE9mZnNldFwiOlwic0dudmV2dnN4QlpVYVhycFpRcElcIixcInJpZ2h0T2Zmc2V0XCI6XCJoZ1kzWnBreUQ3MHA3RThybjNiaVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJST29RWTZPYVJuUXpET2ZYX1FERlwiLFwibGVmdE9mZnNldFwiOlwiS2V2bTU4MmUzZ1hQSkUzT0RvcGFcIixcImludmVydGVkXCI6XCJPT3puQ2JBYmpPTGM0X2JDRXFmeVwiLFwibm9TaGFkb3dcIjpcInhySHhmY2UwMzRkZ1lORWtubFZNXCIsXCJub0JvcmRlclwiOlwiZUh0X1JJcThKR29ZSGM0aUNvZWdcIixcInRyYW5zcGFyZW50XCI6XCJuZmdxdFNnZnJ0ckdGRFdmWm9uUVwiLFwiZGlzYWJsZWRcIjpcIklfbmhKOXU2cFREXzJTRjNxbF9sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyTzVXNkRRazROdG9XcndtS01XZ1wiLFwiaGFzT3ZlcmxheVwiOlwibGx2bm1JOEsxM2c5UFRCaUNOejNcIixcIm92ZXJsYXlcIjpcIkdWazJqOHdWMXQzZ1k1dVhRNHFJXCIsXCJpbWFnZVwiOlwiZ1hqWXFLZTl3M05nWXVyWXdVUXBcIixcImNvdmVyXCI6XCJfbDdPTk9XYXlyOHR5dUdpeVVzY1wiLFwiY29udGFpblwiOlwiU1lqT2I4bEFobURiZHlsRklRWTlcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkhrcm96U2ZsbFRGbGtrYnF4WFdoXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwieHlIWGhoSEVZWE1ZZWF2V1p3X05cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJEWnlsQ01sR2ZlQ1V3U2J5ZUlxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpOEd1X1cxdzhXQkFZZmxMSVl6d1wiLFwiaGVhZGVyXCI6XCJHcDdSOHdZd2FMdEZvS0ZjUnRnTlwiLFwiaGVhZGVyTGFiZWxcIjpcIlZHa290TVRucVBSYUtjR1Y4UmpnXCIsXCJsaXN0XCI6XCJ2ZzlRTHRDWVRBczV4M2ZGNzl6cFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiWkZVZDdvU3BQTHQwRWQyWHFhV1pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJ4UTlCZmswWDFIbVpnaWhDdXRaVlwiLFwib3BlblwiOlwidXR2OUZZT1U3UTBKTm5aVzFlanZcIixcImVudHJhbmNlXCI6XCJ5WUtqY0N2RDJMOTRGcFBnT2lnUVwiLFwiaGVhZGVyXCI6XCJ3Tkw4NnM5ekdGaThYSzExS2xvUlwiLFwiZm9vdGVyXCI6XCJtdTRKZXYxYzRLY2lmZUY4TXpxZ1wiLFwibm9Cb3JkZXJcIjpcIkVhUFNqTDFuWHN6N1RDeDExTHJmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrWWg3REtZcUg2amRMWGQ3UGRKd1wiLFwibWVudUNvbnRhaW5lclwiOlwiUWxlQU8zeW1UbGlVNlpOQlF4ZmdcIixcInRvcFwiOlwiYXhmY3JqU0g0bHZ1anpyc2syUXBcIixcInJpZ2h0XCI6XCJMdFZsdFczQlBaNWdOWFZ4eGtyUFwiLFwibGVmdFwiOlwiUFJiNWY4WGNNWk9jWTV1ZlBNZHFcIixcImJvdHRvbVwiOlwiX19NWjVPb2lJclZpZEZYYlFmanVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiZ0daZl9Hc1dzd2tyME5URF9uYlFcIixcIm5vUGFkZGluZ1wiOlwiQ00yYkhTQ3h3dWl0TWVzN3U5V2ZcIixcImFjdGl2ZVwiOlwiczR0SmxLNE9GYzNyblhMME14cWtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIlgxRjRTUWtoUWgwZnh6NVl1M3RIXCIsXCJub1BhZGRpbmdcIjpcImtwRExYWlNEMktwMTloOXN1UkxBXCIsXCJhY3RpdmVcIjpcIkl3SVRqR242dlRadGVFS2pOb1ljXCIsXCJtZW51SXRlbVwiOlwibGRvUjZwR09ydGdITVhTcG1IN0ZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJqMGg5aGRfZ2x2STl4ZE9uYWF1WVwiLFwibm9PdmVybGF5XCI6XCJTTDQ4U3padWZLZ2RNaUdZM1lUTlwiLFwibW9kYWxcIjpcImhUWGNaZXZHeXlJMEFjdnByWFZKXCIsXCJ0cmFuc3BhcmVudFwiOlwiaWJxbG9HMUh4SHgzc3Rka1ZaU2pcIixcIm5vU2hhZG93XCI6XCJJRW81dkVlZnR2THBtd2kwVnlqRFwiLFwibW9kYWxCdXR0b25cIjpcIkZvUGZDM2o3Y0lnMkJZZnpxUUdFXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJHZXZiYkczRDBSMzR4R1VGczVZMVwiLFwibnVtYmVyc1wiOlwiZkw1STFXS1hDYVU5dnJCR3lKQjRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJEaDZqc1ExNWVNeWRzU01UQ3dSd1wiLFwidHJhbnNwYXJlbnRcIjpcIldUNk9QbGpDMnFmYkFXc2swejRyXCIsXCJmaXhlZFwiOlwicHU2czlNajVUMVlJZ212NExPbkNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJoZWFkZXJcIjpcIldTWVlCQXo1M2RocXVJT1pQV0JQXCIsXCJsYWJlbFwiOlwiYjU1aHlaMG9IbDBzNE90OU9od01cIixcImV4cGFuZGVkXCI6XCJOM0F6TzVrWmxoNEhBUGtubll6cVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiU21DaTR4T3hFc0x0aTYxR29ZazRcIixcInNlbGVjdGVkXCI6XCJfNHJKdENPWnBuZjN4bjhwbUZ2Q1FcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImUzeVhKQnJZVFc0c1ZaS1kyTkZtXCIsXCJzZWxlY3RBbGxDb250YWluZXJcIjpcImN6SExhNEwzdFJDSkRDaURCNkF6XCIsXCJjaGVja2JveFwiOlwiaUtxaldVZDk2elNwOXhtb2NYemtcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJheGloOUVudXpLMWZ3aHFZRFZSQVwiLFwibGFiZWxcIjpcInE1V3M5aHI4Wk1YN2ZTdkRLX3FuXCIsXCJub09wdGlvbnNcIjpcIm92S3ZCNUg4RW9Gem51TXFVdWpsXCIsXCJzZWFyY2hLZXl3b3JkXCI6XCJUd2NWYVJEejhjb2tJSzlEOUR4SlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaXgzYVpXTWVONUFsNFVLOHllYkpcIixcImljb25TZWFyY2hDb250YWluZXJcIjpcIlo1TFB4NDd5YkVLZVgyOVhCWUJDXCIsXCJyZXNldEJ1dHRvblwiOlwiaGpUOVpYdm12YzVRVXJ1d3o4RWxcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkVUR2JYVGRZQXAwRzQwVEpQTG5LXCIsXCJkaXNhYmxlZFwiOlwibkVDZ0dkWE9zcFVyUVdIanp3a2dcIixcImhlYWRlclwiOlwiWEFvSmh4VEFwY1I5bEdlZ3lwOUFcIixcImFjdGl2ZVwiOlwiZWJlbXp0WkVXSVY0XzZBc0tQUUhcIixcImNvbnRlbnRcIjpcInJSRFd2MnFxd1NyQnkzZXZaN0R3XCIsXCJub09wdGlvbnNcIjpcImZMUDR4NEl4bnlpV2hwNUJQNXNUXCIsXCJzZWFyY2hDb250YWluZXJcIjpcInlPRUNESmVEVlQ1ejVZYVhwZUpuXCIsXCJpY29uQnV0dG9uXCI6XCJhVktwM0gzSldyYUJmN0c1VWRhUFwiLFwiZXhwYW5kZWRcIjpcIkJyeHJ0RDNhTVg3SVU1MnJBMjIwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wicGxhY2Vob2xkZXJcIjpcImRkbFJpZG5JelloUUM5REdwZ0l0XCIsXCJhY3RpdmVcIjpcInNoSHNFSkd0Yno0Y21BNngxRzFsXCIsXCJ0YWdXcmFwcGVyXCI6XCJCR0VTaGM3cXUyZms5RFpFMlJVc1wiLFwic2VsZWN0ZWRPcHRpb25cIjpcIm1hOUJJanVHQ1FlS0Y0NHNndWNUXCIsXCJzZWxlY3RlZE9wdGlvbnNcIjpcIm5ScEF3djk3Q2VzcVFiRExjZXQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnNU9SMGFPTk9XMU9zMXh0a05IaVwiLFwidGFibGVcIjpcInNNUjFWYjYyWEV2T09XUnJXYzRRXCIsXCJwbGFjZWhvbGRlckNvbnRhaW5lclwiOlwiXzd4Mno3cF9rYlFPTERtRVg1NGlBXCIsXCJzY3JvbGxiYXJDb250YWluZXJcIjpcIkVBSDE0WFBlSkJ1RFdHcDVOVllvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqNFBpZ0pPTDVEZ3pEOE9ZeHNrelwiLFwiaXNIZWFkZXJTdGlja3lcIjpcIkFZUl80SGVvbEFqSkNPc2wzSFpKXCIsXCJib3JkZXJCb3R0b21cIjpcImlackQzdEgxMnpESUZPV3ZKVUQ3XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGFibGVIZWFkZXJDZWxsXCI6XCJKY0ExVnpWNE13VlEzTkVoMHZ6RVwiLFwic29ydEljb25WaXNpYmxlXCI6XCJJcTdPeHNRekwwNnhqOThPMExxSlwiLFwic29ydGFibGVcIjpcIlZTVFNoWTdMVGhfSUlqbnJQX19sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJkT3ZpZ1NnaHh5UTRDYmJDTWtDUlwiLFwiYWN0aXZlXCI6XCJ0cW5ZZFkwSHREbG1XNjF0akdiUVwiLFwiaGFzQXJyb3dcIjpcInFxTzZhMWpOTDZIVEpHN0hSMTF0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJBdlI3V0NEUnhDd3ZSVUFfajgwUFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiektGMzRhS3ZZWm5iTHVaempFZU9cIixcImNvbnRlbnRcIjpcIm9fMjFyX0VqTEtCM3hoZ0d5NzRzXCIsXCJjbG9zZUJ1dHRvblwiOlwiWlpQUlpMVXE5TVF5aWZEOHgyakhcIixcImRpc2FibGVkXCI6XCJ1Q0x6MHZiTm5RWkZYOGtWdVVpR1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ3dZS1JQcEdkSU1WWGtpTjBIOUJcIixcInNjcm9sbGFibGVcIjpcIm92ZGp3aHIyMWF3djJBZ2lRRWQyXCIsXCJ0YWdJbnB1dFwiOlwiYXZJbUdzM1hjTGVETEdoeEQ4YndcIixcImRpc2FibGVkXCI6XCJ5VDhQcDhUVXZQN3NRU0dlR0xOSlwiLFwidGV4dElucHV0XCI6XCJaaU5OZjJvTFZqRXh4cDlSVDJzX1wiLFwic21hbGxcIjpcIkxlbU1VVHNlaWd4SGJtSVlWVlRjXCIsXCJtZWRpdW1cIjpcIlBVSEpkTTdaRWIzTEZSZU0xX1VnXCIsXCJsYXJnZVwiOlwiajltazUyaEdob0Z3anc0RldIUTlcIixcInhsYXJnZVwiOlwiRWlXcWVGcVFYRTlMSFVoMXZ4cFhcIixcIm5vQm9yZGVyXCI6XCJPNldzT3BVWm9aZVRoVWJfVmlYblwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiTlBacmtzQ3BuWFZKU3Ffc25IalJcIixcInNtYWxsXCI6XCJqUUdyaVFKU2EwNHpzb0cxYTJ1OVwiLFwibWVkaXVtXCI6XCJsVm9ZOURwMTdIT0Jpbk1qMFE3b1wiLFwibGFyZ2VcIjpcIlFsVWFQYlg4RWFJaTdyWjRGYjhvXCIsXCJ4bGFyZ2VcIjpcInJZUE9NOWZOdFZMZFBGeVdLa0dFXCIsXCJub0JvcmRlclwiOlwiS0RUSU5zSGRvbFlSZVNiTGNvb0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwiekZpdUFUZ3NTQjQyVmRFbWNKWllcIixcImVudHJhbmNlXCI6XCJSOHJwT1VPdG5nWU9FdDdJMHBHTVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0Q29udGFpbmVyXCI6XCJYbExRT2U0NzRPdEJpYWNfZ1U3SFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvb2x0aXBcIjpcIkttNlVVeTBqcHFNMExBMmVYY2NjXCIsXCJhYnNvbHV0ZVwiOlwiZTUwekVqdGZRSzAwbGZfODg0T1lcIixcImZpeGVkXCI6XCJqcXhUNE1jT2VVRERuR3NlWmtCTFwiLFwibGVmdFwiOlwieUJ2MWx3REhwZXh4TzNEUHBkMXZcIixcInJpZ2h0XCI6XCJ2ODUyRXh4bVE2QXRTUUYyc1g4QVwiLFwidG9wXCI6XCJpVjJ5elBpem9vdTlvbVc4MTFoZ1wiLFwiYm90dG9tXCI6XCJWbW1FOEVOc0NremJ3THBMM1hKZ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieVk5SFY0MElUVFdnQVY4cUx3MXdcIixcImhhc092ZXJsYXlcIjpcInp1YjVicWRWWG00TkZ4cEk0SEJmXCIsXCJ2aWRlb1wiOlwiTVZDRFZqZmdtSEU3UWVtY1l4R2xcIixcImNvdmVyXCI6XCJWNG5FY20xNzl2WmUyTUxnUlZhTVwiLFwiY29udGFpblwiOlwidTJfTWZlQ2pNU2xfYUJOSm41bkxcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImxqZnNZczhCUXFsZUt6Ykxra2FkXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSEp0UnFiQUZMT25YVnlHejhpRlVcIixcIm92ZXJsYXlcIjpcIkFMSGhPSEFlTGxCRHkxRHBZcWl2XCJ9OyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhpbnQgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuSGludCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGNoaWxkID0gcmVhY3RfMS5kZWZhdWx0LkNoaWxkcmVuLm9ubHkocHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmICgoKF9iID0gKF9hID0gY2hpbGQudHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b0xvd2VyQ2FzZSgpKSAhPT0gJ2lucHV0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6ICdIaW50JyBvbmx5IGFjY2VwdHMgYW4gJ2lucHV0JyBlbGVtZW50IGFzIGNoaWxkLlwiKTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLCBkaXNhYmxlSGludCA9IHByb3BzLmRpc2FibGVIaW50LCBhbGxvd1RhYkZpbGwgPSBwcm9wcy5hbGxvd1RhYkZpbGwsIGFsbG93RW50ZXJGaWxsID0gcHJvcHMuYWxsb3dFbnRlckZpbGwsIG9uRmlsbCA9IHByb3BzLm9uRmlsbCwgb25IaW50ID0gcHJvcHMub25IaW50LCB2YWx1ZU1vZGlmaWVyID0gcHJvcHMudmFsdWVNb2RpZmllcjtcbiAgICB2YXIgY2hpbGRQcm9wcyA9IGNoaWxkLnByb3BzO1xuICAgIHZhciBtYWluSW5wdXRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFdyYXBwZXJSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB1bk1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMF0sIHNldFVubW9kaWZpZWRJbnB1dFRleHQgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdGV4dCA9IF9kWzBdLCBzZXRUZXh0ID0gX2RbMV07XG4gICAgdmFyIF9lID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIGhpbnQgPSBfZVswXSwgc2V0SGludCA9IF9lWzFdO1xuICAgIHZhciBfZiA9IHJlYWN0XzEudXNlU3RhdGUoKSwgbWF0Y2ggPSBfZlswXSwgc2V0TWF0Y2ggPSBfZlsxXTtcbiAgICB2YXIgX2cgPSByZWFjdF8xLnVzZVN0YXRlKCksIGNoYW5nZUV2ZW50ID0gX2dbMF0sIHNldENoYW5nZUV2ZW50ID0gX2dbMV07XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB2YXIgZHVwbGljYXRlID0gdXRpbHNfMS5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogXFxcIlwiICsgZHVwbGljYXRlICsgXCJcXFwiIG9jY3VycyBtb3JlIHRoYW4gb25jZSBhbmQgbWF5IGNhdXNlIGVycm9ycy4gT3B0aW9ucyBzaG91bGQgbm90IGNvbnRhaW4gZHVwbGljYXRlIHZhbHVlcyFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbb3B0aW9uc10pO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGRpc2FibGVIaW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0U3R5bGUgPSBtYWluSW5wdXRSZWYuY3VycmVudCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtYWluSW5wdXRSZWYuY3VycmVudCk7XG4gICAgICAgIGlucHV0U3R5bGUgJiYgc3R5bGVIaW50KGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0TWF0Y2ggPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBpZiAoIXRleHQgfHwgdGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIChvcHRpb25zWzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8xID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzIgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sYWJlbC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdXRpbHNfMS5zb3J0QXNjKGEubGFiZWwsIGIubGFiZWwpOyB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2V0SGludFRleHRBbmRJZCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHNldFRleHQodGV4dCk7XG4gICAgICAgIHZhciBtYXRjaCA9IGdldE1hdGNoKHRleHQpO1xuICAgICAgICB2YXIgaGludDtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgaGludCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2gubGFiZWwuc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNldEhpbnQoaGludCk7XG4gICAgICAgIHNldE1hdGNoKG1hdGNoKTtcbiAgICAgICAgb25IaW50ICYmIG9uSGludChtYXRjaCk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlT25GaWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaGludCA9PT0gJycgfHwgIWNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld1VuTW9kaWZpZWRUZXh0ID0gdW5Nb2RpZmllZElucHV0VGV4dCArIGhpbnQ7XG4gICAgICAgIGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZSA9IG5ld1VuTW9kaWZpZWRUZXh0O1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoY2hhbmdlRXZlbnQpO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgb25GaWxsICYmIG9uRmlsbChtYXRjaCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQobmV3VW5Nb2RpZmllZFRleHQpO1xuICAgIH07XG4gICAgdmFyIHN0eWxlSGludCA9IGZ1bmN0aW9uIChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKF9hID0gaGludFdyYXBwZXJSZWYgPT09IG51bGwgfHwgaGludFdyYXBwZXJSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdHlsZSkge1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gaW5wdXRTdHlsZS53aWR0aDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gaW5wdXRTdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJveFNpemluZyA9IGlucHV0U3R5bGUuYm94U2l6aW5nO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5tYXJnaW4gPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ21hcmdpbicpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5wYWRkaW5nID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlclN0eWxlID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyV2lkdGggPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoX2IgPSBoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0Q2hhbmdlRXZlbnQoZSk7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSB2YWx1ZU1vZGlmaWVyID8gdmFsdWVNb2RpZmllcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChtb2RpZmllZFZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIH07XG4gICAgdmFyIG9uRm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkZvY3VzICYmIGNoaWxkUHJvcHMub25Gb2N1cyhlKTtcbiAgICB9O1xuICAgIHZhciBvbkJsdXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL09ubHkgYmx1ciBpdCBpZiB0aGUgbmV3IGZvY3VzIGlzbid0IHRoZSB0aGUgaGludCBpbnB1dFxuICAgICAgICBpZiAoKGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSAhPT0gZS5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgICAgIGNoaWxkUHJvcHMub25CbHVyICYmIGNoaWxkUHJvcHMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgQVJST1dSSUdIVCA9ICdBcnJvd1JpZ2h0JztcbiAgICB2YXIgVEFCID0gJ1RhYic7XG4gICAgdmFyIEVOVEVSID0gJ0VudGVyJztcbiAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRm9yIHNlbGVjdGFibGUgaW5wdXQgdHlwZXMgKFwidGV4dFwiLCBcInNlYXJjaFwiKSwgb25seSBzZWxlY3QgdGhlIGhpbnQgaWZcbiAgICAgICAgICAgIC8vIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdmFsdWUuIEZvciBub24tc2VsZWN0YWJsZSB0eXBlcyAoXCJlbWFpbFwiLFxuICAgICAgICAgICAgLy8gXCJudW1iZXJcIiksIGFsd2F5cyBzZWxlY3QgdGhlIGhpbnQuXG4gICAgICAgICAgICB2YXIgaXNOb25TZWxlY3RhYmxlVHlwZSA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IG51bGw7XG4gICAgICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IGlzTm9uU2VsZWN0YWJsZVR5cGUgfHwgZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBjYXJldElzQXRUZXh0RW5kO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBlLmtleSA9PT0gQVJST1dSSUdIVCkge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd1RhYkZpbGwgJiYgZS5rZXkgPT09IFRBQiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd0VudGVyRmlsbCAmJiBlLmtleSA9PT0gRU5URVIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkUHJvcHMub25LZXlEb3duICYmIGNoaWxkUHJvcHMub25LZXlEb3duKGUpO1xuICAgIH07XG4gICAgdmFyIG9uSGludENsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaGludENhcmV0UG9zaXRpb24gPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgICAgIC8vIElmIHVzZXIgY2xpY2tzIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgaGludCwgXG4gICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIGVuZCBvZiB0aGUgbWFpbklucHV0IHRleHRcbiAgICAgICAgaWYgKGhpbnRDYXJldFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhaGludCAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3NpdGlvbiA9IHRleHQubGVuZ3RoICsgaGludENhcmV0UG9zaXRpb247XG4gICAgICAgICAgICAgICAgKF9iID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZXRTZWxlY3Rpb25SYW5nZShjYXJldFBvc2l0aW9uLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgY2hpbGRSZWYgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCkucmVmO1xuICAgIHZhciBtYWluSW5wdXQgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNoaWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLCByZWY6IGNoaWxkUmVmICYmIHR5cGVvZiAoY2hpbGRSZWYpICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB1dGlsc18xLm1lcmdlUmVmcyhjaGlsZFJlZiwgbWFpbklucHV0UmVmKVxuICAgICAgICAgICAgOiBtYWluSW5wdXRSZWYgfSkpO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmFoLWlucHV0LXdyYXBwZXJcIiwgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgIH0gfSwgZGlzYWJsZUhpbnRcbiAgICAgICAgPyBjaGlsZFxuICAgICAgICA6IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICBtYWluSW5wdXQsXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnQtd3JhcHBlclwiLCByZWY6IGhpbnRXcmFwcGVyUmVmLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjM1KScsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ3JhaC10ZXh0LWZpbGxlcicsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgdGV4dCksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludFwiLCByZWY6IGhpbnRSZWYsIG9uQ2xpY2s6IG9uSGludENsaWNrLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogIWhpbnQgfHwgaGludCA9PT0gJycgPyAnbm9uZScgOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVmYXVsdFZhbHVlOiBoaW50LCB0YWJJbmRleDogLTEgfSkpKSkpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBleHBvcnRzLnNvcnRBc2MgPSBleHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBleHBvcnRzLm1lcmdlUmVmcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIG1lcmdlUmVmcygpIHtcbiAgICB2YXIgcmVmcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHJlZnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZpbHRlcmVkUmVmcyA9IHJlZnMuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGZpbHRlcmVkUmVmc18xID0gZmlsdGVyZWRSZWZzOyBfaSA8IGZpbHRlcmVkUmVmc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIHJlZiA9IGZpbHRlcmVkUmVmc18xW19pXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmVmKGluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VSZWZzID0gbWVyZ2VSZWZzO1xuO1xuLy8gSUUgZG9lc24ndCBzZWVtIHRvIGdldCB0aGUgY29tcG9zaXRlIGNvbXB1dGVkIHZhbHVlIChlZzogJ3BhZGRpbmcnLFxuLy8gJ2JvcmRlclN0eWxlJywgZXRjLiksIHNvIGdlbmVyYXRlIHRoZXNlIGZyb20gdGhlIGluZGl2aWR1YWwgdmFsdWVzLlxuZnVuY3Rpb24gaW50ZXJwb2xhdGVTdHlsZShzdHlsZXMsIGF0dHIsIHN1YmF0dHIpIHtcbiAgICBpZiAoc3ViYXR0ciA9PT0gdm9pZCAwKSB7IHN1YmF0dHIgPSAnJzsgfVxuICAgIC8vIFRpdGxlLWNhc2UgdGhlIHN1Yi1hdHRyaWJ1dGUuXG4gICAgaWYgKHN1YmF0dHIpIHtcbiAgICAgICAgc3ViYXR0ciA9IHN1YmF0dHIucmVwbGFjZShzdWJhdHRyWzBdLCBzdWJhdHRyWzBdLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXVxuICAgICAgICAvLyBAdHMtaWdub3JlOiAoYXR0ciArIGRpciArIHN1YmF0dHIpIHByb3BlcnR5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChkaXIpIHsgcmV0dXJuIHN0eWxlc1thdHRyICsgZGlyICsgc3ViYXR0cl07IH0pXG4gICAgICAgIC5qb2luKCcgJyk7XG59XG5leHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBpbnRlcnBvbGF0ZVN0eWxlO1xuZnVuY3Rpb24gc29ydEFzYyhhLCBiKSB7XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMuc29ydEFzYyA9IHNvcnRBc2M7XG5mdW5jdGlvbiBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihhcnJheSkge1xuICAgIHZhciB0cmFja2VyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhY2tlclthcnJheVtpXS5sYWJlbF0pIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheVtpXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0cmFja2VyW2FycmF5W2ldLmxhYmVsXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGdldEZpcnN0RHVwbGljYXRlT3B0aW9uO1xuIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS40IFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LCBfcmVmJGN1cnJlbnQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCB8fCAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpICE9IG51bGwgJiYgX3JlZiRjdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkge1xuICB2YXIgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRpbWVvdXRJRCA9IHtcbiAgICBpZDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gIH07XG4gIHJldHVybiB0aW1lb3V0SUQ7XG59XG5cbnZhciBzaXplID0gLTE7IC8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIHN0eWxlID0gZGl2LnN0eWxlO1xuICAgIHN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIHN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBzdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBzaXplID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxudmFyIGNhY2hlZFJUTFJlc3VsdCA9IG51bGw7IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbi8vIENocm9tZSBkb2VzIG5vdCBzZWVtIHRvIGFkaGVyZTsgaXRzIHNjcm9sbExlZnQgdmFsdWVzIGFyZSBwb3NpdGl2ZSAobWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuLy8gU2FmYXJpJ3MgZWxhc3RpYyBib3VuY2UgbWFrZXMgZGV0ZWN0aW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHdydCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLlxuLy8gVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbnRlbnRpb25hbGx5IHNldCBhIG5lZ2F0aXZlIG9mZnNldCxcbi8vIGFuZCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWJzZXF1ZW50IFwic2Nyb2xsXCIgZXZlbnQgbWF0Y2hlcyB0aGUgbmVnYXRpdmUgb2Zmc2V0LlxuLy8gSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gd2UgY2FuIGFzc3VtZSBhIG5vbi1zdGFuZGFyZCBSVEwgc2Nyb2xsIGltcGxlbWVudGF0aW9uLlxuXG5mdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgb3V0ZXJTdHlsZSA9IG91dGVyRGl2LnN0eWxlO1xuICAgIG91dGVyU3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIG91dGVyU3R5bGUuZGlyZWN0aW9uID0gJ3J0bCc7XG4gICAgdmFyIGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIGlubmVyU3R5bGUgPSBpbm5lckRpdi5zdHlsZTtcbiAgICBpbm5lclN0eWxlLndpZHRoID0gJzEwMHB4JztcbiAgICBpbm5lclN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dGVyRGl2LnNjcm9sbExlZnQgPSAxO1xuXG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlckRpdik7XG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KF9yZWYpIHtcbiAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZi5jb2x1bW5JbmRleCxcbiAgICAgIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICByb3dJbmRleCA9IF9yZWYucm93SW5kZXg7XG4gIHJldHVybiByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyaWRDb21wb25lbnQoX3JlZjIpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0Q29sdW1uT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGdldENvbHVtbldpZHRoID0gX3JlZjIuZ2V0Q29sdW1uV2lkdGgsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gICAgICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gICAgICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRSb3dIZWlnaHQgPSBfcmVmMi5nZXRSb3dIZWlnaHQsXG4gICAgICBnZXRSb3dPZmZzZXQgPSBfcmVmMi5nZXRSb3dPZmZzZXQsXG4gICAgICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmMi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmMi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYyLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoR3JpZCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEdyaWQocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbExlZnQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA6IDAsXG4gICAgICAgIHNjcm9sbFRvcDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBvdmVyc2NhblJvd1N0b3BJbmRleCwgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsIHZpc2libGVSb3dTdGFydEluZGV4LCB2aXNpYmxlUm93U3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IF90aGlzJHByb3BzLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMucm93SGVpZ2h0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbiwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHQpO1xuXG4gICAgICAgIHZhciBrZXkgPSByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldENvbHVtbk9mZnNldChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IF9vZmZzZXQsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBfb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiBnZXRSb3dPZmZzZXQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuXG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIEdyaWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gR3JpZC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhfcmVmMykge1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBfcmVmMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF9yZWYzLnNjcm9sbFRvcDtcblxuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbExlZnQgPSBwcmV2U3RhdGUuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShfcmVmNCkge1xuICAgICAgdmFyIF9yZWY0JGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICAgICAgYWxpZ24gPSBfcmVmNCRhbGlnbiA9PT0gdm9pZCAwID8gJ2F1dG8nIDogX3JlZjQkYWxpZ24sXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfcmVmNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY0LnJvd0luZGV4O1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczIuY29sdW1uQ291bnQsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMyLmhlaWdodCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzMi5yb3dDb3VudCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzMi53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKCk7XG5cbiAgICAgIGlmIChjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbHVtbkluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uSW5kZXgsIGNvbHVtbkNvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuXG4gICAgICB2YXIgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdGhpcy5zY3JvbGxUbyh7XG4gICAgICAgIHNjcm9sbExlZnQ6IGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wOiByb3dJbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzLCBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxUb3BcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxMZWZ0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxMZWZ0LFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxUb3AgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbFRvcDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczQuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNC5jb2x1bW5Db3VudCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNC5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczQuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczQuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5IDogX3RoaXMkcHJvcHM0JGl0ZW1LZXksXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczQucm93Q291bnQsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczQudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczQud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBjb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzBdLFxuICAgICAgICAgIGNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlsxXTtcblxuICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMF0sXG4gICAgICAgICAgcm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCkge1xuICAgICAgICBmb3IgKHZhciBfcm93SW5kZXggPSByb3dTdGFydEluZGV4OyBfcm93SW5kZXggPD0gcm93U3RvcEluZGV4OyBfcm93SW5kZXgrKykge1xuICAgICAgICAgIGZvciAodmFyIF9jb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7IF9jb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IF9jb2x1bW5JbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoe1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleCxcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfcm93SW5kZXgsIF9jb2x1bW5JbmRleClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczUuY29sdW1uQ291bnQsXG4gICAgICAgICAgb25JdGVtc1JlbmRlcmVkID0gX3RoaXMkcHJvcHM1Lm9uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzNS5vblNjcm9sbCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNS5yb3dDb3VudDtcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSMiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbM107XG5cbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuMiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXgsIF9vdmVyc2NhblJvd1N0b3BJbmRleCwgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4LCBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgX3Zpc2libGVSb3dTdGFydEluZGV4LCBfdmlzaWJsZVJvd1N0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgX3Njcm9sbFRvcCA9IF90aGlzJHN0YXRlMy5zY3JvbGxUb3AsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUzLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgICAgIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbExlZnQsIF9zY3JvbGxUb3AsIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNi5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTQgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTQuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNC5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGU0LnNjcm9sbExlZnQ7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM3LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczcucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU1ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNS5pc1Njcm9sbGluZyxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNS52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuUm93Q291bnQgfHwgb3ZlcnNjYW5Sb3dzQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gR3JpZDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn1cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWY1LCBfcmVmNikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWY1LmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWY1Lm91dGVyVGFnTmFtZSxcbiAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICBvdmVyc2NhbkNvdW50ID0gX3JlZjUub3ZlcnNjYW5Db3VudCxcbiAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICB3aWR0aCA9IF9yZWY1LndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmNi5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvbHVtbnNDb3VudCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWYsIF9yZWYyKSB7XG4gIHZhciByb3dDb3VudCA9IF9yZWYucm93Q291bnQ7XG4gIHZhciByb3dNZXRhZGF0YU1hcCA9IF9yZWYyLnJvd01ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjIuZXN0aW1hdGVkUm93SGVpZ2h0LFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSBfcmVmMi5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSByb3dDb3VudCAtIGxhc3RNZWFzdXJlZFJvd0luZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmMywgX3JlZjQpIHtcbiAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjMuY29sdW1uQ291bnQ7XG4gIHZhciBjb2x1bW5NZXRhZGF0YU1hcCA9IF9yZWY0LmNvbHVtbk1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNC5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gX3JlZjQubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IGNvbHVtbkNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBjb2x1bW5Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZENvbHVtbldpZHRoO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBpdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5jb2x1bW5XaWR0aDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLnJvd0hlaWdodDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0gPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0oaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgdmFyIHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChwcm9wcywgaW5zdGFuY2VQcm9wcykgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIHNjcm9sbGJhclNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cblxuICB9XG59O1xuXG52YXIgVmFyaWFibGVTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdjb2x1bW4nLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsTGVmdCk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBwcm9wcy5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ3JvdycsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgncm93JywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbFRvcCk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciByb3dDb3VudCA9IHByb3BzLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCByb3dDb3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY1LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmNS5lc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IGZ1bmN0aW9uIChjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IGZ1bmN0aW9uIChyb3dJbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzID0gZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgICB2YXIgY29sdW1uSW5kZXggPSBfcmVmNi5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY2LnJvd0luZGV4LFxuICAgICAgICAgIF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9IF9yZWY2LnNob3VsZEZvcmNlVXBkYXRlLFxuICAgICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gX3JlZjYkc2hvdWxkRm9yY2VVcGRhID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkc2hvdWxkRm9yY2VVcGRhO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCwgY29sdW1uSW5kZXggLSAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXgsIHJvd0luZGV4IC0gMSk7XG4gICAgICB9IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjcucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkkMSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KGluZGV4LCBkYXRhKSB7XG4gIHJldHVybiBpbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaXN0Q29tcG9uZW50KF9yZWYpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0SXRlbU9mZnNldCA9IF9yZWYuZ2V0SXRlbU9mZnNldCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IF9yZWYuZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgZ2V0SXRlbVNpemUgPSBfcmVmLmdldEl0ZW1TaXplLFxuICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBfcmVmLmdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYuZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmLmdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShMaXN0LCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gTGlzdChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxPZmZzZXQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuU3RhcnRJbmRleCwgb3ZlcnNjYW5TdG9wSW5kZXgsIHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleDogdmlzaWJsZVN0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICBpdGVtU2l6ZSA9IF90aGlzJHByb3BzLml0ZW1TaXplLFxuICAgICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMubGF5b3V0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24pO1xuXG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIHNpemUgPSBnZXRJdGVtU2l6ZShfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICB2YXIgb2Zmc2V0SG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2luZGV4XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXRIb3Jpem9udGFsIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxWZXJ0aWNhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQyID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbFRvcDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBMaXN0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyQxKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gTGlzdC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhzY3JvbGxPZmZzZXQpIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKSB7XG4gICAgICBpZiAoYWxpZ24gPT09IHZvaWQgMCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHMyLml0ZW1Db3VudCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczIubGF5b3V0O1xuICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHRoaXMuc3RhdGUuc2Nyb2xsT2Zmc2V0O1xuICAgICAgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSkpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2UgZm9yIGxpc3RzOyBub3JtYWxseSB0aGV5IG9ubHkgc2Nyb2xsIGluIHRoZSBkb21pbmFudCBkaXJlY3Rpb24uXG5cbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gMDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzMy5kaXJlY3Rpb24sXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbE9mZnNldCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMy5sYXlvdXQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM0LmxheW91dDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNS5jbGFzc05hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM1LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczUuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM1LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczUuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNS5pdGVtQ291bnQsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczUuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5JDEgOiBfdGhpcyRwcm9wczUkaXRlbUtleSxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczUubGF5b3V0LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczUub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM1LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM1LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM1LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZzsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgIHZhciBvblNjcm9sbCA9IGlzSG9yaXpvbnRhbCA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWw7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFswXSxcbiAgICAgICAgICBzdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBfaW5kZXggPSBzdGFydEluZGV4OyBfaW5kZXggPD0gc3RvcEluZGV4OyBfaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICBrZXk6IGl0ZW1LZXkoX2luZGV4LCBpdGVtRGF0YSksXG4gICAgICAgICAgICBpbmRleDogX2luZGV4LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9pbmRleClcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBlc3RpbWF0ZWRUb3RhbFNpemUgOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLnByb3BzLml0ZW1Db3VudDtcblxuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5TdGFydEluZGV4LCBfb3ZlcnNjYW5TdG9wSW5kZXgsIF92aXNpYmxlU3RhcnRJbmRleCwgX3Zpc2libGVTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9zY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMi5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbERpcmVjdGlvbiwgX3Njcm9sbE9mZnNldCwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0UmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM2Lml0ZW1Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlMy5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMy5zY3JvbGxPZmZzZXQ7XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBMaXN0O1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufSAvLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWYyLCBfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodCxcbiAgICAgIGxheW91dCA9IF9yZWYyLmxheW91dCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWYyLmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWYyLm91dGVyVGFnTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZjIud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWYzLmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lJDEgJiYgIWRldldhcm5pbmdzVGFnTmFtZSQxLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lJDEuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH0gLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkaXJlY3Rpb24gcHJvcCBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgKGRlZmF1bHQpIG9yIFwicnRsXCIuICcgKyAnUGxlYXNlIHVzZSB0aGUgbGF5b3V0IHByb3AgdG8gc3BlY2lmeSBcInZlcnRpY2FsXCIgKGRlZmF1bHQpIG9yIFwiaG9yaXpvbnRhbFwiIG9yaWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICsgKFwiXFxcIlwiICsgbGF5b3V0ICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChpc0hvcml6b250YWwgJiYgdHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0hvcml6b250YWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEgPSA1MDtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSQxID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYyLCBfcmVmMykge1xuICB2YXIgaXRlbUNvdW50ID0gX3JlZjIuaXRlbUNvdW50O1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gX3JlZjMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmMy5lc3RpbWF0ZWRJdGVtU2l6ZSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gX3JlZjMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBpdGVtQ291bnQgLSBsYXN0TWVhc3VyZWRJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgVmFyaWFibGVTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIG9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0kMShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNCA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWY0LmVzdGltYXRlZEl0ZW1TaXplO1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgaXRlbU1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplOiBlc3RpbWF0ZWRJdGVtU2l6ZSB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LCBpbmRleCAtIDEpOyAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNSkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gaW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYyLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQoX3JlZjMsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodDtcbiAgICByZXR1cm4gaW5kZXggKiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KF9yZWY0LCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmNC5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWY1KSB7XG4gICAgdmFyIHJvd0NvdW50ID0gX3JlZjUucm93Q291bnQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY1LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0ICogcm93Q291bnQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjYpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNi5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGggKiBjb2x1bW5Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQoX3JlZjcsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY3LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICB3aWR0aCA9IF9yZWY3LndpZHRoO1xuICAgIHZhciBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uQ291bnQgKiBjb2x1bW5XaWR0aCAtIHdpZHRoKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdENvbHVtbk9mZnNldCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGggLSB3aWR0aCArIHNjcm9sbGJhclNpemUgKyBjb2x1bW5XaWR0aCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChfcmVmOCwgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjgucm93SGVpZ2h0LFxuICAgICAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjgucm93Q291bnQ7XG4gICAgdmFyIGxhc3RSb3dPZmZzZXQgPSBNYXRoLm1heCgwLCByb3dDb3VudCAqIHJvd0hlaWdodCAtIGhlaWdodCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RSb3dPZmZzZXQsIHJvd0luZGV4ICogcm93SGVpZ2h0KTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93SW5kZXggKiByb3dIZWlnaHQgLSBoZWlnaHQgKyBzY3JvbGxiYXJTaXplICsgcm93SGVpZ2h0KTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgLSBoZWlnaHQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCArIGhlaWdodCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Um93T2Zmc2V0ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Um93T2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY5LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjkuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjkuY29sdW1uQ291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gY29sdW1uV2lkdGgpKSk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEwLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEwLmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWYxMC5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBfcmVmMTAud2lkdGg7XG4gICAgdmFyIGxlZnQgPSBzdGFydEluZGV4ICogY29sdW1uV2lkdGg7XG4gICAgdmFyIG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKCh3aWR0aCArIHNjcm9sbExlZnQgLSBsZWZ0KSAvIGNvbHVtbldpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUNvbHVtbnMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChfcmVmMTEsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTEucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMS5yb3dDb3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkpKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTIsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTIucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMi5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjEyLmhlaWdodDtcbiAgICB2YXIgdG9wID0gc3RhcnRJbmRleCAqIHJvd0hlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoKGhlaWdodCArIHNjcm9sbFRvcCAtIHRvcCkgLyByb3dIZWlnaHQpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlUm93cyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjEzKSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEzLmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmMTMucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gICAgcmV0dXJuIGluZGV4ICogaXRlbVNpemU7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmMi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYzKSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWYzLml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmMy5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemUgKiBpdGVtQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChfcmVmNCwgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNC5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY0Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNC5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjQubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY0LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1Db3VudCAqIGl0ZW1TaXplIC0gc2l6ZSk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RJdGVtT2Zmc2V0LCBpbmRleCAqIGl0ZW1TaXplKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaW5kZXggKiBpdGVtU2l6ZSAtIHNpemUgKyBpdGVtU2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChfcmVmNSwgb2Zmc2V0KSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWY1Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyBpdGVtU2l6ZSkpKTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmNiwgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY2LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjYuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNi5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjYuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY2LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNi53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIG9mZnNldCA9IHN0YXJ0SW5kZXggKiBpdGVtU2l6ZTtcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFtdLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5TY3JvbGxwYXJlbnQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XG5cbiAgdmFyIHBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcHMpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7IHJldHVybiBwczsgfVxuXG4gICAgcmV0dXJuIHBhcmVudHMobm9kZS5wYXJlbnROb2RlLCBwcy5jb25jYXQoW25vZGVdKSk7XG4gIH07XG5cbiAgdmFyIHN0eWxlID0gZnVuY3Rpb24gKG5vZGUsIHByb3ApIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICB9O1xuXG4gIHZhciBvdmVyZmxvdyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHN0eWxlKG5vZGUsIFwib3ZlcmZsb3dcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXlcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXhcIik7XG4gIH07XG5cbiAgdmFyIHNjcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICByZXR1cm4gcmVnZXgudGVzdChvdmVyZmxvdyhub2RlKSk7XG4gIH07XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB2YXIgcHMgPSBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgW10pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNjcm9sbChwc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIHBzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfTtcblxuICByZXR1cm4gc2Nyb2xsUGFyZW50O1xufSkpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICBvblBvaW50ZXJEb3duPzogKGV2ZW50OiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XG59O1xuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBvblBvaW50ZXJEb3duLFxuICBjb250YWluZXJSZWYsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUsXG59OiBCdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Qb2ludGVyRG93bj17b25Qb2ludGVyRG93bn1cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNpemUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uTGluayB9IGZyb20gXCIuL0J1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaXplPzogU2l6ZTtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPExhYmVsIHZhbHVlPXtsYWJlbH0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclBpY2tlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yUGlja2VyUHJvcHMgPSB7XG4gIGNvbG9yczogQ29sb3JbXTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgZGlyZWN0aW9uPzogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XG4gIGNhblRvZ2dsZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBDb2xvclBpY2tlcih7XG4gIGNvbG9ycyxcbiAgY29udGFpbmVyUmVmLFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWRDb2xvcixcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxuICBjYW5Ub2dnbGUgPSBmYWxzZSxcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cbiAgICA+XG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2FuVG9nZ2xlICYmIGNvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5KSB7XG4gICAgICAgICAgICBvblNlbGVjdChudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25TZWxlY3QoY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDb2xvclN3YXRjaFxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yUGlja2VyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY2xvc2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2xvc2Uuc3ZnXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgRHJhd2VyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGZvb3Rlcj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb3BlbjogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIG5vQ2xvc2VJY29uPzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBEcmF3ZXIoe1xuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgb3BlbixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIG5vQ2xvc2VJY29uID0gZmFsc2UsXG4gIG9uQ2xvc2UsXG59OiBEcmF3ZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXIsIHsgW3N0eWxlcy5vcGVuXTogb3BlbiB9LCBjbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckNvbnRlbnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckhlYWRlckNvbnRlbnR9PlxuICAgICAgICAgIHshbm9DbG9zZUljb24gJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50fT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb259IG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgICAgIDxJY29uIHNyYz17Y2xvc2VJY29ufSBzaXplPXtcInhsYXJnZVwifSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgeyEhaGVhZGVyICYmIDxkaXY+e2hlYWRlcn08L2Rpdj59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlck1haW59PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgeyEhZm9vdGVyICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyRm9vdGVyfT57Zm9vdGVyfTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlciB9IGZyb20gXCIuL0RyYXdlclwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gT21pdDxcbiAgUmVuZGVyRGlzcGxheVByb3BzPFQ+LFxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxuPiAmIHtcbiAgb25DbGljazogUmVuZGVyRGlzcGxheVByb3BzPFQ+W1widG9nZ2xlSXNPcGVuXCJdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsaWNrYWJsZTxUIGV4dGVuZHMgSXRlbT4oe1xuICBkaXNwbGF5LFxuICBpc0Rpc2FibGVkLFxuICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkaXNwbGF5fVxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdENoaWxkLCBSZWFjdEVsZW1lbnQsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IHsgQ2xpY2thYmxlIH0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG5pbXBvcnQgeyBNZW51LCBNZW51Q29udGFpbmVyLCBNZW51SXRlbSwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuLi9NZW51XCI7XG5cbmV4cG9ydCB0eXBlIEl0ZW0gPSB7IGlkOiBudW1iZXIgfCBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJEaXNwbGF5UHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gUGljazxcbiAgRHJvcGRvd25Qcm9wczxUPixcbiAgXCJkaXNwbGF5XCIgfCBcInNlbGVjdGVkSXRlbVwiXG4+ICYgeyBpc0Rpc2FibGVkOiBib29sZWFuOyB0b2dnbGVJc09wZW46ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xpY2thYmxlRm48VCBleHRlbmRzIEl0ZW0+ID0gKFxuICBwcm9wczogUmVuZGVyRGlzcGxheVByb3BzPFQ+XG4pID0+IFJlYWN0RWxlbWVudDtcblxuZXhwb3J0IHR5cGUgSXRlbUJvZHlSZW5kZXJlckZuPFQgZXh0ZW5kcyBJdGVtPiA9IChzdGF0ZToge1xuICBpdGVtOiBUO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufSkgPT4gUmVhY3RDaGlsZDtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blByb3BzPFQgZXh0ZW5kcyBJdGVtPiB7XG4gIGl0ZW1Cb2R5UmVuZGVyZXI/OiBJdGVtQm9keVJlbmRlcmVyRm48VD47XG4gIGl0ZW1zOiBUW107XG4gIG9uU2VsZWN0OiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgZGlzcGxheTogUmVhY3RDaGlsZDtcbiAgcmVuZGVyQ2xpY2thYmxlPzogUmVuZGVyQ2xpY2thYmxlRm48VD47XG4gIHNlbGVjdGVkSXRlbTogVCB8IG51bGw7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bjxUIGV4dGVuZHMgSXRlbT4oe1xuICBpdGVtQm9keVJlbmRlcmVyLFxuICBpdGVtcyxcbiAgb25TZWxlY3Q6IGhhbmRsZVNlbGVjdCxcbiAgZGlzcGxheSxcbiAgcmVuZGVyQ2xpY2thYmxlLFxuICBzZWxlY3RlZEl0ZW0sXG4gIHBsYWNlbWVudCA9IHsgdmVydGljYWw6IFwiYm90dG9tXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH1cbn06IERyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHNldElzT3BlbihmYWxzZSkpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBUKSA9PiB7XG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xuICBjb25zdCB0b2dnbGVJc09wZW4gPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8TWVudUNvbnRhaW5lclxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICAgIHJlbmRlckNsaWNrYWJsZSh7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHRvZ2dsZUlzT3BlbixcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDbGlja2FibGVcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlSXNPcGVufVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudD17cGxhY2VtZW50fVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgPE1lbnUgaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXRlbXMgJiZcbiAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDbGljayhpdGVtKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW1Cb2R5UmVuZGVyZXJcbiAgICAgICAgICAgICAgICA/IGl0ZW1Cb2R5UmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICA8L01lbnU+XG4gICAgPC9NZW51Q29udGFpbmVyPlxuICApO1xufVxuIiwiZXhwb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duUHJvcHMsXG4gIEl0ZW0gYXMgRHJvcGRvd25JdGVtLFxuICBJdGVtQm9keVJlbmRlcmVyRm4gYXMgRHJvcGRvd25JdGVtQm9keVJlbmRlcmVyRm4sXG4gIFJlbmRlckNsaWNrYWJsZUZuIGFzIERyb3Bkb3duUmVuZGVyQ2xpY2thYmxlRm4sXG4gIFJlbmRlckRpc3BsYXlQcm9wcyBhcyBEcm9wZG93blJlbmRlckRpc3BsYXlQcm9wcyxcbn0gZnJvbSBcIi4vRHJvcGRvd25cIjtcbmV4cG9ydCB7XG4gIENsaWNrYWJsZSBhcyBEcm9wZG93bkNsaWNrYWJsZSxcbiAgQ2xpY2thYmxlUHJvcHMgYXMgRHJvcGRvd25DbGlja2FibGVQcm9wc1xufSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFNpemUgPSBTaXplO1xuXG50eXBlIFByb3BzID0ge1xuICBvbkNoYW5nZTogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XG59O1xuXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xuICBjaGlsZHJlbixcbiAgYWNjZXB0LFxuICBvbkNoYW5nZSxcbiAgaW5wdXRSZWYsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaWQ9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6XG4gICAgfCBcInJpZ2h0XCJcbiAgICB8IFwicmlnaHRFZGdlXCJcbiAgICB8IFwicmlnaHRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0XCJcbiAgICB8IFwibGVmdEVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICB2ZXJ0aWNhbDpcbiAgICB8IFwidG9wXCJcbiAgICB8IFwidG9wRWRnZVwiXG4gICAgfCBcInRvcE9uRWRnZVwiXG4gICAgfCBcImJvdHRvbVwiXG4gICAgfCBcImJvdHRvbUVkZ2VcIlxuICAgIHwgXCJib3R0b21PbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgcGFyZW50OiBcInZpZXdwb3J0XCIgfCBcImNvbnRhaW5lclwiO1xufTtcblxudHlwZSBGbG9hdGluZ1BhbmVsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXG4gIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiYm90dG9tXCIsIHBhcmVudDogXCJ2aWV3cG9ydFwiIH0sXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50Lmhvcml6b250YWwgPT09IFwiY2VudGVyXCJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XG5cbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb2F0aW5nUGFuZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZsb2F0aW5nUGFuZWwgfSBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xuXG50eXBlIEljb25Qcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcbn07XG5cbmZ1bmN0aW9uIEljb24oe1xuICBzcmMsXG4gIGFsdCxcbiAgY29udGFpbmVyUmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbn06IEljb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXG4gICAgICBdKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xuXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgc3JjOiBzdHJpbmc7XG4gICAgICBhbHQ6IHN0cmluZztcbiAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNyYyxcbiAgYWx0LFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogSWNvbkJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiO1xuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCI7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZyA9IFwiYXV0b1wiLFxuICBsb2FkaW5nID0gXCJlYWdlclwiLFxuICBzdHlsZSxcbn06IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gKFxuICAgIDxpbWdcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5pbWFnZSwgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cbiAgICAgIGhlaWdodD17c3JjSGVpZ2h0fVxuICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAvPlxuICApO1xuXG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAge2ltYWdlRWxlbWVudH1cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgaW1hZ2VFbGVtZW50XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MYWJlbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XG4gIHZhbHVlOiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIHZhbHVlLCBjb250YWluZXJSZWYgfTogTGFiZWxJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfVxuICAgID5cbiAgICAgIHt2YWx1ZX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgICBzaXplOiBTaXplO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYXM6IENvbXBvbmVudCxcbiAgYWN0aXZlID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvbkxpbmtcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b25MaW5rPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWZPYmplY3QsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgUGxhY2VtZW50Q29udGV4dCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xuICBzbWFydExheW91dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBNZW51KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgY2xhc3NOYW1lLFxuICBpc09wZW4gPSB0cnVlLFxuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgc21hcnRMYXlvdXQgPSB0cnVlLFxufTogTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVQbGFjZW1lbnQgPSB1c2VDb250ZXh0KFBsYWNlbWVudENvbnRleHQpO1xuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZWYgPSBjb250YWluZXJSZWYgfHwgaW5uZXJSZWY7XG5cbiAgaWYgKCFtZW51UGxhY2VtZW50KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWVudSBjb21wb25lbnQgbXVzdCBiZSB3cmFwcGVkIGJ5IGEgTWVudUNvbnRhaW5lciBjb21wb25lbnQuXCJcbiAgICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNtYXJ0TGF5b3V0ICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9FZGdlID1cbiAgICAgICAgbWVudVBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJ0b3BcIiA/IHRvcCA6IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgaWYgKGRpc3RhbmNlVG9FZGdlIDwgMCkge1xuICAgICAgICBjb25zdCB1bEVsID0gcmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gdWxFbC5xdWVyeVNlbGVjdG9yQWxsKFwibGksYVwiKTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gdWxFbC5jbGllbnRIZWlnaHQgKyBkaXN0YW5jZVRvRWRnZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2hpbGRFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICA/IGdldENvbXB1dGVkU3R5bGUoY2hpbGRFbGVtZW50c1swXSkubWluSGVpZ2h0XG4gICAgICAgICAgOiAwO1xuICAgICAgICB1bEVsLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7bmV3SGVpZ2h0fXB4IC0gJHtvZmZzZXR9KWA7XG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNPcGVuLCBtZW51UGxhY2VtZW50LCBzbWFydExheW91dF0pO1xuXG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cbiAgICAgICAgICA8dWw+e2NoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVhY3RFbGVtZW50LFxuICBmb3J3YXJkUmVmLFxuICBGb3J3YXJkZWRSZWYsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBNZW51UGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOiBcInJpZ2h0XCIgfCBcImxlZnRcIjtcbiAgdmVydGljYWw6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBNZW51Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGJ1dHRvbj86IFJlYWN0RWxlbWVudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IFBsYWNlbWVudENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuICBNZW51Q29udGFpbmVyUHJvcHNbXCJwbGFjZW1lbnRcIl0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuZnVuY3Rpb24gTWVudUNvbnRhaW5lcihcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGJ1dHRvbixcbiAgICBjbGFzc05hbWUsXG4gICAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImxlZnRcIiwgdmVydGljYWw6IFwiYm90dG9tXCIgfSxcbiAgfTogTWVudUNvbnRhaW5lclByb3BzLFxuICByZWY6IEZvcndhcmRlZFJlZjxIVE1MRGl2RWxlbWVudD5cbikge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHtidXR0b259XG4gICAgICA8UGxhY2VtZW50Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dXNlTWVtbygoKSA9PiBwbGFjZW1lbnQsIFtwbGFjZW1lbnRdKX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tZW51Q29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC5ob3Jpem9udGFsXSxcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUGxhY2VtZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZihNZW51Q29udGFpbmVyKTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmNvbnN0IHBvcERpZ2l0ID0gKG51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKG51bWJlciAvIDEwKTtcbn07XG5cbmNvbnN0IGV2ZW50RGlnaXRLZXlzID0gW1wiMFwiLCBcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1wYWRQcm9wcyB7XG4gIG51bWJlcjogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiAobmV3TnVtYmVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOdW1wYWQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBOdW1wYWRQcm9wcz4oXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7ICAgIFxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJCYWNrc3BhY2VcIikge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKHBvcERpZ2l0KG51bWJlcikpO1xuICAgICAgfSBlbHNlIGlmIChldmVudERpZ2l0S2V5cy5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkaWdpdCA9IHBhcnNlSW50KGUua2V5LCAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIG9uQ2hhbmdlKGFwcGVuZERpZ2l0KG51bWJlciwgZGlnaXQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlRW1pdE51bWJlckhhbmRsZXIgPSAobmV3TnVtYmVyOiBudW1iZXIpID0+XG4gICAgICAoZTogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKG5ld051bWJlcik7XG4gICAgICB9O1xuXG4gICAgY29uc3QgTnVtcGFkS2V5cyA9IEFycmF5KDEwKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG51bXBhZFZhbHVlID0gKChpbmRleCArIDEpICUgMTApIGFzIERpZ2l0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bnVtcGFkVmFsdWV9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bXBhZH0gcmVmPXtyZWZ9IHRhYkluZGV4PXstMX0gb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufSBkYXRhLXRlc3RpZD1cIm51bXBhZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xufTtcblxuZnVuY3Rpb24gR3JvdXBPcHRpb24oeyBjbGFzc05hbWUsIGxhYmVsLCBvcHRpb25zIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2hvd0V4cGFuZGVkR3JvdXAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG4gIGNvbnN0IFtleHBhbmRlZCwgdG9nZ2xlRXhwYW5kXSA9IHVzZVRvZ2dsZShzaG93RXhwYW5kZWRHcm91cCk7XG5cbiAgY29uc3QgaGFuZGxlR3JvdXBDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVFeHBhbmQoKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gb25DbGljaz17aGFuZGxlR3JvdXBDbGlja30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntsYWJlbH08L2Rpdj5cbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHsgW3N0eWxlcy5leHBhbmRlZF06IGV4cGFuZGVkIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgIGFsdD17ZXhwYW5kZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge2V4cGFuZGVkICYmXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgc2VsZWN0ZWRPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5zZWxlY3RlZF06IGlzQ2hlY2tlZCAmJiAhbXVsdGlwbGUgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vPEFycmF5PEdyb3VwT3B0aW9uVHlwZSB8IE9wdGlvblR5cGU+PigoKSA9PiB7XG4gICAgaWYgKGhhc0dyb3VwT3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChmaWx0ZXJlZDogQXJyYXk8R3JvdXBPcHRpb25UeXBlPiwgZ3JvdXBPcHRpb246IEdyb3VwT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhncm91cE9wdGlvbi5vcHRpb25zKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJlZEdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLmZpbHRlcmVkLFxuICAgICAgICAgICAgICB7IC4uLmdyb3VwT3B0aW9uLCBvcHRpb25zOiBmaWx0ZXJlZEdyb3VwT3B0aW9ucyB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyT3B0aW9ucyhvcHRpb25zIGFzIEFycmF5PE9wdGlvblR5cGU+KTtcbiAgICB9XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgb3B0aW9ucywgc2VhcmNoS2V5d29yZF0pO1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5yZWR1Y2UoKGxlbmd0aDogbnVtYmVyLCBuZXh0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoaXNPcHRpb24obmV4dE9wdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgbmV4dE9wdGlvbi5vcHRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBmaWx0ZXJlZE9wdGlvbnMsIGlzT3B0aW9uXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMuZmluZCgoZmlsdGVyZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKVxuICAgICAgICAgID8gZmlsdGVyZWRPcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KS5sZW5ndGg7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnMsIGZpbHRlcmVkT3B0aW9uc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgY29uc3Qgb3B0aW9uc1RvU2VsZWN0ID0gZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5tYXAoKGZpbHRlcmVkT3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKSA/IGZpbHRlcmVkT3B0aW9uIDogZmlsdGVyZWRPcHRpb24ub3B0aW9uc1xuICAgICAgICApXG4gICAgICAgIC5mbGF0KCk7XG5cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zVG9TZWxlY3QpO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2Uob3B0aW9uc1RvU2VsZWN0Lm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoW10pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoKTtcbiAgfSwgW1xuICAgIGZpbHRlcmVkT3B0aW9ucyxcbiAgICBpc09wdGlvbixcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbnNDb3VudCA9PT0gZmlsdGVyZWRPcHRpb25zQ291bnQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCxcbiAgICBmaWx0ZXJlZE9wdGlvbnNDb3VudCxcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0QWxsQ29udGFpbmVyfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RBbGxDaGVja2VkfVxuICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkT3B0aW9uc0NvdW50ICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT09IGZpbHRlcmVkT3B0aW9uc0NvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7ISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBmaWx0ZXJlZE9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEdyb3VwT3B0aW9uXG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb24ub3B0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+XG4gICAgICAgICAgTm8gbWF0Y2hlcyBmb3JcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hLZXl3b3JkfT57YCAke3NlYXJjaEtleXdvcmR9YH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uTGlzdDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uTGlzdCwgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWFyY2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tIFwiLi4vLi4vVGV4dElucHV0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL0ljb25cIjtcbmltcG9ydCBpY29uU2VhcmNoIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VhcmNoLnN2Z1wiO1xuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBTZWFyY2goeyBjbGFzc05hbWUgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoS2V5d29yZCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2VhcmNoS2V5d29yZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWFyY2hLZXl3b3JkKFwiXCIpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgIDxJY29uIHNyYz17aWNvblNlYXJjaH0gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICB2YWx1ZT17c2VhcmNoS2V5d29yZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaC4uLlwiXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlfVxuICAgICAgICBub0JvcmRlclxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlc2V0QnV0dG9ufVxuICAgICAgICBzcmM9e2ljb25Dcm9zc2VkfVxuICAgICAgICBhbHQ9XCJDbGVhclwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrfVxuICAgICAgICBkaXNhYmxlZD17IXNlYXJjaEtleXdvcmR9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL1NlYXJjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M/OiBib29sZWFuO1xuICBzaG93U2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzY3JvbGxNZW51SW50b1ZpZXc/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgd2lkdGg6IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzY3JvbGxNZW51SW50b1ZpZXcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyA9IGZhbHNlLFxuICBzaG93U2VhcmNoID0gZmFsc2UsXG4gIHdpZHRoLFxuICBvbkNoYW5nZSxcbiAgb25GaWx0ZXIsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBbb3BlbmVkLCB0b2dnbGVPcGVuZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gdG9nZ2xlT3BlbmVkKGZhbHNlKSk7XG4gIGNvbnN0IGNvbnRlbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQgfHwgIW9wZW5lZCB8fCAhc2Nyb2xsTWVudUludG9WaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IFJPID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTtcbiAgICBSTy5vYnNlcnZlKGNvbnRlbnRSZWYuY3VycmVudCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgUk8uZGlzY29ubmVjdCgpO1xuICAgICAgUk8gPSBudWxsO1xuICAgIH07XG4gIH0sIFtvcGVuZWQsIHNjcm9sbE1lbnVJbnRvVmlldywgb25SZXNpemVdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICBzaG93RXhwYW5kZWRHcm91cD17c2hvd0V4cGFuZGVkR3JvdXB9XG4gICAgPlxuICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgIHtsYWJlbCA/IDxMYWJlbCB2YWx1ZT17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmhlYWRlciwgeyBbc3R5bGVzLmFjdGl2ZV06IG9wZW5lZCB9XSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgICAgICBpc0Ryb3Bkb3duT3BlbmVkPXtvcGVuZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb25CdXR0b24sXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge29wZW5lZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9IHJlZj17Y29udGVudFJlZn0+XG4gICAgICAgICAgICAgIHtvcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+Tm8gb3B0aW9ucyBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaCAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8T3B0aW9uTGlzdFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1NlbGVjdENvbnRleHRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG50eXBlIFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hLZXl3b3JkOiBzdHJpbmc7XG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZTogZmFsc2UsXG4gIHNlbGVjdEFsbDogZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwOiB0cnVlLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKHZhbHVlOiBPcHRpb25UeXBlKSA9PiB7fSxcbiAgc2VhcmNoS2V5d29yZDogXCJcIixcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHt9LFxuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4ge30sXG59O1xuXG5jb25zdCBTZWxlY3RDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTZWxlY3RDb250ZXh0U3RhdGU+KGluaXRpYWxTdGF0ZSk7XG5cbmNvbnN0IFNlbGVjdENvbnRleHRQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxuICBkZWZhdWx0VmFsdWUsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIHNlbGVjdEFsbCA9IGZhbHNlLFxuICBzaG93RXhwYW5kZWRHcm91cCA9IHRydWUsXG4gIG9wdGlvbnMsXG4gIG9uQ2hhbmdlLFxufTogUHJvcHMpID0+IHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvblR5cGVbXT4oXG4gICAgaW5pdGlhbFN0YXRlLnNlbGVjdGVkT3B0aW9uc1xuICApO1xuICBjb25zdCBbc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZF0gPSB1c2VTdGF0ZShcbiAgICBpbml0aWFsU3RhdGUuc2VhcmNoS2V5d29yZFxuICApO1xuXG4gIGNvbnN0IHVwZGF0ZVNlbGVjdGVkT3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnM7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucy5zb21lKFxuICAgICAgICAgICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKVxuICAgICAgICAgIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbb3B0aW9uXTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodXBkYXRlZFNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgOiBbZGVmYXVsdFZhbHVlXTtcblxuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoKGFsbCwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uaXRlbS5vcHRpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0VmFsdWUsIG9wdGlvbnNdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TZWxlY3RDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgU2VsZWN0Q29udGV4dCwgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3Rvci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRhZyB9IGZyb20gXCIuLi8uLi9UYWdcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NlbGVjdGVkQXNUYWdzOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbmVkOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0b3Ioe1xuICBwbGFjZWhvbGRlcixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzLFxuICBpc0Ryb3Bkb3duT3BlbmVkLFxufTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMsIG11bHRpcGxlLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0NsaWNrID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVUYWdDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3RlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHBsYWNlaG9sZGVyVG9TaG93ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzRHJvcGRvd25PcGVuZWQgfSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApLFxuICAgIFtwbGFjZWhvbGRlciwgaXNEcm9wZG93bk9wZW5lZF1cbiAgKTtcblxuICBjb25zdCBzaG93QXNUYWdzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzZWxlY3RlZE9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBrZXk9e3ZhbHVlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50YWdXcmFwcGVyfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVUYWdDbGlja31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFRhZyBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9IGNsb3NhYmxlIG9uQ2xvc2U9e2hhbmRsZVRhZ0Nsb3NlfT5cbiAgICAgICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgICAgIDwvVGFnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICkpfVxuICAgICAgICA8Lz5cbiAgICAgICksXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgcGxhY2Vob2xkZXJUb1Nob3ddXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGV4dCA9IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9uc31cbiAgICA+e2Ake3BsYWNlaG9sZGVyfSAoJHtzZWxlY3RlZE9wdGlvbnMubGVuZ3RofSlgfTwvc3Bhbj5cbiAgKSA6IChcbiAgICBwbGFjZWhvbGRlclRvU2hvd1xuICApO1xuXG4gIGxldCBjb250ZW50O1xuICBpZiAobXVsdGlwbGUpIHtcbiAgICBjb250ZW50ID0gc2hvd1NlbGVjdGVkQXNUYWdzID8gc2hvd0FzVGFncyA6IHNob3dBc1RleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICApIDogKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb259PntzZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWx9PC9zcGFuPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3I7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdG9yIH0gZnJvbSBcIi4vU2VsZWN0b3JcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vU2VsZWN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBMaXN0T25TY3JvbGxQcm9wcyB9IGZyb20gXCJyZWFjdC13aW5kb3dcIjtcbmltcG9ydCBJbmZpbml0ZUxvYWRlciBmcm9tIFwicmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlclwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSBcIi4vVGFibGVIZWFkZXJcIjtcbmltcG9ydCBUYWJsZVJvdyBmcm9tIFwiLi9UYWJsZVJvd1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZS5tb2R1bGUuY3NzXCI7XG5cblxuXG5cbmV4cG9ydCB0eXBlIENvbHVtblR5cGUgPSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YUluZGV4OiBzdHJpbmc7XG4gIHJlbmRlcj86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nKSA9PiBKU1guRWxlbWVudDtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGRlZmF1bHRTb3J0T3JkZXI/OiBTb3J0T3JkZXI7XG4gIHNvcnRlZD86IGJvb2xlYW47XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgb25Tb3J0PzogKHNvcnRPcmRlcjogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBkYXRhU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIHRhYmxlSGVpZ2h0OiBudW1iZXI7XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICBvbkxvYWRNb3JlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2V0UGFnZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgcm93SGVpZ2h0PzogbnVtYmVyO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG4gIGRpc2FibGVMYXp5TG9hZGVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGl0ZW1zQ291bnQ/OiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGFzVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFRhYmxlKHtcbiAgY29sdW1ucyxcbiAgZGF0YVNvdXJjZSxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIG9uTG9hZE1vcmUsXG4gIHBhZ2UsXG4gIHNldFBhZ2UsXG4gIHBhZ2VTaXplID0gVGFibGVDb25maWcuUEFHRV9TSVpFLFxuICB0YWJsZUhlaWdodCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJvd0hlaWdodCA9IFRhYmxlQ29uZmlnLlJPV19IRUlHSFQsXG4gIGhlYWRlckhlaWdodCA9IFRhYmxlQ29uZmlnLkhFQURFUl9IRUlHSFQsXG4gIGRpc2FibGVMYXp5TG9hZGVyLFxuICBhY3RpdmVSb3dzLFxuICBpdGVtc0NvdW50LFxuICBpc0hlYWRlclN0aWNreSA9IGZhbHNlLFxuICBoYXNWaXJ0dWFsU2Nyb2xsID0gdHJ1ZSxcbiAgY2xhc3NOYW1lLFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3Njcm9sbFRvcCwgc2V0U2Nyb2xsVG9wXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHJlbmRlclJvdyA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGRhdGEsIGluZGV4LCBzdHlsZSB9OiB7IGRhdGE6IGFueTsgaW5kZXg6IG51bWJlcjsgc3R5bGU6IGFueSB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhW2luZGV4XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIHRvcDogc3R5bGUudG9wIH19PlxuICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3cuaWRdfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjb2x1bW5zLCBhY3RpdmVSb3dzLCBoYXNBcnJvdywgcm93SGVpZ2h0LCBvblJvd0NsaWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBzY3JvbGxPZmZzZXQgfTogTGlzdE9uU2Nyb2xsUHJvcHMpID0+IHtcbiAgICAgIHNldFNjcm9sbFRvcChzY3JvbGxPZmZzZXQpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT09IGl0ZW1zQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPCBwYWdlU2l6ZSAqIHBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2V0UGFnZSAmJiBvbkxvYWRNb3JlKSB7XG4gICAgICBzZXRQYWdlKHBhZ2UgKyAxKTtcbiAgICAgIG9uTG9hZE1vcmUocGFnZSArIDEpO1xuICAgIH1cbiAgfSwgW1xuICAgIGRpc2FibGVMYXp5TG9hZGVyLFxuICAgIGRhdGFTb3VyY2UubGVuZ3RoLFxuICAgIGl0ZW1zQ291bnQsXG4gICAgcGFnZVNpemUsXG4gICAgcGFnZSxcbiAgICBzZXRQYWdlLFxuICAgIG9uTG9hZE1vcmUsXG4gIF0pO1xuXG4gIGNvbnN0IGlzSXRlbUxvYWRlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aCAtIFRhYmxlQ29uZmlnLklURU1TX0xPQURFRDtcbiAgICB9LFxuICAgIFtkYXRhU291cmNlLmxlbmd0aCwgZGlzYWJsZUxhenlMb2FkZXJdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2hhc1ZpcnR1YWxTY3JvbGwgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFibGV9PlxuICAgICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ISFwbGFjZWhvbGRlciAmJiAhZGF0YVNvdXJjZS5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5wbGFjZWhvbGRlckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEluZmluaXRlTG9hZGVyXG4gICAgICAgICAgICAgICAgaXNJdGVtTG9hZGVkPXtpc0l0ZW1Mb2FkZWR9XG4gICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICBsb2FkTW9yZUl0ZW1zPXtsb2FkTW9yZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoeyBvbkl0ZW1zUmVuZGVyZWQsIHJlZiB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Rml4ZWRTaXplTGlzdFxuICAgICAgICAgICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt0YWJsZUhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE9e2RhdGFTb3VyY2V9XG4gICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVMaXN0U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ9e29uSXRlbXNSZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUm93fVxuICAgICAgICAgICAgICAgICAgPC9GaXhlZFNpemVMaXN0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgaXNIZWFkZXJTdGlja3k9e2lzSGVhZGVyU3RpY2t5fVxuICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZGF0YVNvdXJjZS5tYXAoKHJvdywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3c/LmlkXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlckNlbGwgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXIoe1xuICBjb2x1bW5zLFxuICBzY3JvbGxUb3AsXG4gIGlzSGVhZGVyU3RpY2t5LFxuICBoZWFkZXJIZWlnaHQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuYm9yZGVyQm90dG9tXTogISFzY3JvbGxUb3AgfSxcbiAgICAgICAgeyBbc3R5bGVzLmlzSGVhZGVyU3RpY2t5XTogaXNIZWFkZXJTdGlja3kgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgfX1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlSGVhZGVyQ2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLWhlYWQtY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IGljb25DYXJldFVwIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtdXAuc3ZnXCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyQ2VsbCh7IGNvbHVtbiB9OiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgb25Tb3J0LFxuICAgIHNvcnRhYmxlLFxuICAgIHNvcnRlZCxcbiAgICBkZWZhdWx0U29ydE9yZGVyLFxuICAgIHRpdGxlLFxuICAgIHdpZHRoLFxuICAgIGNsYXNzTmFtZSxcbiAgfSA9IGNvbHVtbjtcblxuICBjb25zdCBbc29ydE9yZGVyLCBzZXRTb3J0T3JkZXJdID0gdXNlU3RhdGUoXG4gICAgKCkgPT4gZGVmYXVsdFNvcnRPcmRlciB8fCBTb3J0T3JkZXIuREVTQ1xuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNvcnRDb2x1bW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzb3J0ZWQpIHtcbiAgICAgIHJldHVybiBvblNvcnQoc29ydE9yZGVyKTtcbiAgICB9XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MgPyBTb3J0T3JkZXIuQVNDIDogU29ydE9yZGVyLkRFU0M7XG4gICAgc2V0U29ydE9yZGVyKG5ld1NvcnRPcmRlcik7XG4gICAgb25Tb3J0KG5ld1NvcnRPcmRlcik7XG4gIH0sIFtvblNvcnQsIHNvcnRPcmRlciwgc29ydGVkXSk7XG5cbiAgY29uc3QgY2VsbFByb3BzID1cbiAgICBvblNvcnQgJiYgc29ydGFibGVcbiAgICAgID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZVNvcnRDb2x1bW4sXG4gICAgICAgIH1cbiAgICAgIDoge307XG5cbiAgY29uc3QgZGlzcGxheUFycm93ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MpIHtcbiAgICAgIHJldHVybiBpY29uQ2FyZXREb3duO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbkNhcmV0VXA7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY2VsbFByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50YWJsZUhlYWRlckNlbGwsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc29ydEljb25WaXNpYmxlXTogc29ydGFibGUgJiYgc29ydGVkLFxuICAgICAgICAgIFtzdHlsZXMuc29ydGFibGVdOiBzb3J0YWJsZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICA+XG4gICAgICB7dGl0bGV9XG4gICAgICB7c29ydGFibGUgPyAoXG4gICAgICAgIDxJY29uIGFsdD17XCJTb3J0IGJ1dHRvblwifSBzaXplPVwic21hbGxcIiBzcmM9e2Rpc3BsYXlBcnJvdygpfSAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVSb3dDZWxsIGZyb20gXCIuL1RhYmxlUm93Q2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3cubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3coe1xuICBkYXRhLFxuICBjb2x1bW5zLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgcm93SGVpZ2h0LFxuICBpc0FjdGl2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvblJvd0NsaWNrICYmIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBvblJvd0NsaWNrKGRhdGEpO1xuICAgIH1cbiAgfSwgW2RhdGEsIG9uUm93Q2xpY2tdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5oYXNBcnJvd106IGhhc0Fycm93LFxuICAgICAgICAgIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZVJvd0NsaWNrfVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVSb3dDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtcm93LWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGl0ZW09e2RhdGF9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGl0ZW06IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvd0NlbGwoeyBpdGVtLCBjb2x1bW4sIHJvd0hlaWdodCB9OiBQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gaXRlbSA6IGl0ZW1bY29sdW1uLmRhdGFJbmRleF07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjb2x1bW4uY2xhc3NOYW1lXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IHJvd0hlaWdodCwgd2lkdGg6IGNvbHVtbj8ud2lkdGggfX1cbiAgICA+XG4gICAgICB7Y29sdW1uLnJlbmRlciA/IGNvbHVtbi5yZW5kZXIoZGF0YSkgOiBkYXRhfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvd0NlbGw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcIi4vVGFibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2xvc2FibGU/OiBib29sZWFuO1xuICB2YWx1ZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUYWcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjbG9zYWJsZSxcbiAgdmFsdWUsXG4gIG9uQ2xvc2UsXG4gIGRpc2FibGVkLFxuICBvbkRlbGV0ZSxcbiAgaWQsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvbkNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2xvc2UsIG9uRGVsZXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIHdpdGhTY3JvbGw/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB3aXRoU2Nyb2xsID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoeyBpZDogdXVpZHY0KCksIGxhYmVsOiB0YWcgfSkpO1xuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKTtcbiAgICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFnc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdBZGQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZFRleHQgPSB0ZXh0LnRyaW0oKTtcbiAgICBsZXQgdXBkYXRlZFRhZ3MgPSBbLi4udGFnc107XG5cbiAgICBpZiAodHJpbW1lZFRleHQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnID0geyBpZDogdXVpZHY0KCksIGxhYmVsOiB0cmltbWVkVGV4dCB9O1xuICAgICAgdXBkYXRlZFRhZ3MgPSBbLi4udGFncywgdGFnXTtcbiAgICB9XG5cbiAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICBzZXRUZXh0KFwiXCIpO1xuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBjb25zdCB0YWdzQXJyID0gdXBkYXRlZFRhZ3MubWFwKCh0YWcpID0+IHRhZy5sYWJlbCk7XG4gICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt0YWdzLCB0ZXh0LCBzZXRUYWdzLCBzZXRUZXh0XSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PT0gXCJFbnRlclwiIHx8IGUuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaGFuZGxlVGFnQWRkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlVGFnQWRkXVxuICApO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBoYW5kbGVUYWdBZGQoKSk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxIaW50IG9wdGlvbnM9e3RhZ09wdGlvbnN9IGFsbG93RW50ZXJGaWxsPXt0cnVlfSBhbGxvd1RhYkZpbGw9e3RydWV9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgICBdKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgIDwvSGludD5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCwgW3N0eWxlcy5zY3JvbGxhYmxlXTogd2l0aFNjcm9sbCB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHt0YWdzPy5tYXAoKHsgaWQsIGxhYmVsIH0pID0+IChcbiAgICAgICAgPFRhZyBrZXk9e2lkfSB2YWx1ZT17bGFiZWx9IGlkPXtpZH0gb25EZWxldGU9e2hhbmRsZVRhZ0RlbGV0ZX0gY2xvc2FibGU+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICA8L1RhZz5cbiAgICAgICkpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWdJbnB1dH0+e2lucHV0RWxlbWVudH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFRhZ3NJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnc0lucHV0IH0gZnJvbSBcIi4vVGFnc0lucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dE1vZGUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGlucHV0TW9kZT86IFRleHRJbnB1dE1vZGU7XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgaW5wdXRNb2RlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIgfSxcbiAgICAgIF0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdCB9IGZyb20gXCIuL1RvYXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHNjcm9sbFBhcmVudCBmcm9tIFwic2Nyb2xscGFyZW50XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9vbHRpcC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9vbHRpcFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHBsYWNlbWVudDogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIjtcbiAgcG9zaXRpb24/OiBcImFic29sdXRlXCIgfCBcImZpeGVkXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc2hvd1Rvb2x0aXA6IGJvb2xlYW47XG59O1xuXG5jb25zdCBtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzID0gKFxuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIgfCBcImZpeGVkXCIsXG4gIHJlY3Q6IERPTVJlY3RcbikgPT4ge1xuICBjb25zdCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9ID0gcmVjdDtcbiAgbGV0IHBvc2l0aW9uU3R5bGVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0IC8gMixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCAvIDIsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCAvIDIsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRvcFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBsZWZ0ICsgd2lkdGggLyAyLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uID09PSBcImFic29sdXRlXCJcbiAgICA/IHtcbiAgICAgICAgdG9wOiBwb3NpdGlvblN0eWxlcy50b3AgKyB3aW5kb3cuc2Nyb2xsWSxcbiAgICAgICAgbGVmdDogcG9zaXRpb25TdHlsZXMubGVmdCArIHdpbmRvdy5zY3JvbGxYLFxuICAgICAgfVxuICAgIDogcG9zaXRpb25TdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIHBsYWNlbWVudCxcbiAgcG9zaXRpb24gPSBcImFic29sdXRlXCIsXG4gIHNob3dUb29sdGlwLFxuICBjbGFzc05hbWUsXG59OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Bvc2l0aW9uU3R5bGVzLCBzZXRQb3NpdGlvblN0eWxlc10gPSB1c2VTdGF0ZSh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gIH0pO1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQ+KG51bGwpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKTtcblxuICBjb25zdCB1cGRhdGVQb3NpdGlvblN0eWxlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uU3R5bGVzID0gbWFwUGxhY2VtZW50VG9Qb3NpdGlvblN0eWxlcyhcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcmVjdFxuICAgICk7XG4gICAgc2V0UG9zaXRpb25TdHlsZXMobmV3UG9zaXRpb25TdHlsZXMpO1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtwbGFjZW1lbnQsIHBvc2l0aW9uXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uVG91Y2hTdGFydEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgdGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfSwgNTAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB0aW1lclJlZi5jdXJyZW50ICYmIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250YWluZXJSZWYuY3VycmVudCB8fCBwb3NpdGlvbiAhPT0gXCJhYnNvbHV0ZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudCA9IHNjcm9sbFBhcmVudChjb250YWluZXJSZWYuY3VycmVudCk7XG4gICAgaWYgKCFzY3JvbGxhYmxlUGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGlkZVRvb2x0aXAgPSAoKSA9PiBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgICBzY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGlkZVRvb2x0aXApO1xuICAgIHNjcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoaWRlVG9vbHRpcCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoaWRlVG9vbHRpcCk7XG4gICAgICBzY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGlkZVRvb2x0aXApO1xuICAgIH07XG4gIH0sIFtwb3NpdGlvbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIG9uVG91Y2hTdGFydD17b25Ub3VjaFN0YXJ0SGFuZGxlcn1cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgb25Nb3VzZUxlYXZlPXtvbk1vdXNlTGVhdmV9XG4gICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kSGFuZGxlcn1cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtjcmVhdGVQb3J0YWwoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dUb29sdGlwICYmIHRvb2x0aXBJc1Zpc2libGUgPyAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXtwb3NpdGlvblN0eWxlc31cbiAgICAgICAgICAgICAgZGF0YS10ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMudG9vbHRpcCxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50XSxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcG9zaXRpb25dLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz4sXG4gICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb29sdGlwIH0gZnJvbSBcIi4vVG9vbHRpcFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xuXG4vKipcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXG4gKi9cblxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICA+XG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgPC92aWRlbz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcbiIsImV4cG9ydCBlbnVtIFRhYmxlQ29uZmlnIHtcbiAgUk9XX0hFSUdIVCA9IDQ4LFxuICBIRUFERVJfSEVJR0hUPTMyLFxuICBQQUdFX1NJWkUgPSAxMDAsXG4gIElURU1TX0xPQURFRCA9IDUsXG59XG4iLCJleHBvcnQgKiBmcm9tIFwiLi4vY29uc3RhbnRzL1RhYmxlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25CYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yUGlja2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Ryb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbGVJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MaXN0Vmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL051bXBhZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1NlbGVjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWJsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnc0lucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub29sdGlwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0RyYXdlclwiO1xuIiwiZXhwb3J0IGVudW0gU29ydE9yZGVyIHtcbiAgICBBU0MgPSBcImFzY1wiLFxuICAgIERFU0MgPSBcImRlc2NcIixcbiAgfVxuIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNCA1TDcuNSAxMkwxIDUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMSAxMEw3LjUgM0wxNCAxMCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyMCAyMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wLjM5ODQzOCAwLjM5OTkwMkwxOS41OTg0IDE5LjU5OTlNMC4zOTg0MzggMTkuNTk5OUwxOS41OTg0IDAuMzk5OTAyJyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEuNSAxLjVMMTMuNSAxMy41TTEuNSAxMy41TDEzLjUgMS41JyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE1LjQ2ODUgMTUuNDY2NUwxMS4yMDE4IDExLjE5OTlNNi45MzUxNiAxMy4zMzMyQzMuNDAwNTMgMTMuMzMzMiAwLjUzNTE1NiAxMC40Njc4IDAuNTM1MTU2IDYuOTMzMkMwLjUzNTE1NiAzLjM5ODU4IDMuNDAwNTMgMC41MzMyMDMgNi45MzUxNiAwLjUzMzIwM0MxMC40Njk4IDAuNTMzMjAzIDEzLjMzNTIgMy4zOTg1OCAxMy4zMzUyIDYuOTMzMkMxMy4zMzUyIDEwLjQ2NzggMTAuNDY5OCAxMy4zMzMyIDYuOTM1MTYgMTMuMzMzMlonIHN0cm9rZT0nJTIzODk4ODkxJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjkzMzEgNC4yNjc1OEw3Ljk5OTc0IDExLjczNDJMMS4wNjY0MSA0LjI2NzU4JyBzdHJva2U9JyUyMzg5ODg5MScgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBlPXJlcXVpcmUoXCJyZWFjdFwiKTtmdW5jdGlvbiBoKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgaz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpoLGw9ZS51c2VTdGF0ZSxtPWUudXNlRWZmZWN0LG49ZS51c2VMYXlvdXRFZmZlY3QscD1lLnVzZURlYnVnVmFsdWU7ZnVuY3Rpb24gcShhLGIpe3ZhciBkPWIoKSxmPWwoe2luc3Q6e3ZhbHVlOmQsZ2V0U25hcHNob3Q6Yn19KSxjPWZbMF0uaW5zdCxnPWZbMV07bihmdW5jdGlvbigpe2MudmFsdWU9ZDtjLmdldFNuYXBzaG90PWI7cihjKSYmZyh7aW5zdDpjfSl9LFthLGQsYl0pO20oZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KTtyZXR1cm4gYShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pfSl9LFthXSk7cChkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHIoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBkPWIoKTtyZXR1cm4hayhhLGQpfWNhdGNoKGYpe3JldHVybiEwfX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIGIoKX12YXIgdT1cInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/dDpxO2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9dm9pZCAwIT09ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT9lLnVzZVN5bmNFeHRlcm5hbFN0b3JlOnU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8qXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgSmF2YVNjcmlwdCBNRDVcbiAqXG4gKiBNb2RpZmljYXRpb24gb2YgSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShtc2cubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlc1tpXSA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZDVUb0hleEVuY29kZWRBcnJheSh3b3Jkc1RvTWQ1KGJ5dGVzVG9Xb3JkcyhieXRlcyksIGJ5dGVzLmxlbmd0aCAqIDgpKTtcbn1cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYW4gYXJyYXkgb2YgYnl0ZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNVRvSGV4RW5jb2RlZEFycmF5KGlucHV0KSB7XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBjb25zdCBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuICBjb25zdCBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGgzMjsgaSArPSA4KSB7XG4gICAgY29uc3QgeCA9IGlucHV0W2kgPj4gNV0gPj4+IGkgJSAzMiAmIDB4ZmY7XG4gICAgY29uc3QgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgcmV0dXJuIChpbnB1dExlbmd0aDggKyA2NCA+Pj4gOSA8PCA0KSArIDE0ICsgMTtcbn1cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICovXG5cblxuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICBsZXQgYSA9IDE3MzI1ODQxOTM7XG4gIGxldCBiID0gLTI3MTczMzg3OTtcbiAgbGV0IGMgPSAtMTczMjU4NDE5NDtcbiAgbGV0IGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIGNvbnN0IG9sZGEgPSBhO1xuICAgIGNvbnN0IG9sZGIgPSBiO1xuICAgIGNvbnN0IG9sZGMgPSBjO1xuICAgIGNvbnN0IG9sZGQgPSBkO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMl0sIDksIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgNV0sIDQsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2ldLCAxMSwgLTM1ODUzNzIyMik7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcbiAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZUFkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBieXRlcyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkcyhpbnB1dCkge1xuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuZ3RoOCkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0W2kgLyA4XSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICBjb25zdCBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIGNvbnN0IG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gbXN3IDw8IDE2IHwgbHN3ICYgMHhmZmZmO1xufVxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFJvdGF0ZUxlZnQobnVtLCBjbnQpIHtcbiAgcmV0dXJuIG51bSA8PCBjbnQgfCBudW0gPj4+IDMyIC0gY250O1xufVxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1Z2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBkIHwgYyAmIH5kLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBtZDU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG52YXIgX2RlZmF1bHQgPSB7XG4gIHJhbmRvbVVVSURcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gcGFyc2UodXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgbGV0IHY7XG4gIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gUGFyc2UgIyMjIyMjIyMtLi4uLi0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLSMjIyMtLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLSMjIyMtLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0jIyMjLS4uLi4uLi4uLi4uLlxuXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLS4uLi4tIyMjIyMjIyMjIyMjXG4gIC8vIChVc2UgXCIvXCIgdG8gYXZvaWQgMzItYml0IHRydW5jYXRpb24gd2hlbiBiaXQtc2hpZnRpbmcgaGlnaC1vcmRlciBieXRlcylcblxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxuXG52YXIgX2RlZmF1bHQgPSBwYXJzZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBybmc7XG4vLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgY29uc3QgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcblxuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICBjb25zdCBsID0gYnl0ZXMubGVuZ3RoIC8gNCArIDI7XG4gIGNvbnN0IE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIGFycltqXSA9IGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tpICogNjQgKyBqICogNCArIDJdIDw8IDggfCBieXRlc1tpICogNjQgKyBqICogNCArIDNdO1xuICAgIH1cblxuICAgIE1baV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgVyA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgIH1cblxuICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgIH1cblxuICAgIGxldCBhID0gSFswXTtcbiAgICBsZXQgYiA9IEhbMV07XG4gICAgbGV0IGMgPSBIWzJdO1xuICAgIGxldCBkID0gSFszXTtcbiAgICBsZXQgZSA9IEhbNF07XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICBjb25zdCBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbdF0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG5cbiAgICBIWzBdID0gSFswXSArIGEgPj4+IDA7XG4gICAgSFsxXSA9IEhbMV0gKyBiID4+PiAwO1xuICAgIEhbMl0gPSBIWzJdICsgYyA+Pj4gMDtcbiAgICBIWzNdID0gSFszXSArIGQgPj4+IDA7XG4gICAgSFs0XSA9IEhbNF0gKyBlID4+PiAwO1xuICB9XG5cbiAgcmV0dXJuIFtIWzBdID4+IDI0ICYgMHhmZiwgSFswXSA+PiAxNiAmIDB4ZmYsIEhbMF0gPj4gOCAmIDB4ZmYsIEhbMF0gJiAweGZmLCBIWzFdID4+IDI0ICYgMHhmZiwgSFsxXSA+PiAxNiAmIDB4ZmYsIEhbMV0gPj4gOCAmIDB4ZmYsIEhbMV0gJiAweGZmLCBIWzJdID4+IDI0ICYgMHhmZiwgSFsyXSA+PiAxNiAmIDB4ZmYsIEhbMl0gPj4gOCAmIDB4ZmYsIEhbMl0gJiAweGZmLCBIWzNdID4+IDI0ICYgMHhmZiwgSFszXSA+PiAxNiAmIDB4ZmYsIEhbM10gPj4gOCAmIDB4ZmYsIEhbM10gJiAweGZmLCBIWzRdID4+IDI0ICYgMHhmZiwgSFs0XSA+PiAxNiAmIDB4ZmYsIEhbNF0gPj4gOCAmIDB4ZmYsIEhbNF0gJiAweGZmXTtcbn1cblxudmFyIF9kZWZhdWx0ID0gc2hhMTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy51bnNhZmVTdHJpbmdpZnkgPSB1bnNhZmVTdHJpbmdpZnk7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzdHJpbmdpZnk7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9tZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWQ1LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjMgPSAoMCwgX3YuZGVmYXVsdCkoJ3YzJywgMHgzMCwgX21kLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjM7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9uYXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25hdGl2ZS5qc1wiKSk7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKHJuZHMpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2NDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfc2hhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGExLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjUgPSAoMCwgX3YuZGVmYXVsdCkoJ3Y1JywgMHg1MCwgX3NoYS5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHY1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlZ2V4LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIF9yZWdleC5kZWZhdWx0LnRlc3QodXVpZCk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZhbGlkYXRlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInRlc3QiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiZm4iLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicHJvcHMiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsInUxIiwiZjEiLCJ1MiIsImYyIiwibWVyZ2VDb25maWdzIiwiY2FjaGVDb250ZXh0UmVmIiwiY2FjaGVDb250ZXh0IiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwiaGFzT3duUHJvcGVydHkiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInMiLCJhcmd1bWVudHMiLCJwIiwicHJvdG90eXBlIiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJlbnVtZXJhYmxlIiwiX19zZXRNb2R1bGVEZWZhdWx0IiwiX19pbXBvcnRTdGFyIiwibW9kIiwiX19lc01vZHVsZSIsImV4cG9ydHMiLCJIaW50IiwicmVhY3RfMSIsInV0aWxzXzEiLCJfYiIsImNoaWxkIiwiZGVmYXVsdCIsIkNoaWxkcmVuIiwib25seSIsImNoaWxkcmVuIiwidG9Mb3dlckNhc2UiLCJkaXNhYmxlSGludCIsImFsbG93VGFiRmlsbCIsImFsbG93RW50ZXJGaWxsIiwib25GaWxsIiwib25IaW50IiwidmFsdWVNb2RpZmllciIsImNoaWxkUHJvcHMiLCJtYWluSW5wdXRSZWYiLCJoaW50V3JhcHBlclJlZiIsImhpbnRSZWYiLCJ1bk1vZGlmaWVkSW5wdXRUZXh0Iiwic2V0VW5tb2RpZmllZElucHV0VGV4dCIsIl9kIiwidGV4dCIsInNldFRleHQiLCJfZSIsImhpbnQiLCJzZXRIaW50IiwiX2YiLCJtYXRjaCIsInNldE1hdGNoIiwiX2ciLCJjaGFuZ2VFdmVudCIsInNldENoYW5nZUV2ZW50IiwiZHVwbGljYXRlIiwiZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImlucHV0U3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGVIaW50Iiwic2V0SGludFRleHRBbmRJZCIsImZpbHRlciIsIngiLCJzdGFydHNXaXRoIiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIkluZmluaXRlTG9hZGVyIiwiX1B1cmVDb21wb25lbnQiLCJfdGVtcCIsImluc3RhbmNlIiwiY2xhc3NDYWxsQ2hlY2siLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiZGVmYXVsdFByb3BzIiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZQcm9wcyIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJyZWdleCIsInBhcmVudHMiLCJub2RlIiwicHMiLCJwYXJlbnROb2RlIiwicHJvcCIsImdldFByb3BlcnR5VmFsdWUiLCJzY3JvbGwiLCJIVE1MRWxlbWVudCIsIlNWR0VsZW1lbnQiLCJzY3JvbGxpbmdFbGVtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImRpc2FibGVkIiwiaW52ZXJ0ZWQiLCJyb3VuZGVkIiwibm9TaGFkb3ciLCJub1BhZGRpbmciLCJub0JvcmRlciIsInRyYW5zcGFyZW50Iiwic3RyZXRjaEhvcml6b250YWxseSIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50IiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwibmFtZSIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJMYWJlbCIsImlucHV0UmVmIiwiY2hlY2tib3giLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiZm9vdGVyIiwib3BlbiIsIm5vQ2xvc2VJY29uIiwiZHJhd2VyIiwiZHJhd2VyQ29udGVudCIsImRyYXdlckhlYWRlckNvbnRlbnQiLCJkcmF3ZXJIZWFkZXJDbG9zZUljb25Db250ZW50IiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uIiwiSWNvbiIsInNyYyIsImRyYXdlck1haW4iLCJkcmF3ZXJGb290ZXIiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiaXRlbUJvZHlSZW5kZXJlciIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInNldElzT3BlbiIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJidXR0b24iLCJDbGlja2FibGUiLCJNZW51IiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsIkRyb3Bkb3duIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsImhhc092ZXJsYXkiLCJvdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwibGlzdCIsImFjdGl2ZSIsImxpc3RWaWV3SXRlbSIsIkJ1dHRvbkxpbmsiLCJhcyIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsIlBsYWNlbWVudENvbnRleHQiLCJFcnJvciIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibWVudSIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZXZlbnREaWdpdEtleXMiLCJOdW1wYWQiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsIk51bXBhZEtleXMiLCJmaWxsIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwic2hvd0V4cGFuZGVkR3JvdXAiLCJTZWxlY3RDb250ZXh0IiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwiaXNDaGVja2VkIiwiY2hlY2tib3hDb250YWluZXIiLCJDaGVja2JveCIsImlzT3B0aW9uIiwib25GaWx0ZXIiLCJzZWxlY3RBbGxDaGVja2VkIiwidG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCIsInNlYXJjaEtleXdvcmQiLCJzZWxlY3RBbGwiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJoYXNHcm91cE9wdGlvbiIsImZpbHRlck9wdGlvbnMiLCJrZXl3b3JkIiwidHJpbSIsImZpbHRlcmVkT3B0aW9ucyIsInJlZHVjZSIsImZpbHRlcmVkIiwiZ3JvdXBPcHRpb24iLCJmaWx0ZXJlZEdyb3VwT3B0aW9ucyIsImZpbHRlcmVkT3B0aW9uc0NvdW50IiwibmV4dE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uc0NvdW50Iiwic2VsZWN0ZWRPcHRpb24iLCJmaWx0ZXJlZE9wdGlvbiIsImhhbmRsZVNlbGVjdEFsbENsaWNrIiwib3B0aW9uc1RvU2VsZWN0IiwiZmxhdCIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwibm9PcHRpb25zIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsInNjcm9sbE1lbnVJbnRvVmlldyIsInNob3dTZWxlY3RlZEFzVGFncyIsInNob3dTZWFyY2giLCJvcGVuZWQiLCJ0b2dnbGVPcGVuZWQiLCJjb250ZW50UmVmIiwib25SZXNpemUiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJSTyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYW5kbGVPcGVuU2VsZWN0IiwidmFsdWVzIiwiU2VsZWN0Q29udGV4dFByb3ZpZGVyIiwiU2VsZWN0b3IiLCJpc0Ryb3Bkb3duT3BlbmVkIiwiaWNvbkJ1dHRvbiIsInNlYXJjaENvbnRhaW5lciIsIlNlYXJjaCIsIk9wdGlvbkxpc3QiLCJpbml0aWFsU3RhdGUiLCJ1cGRhdGVkU2VsZWN0ZWRPcHRpb25zIiwiY29udGV4dFZhbHVlIiwiaGFuZGxlVGFnQ2xpY2siLCJoYW5kbGVUYWdDbG9zZSIsInBsYWNlaG9sZGVyVG9TaG93Iiwic2hvd0FzVGFncyIsInRhZ1dyYXBwZXIiLCJUYWciLCJjbG9zYWJsZSIsInNob3dBc1RleHQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsIm9uUm93Q2xpY2siLCJoYXNBcnJvdyIsIm9uTG9hZE1vcmUiLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwiVGFibGVDb25maWciLCJQQUdFX1NJWkUiLCJ0YWJsZUhlaWdodCIsIlJPV19IRUlHSFQiLCJoZWFkZXJIZWlnaHQiLCJIRUFERVJfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsInJvdyIsImhhbmRsZUxpc3RTY3JvbGwiLCJsb2FkTW9yZSIsIklURU1TX0xPQURFRCIsInBsYWNlaG9sZGVyQ29udGFpbmVyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiYm9yZGVyQm90dG9tIiwiY29sdW1uIiwib25Tb3J0Iiwic29ydGFibGUiLCJzb3J0ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwidGl0bGUiLCJTb3J0T3JkZXIiLCJERVNDIiwic29ydE9yZGVyIiwic2V0U29ydE9yZGVyIiwiaGFuZGxlU29ydENvbHVtbiIsIm5ld1NvcnRPcmRlciIsIkFTQyIsImNlbGxQcm9wcyIsInRhYmxlSGVhZGVyQ2VsbCIsInNvcnRJY29uVmlzaWJsZSIsImhhbmRsZVJvd0NsaWNrIiwiZGF0YUluZGV4Iiwib25EZWxldGUiLCJjbG9zZUJ1dHRvbiIsInBhdHRlcm4iLCJ3aXRoU2Nyb2xsIiwiaW5wdXRNb2RlIiwidGFnT3B0aW9ucyIsInRhZ3MiLCJzZXRUYWdzIiwidGFnc0FyciIsInRhZyIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUYWdEZWxldGUiLCJ1cGRhdGVkVGFncyIsImhhbmRsZVRhZ0FkZCIsInRyaW1tZWRUZXh0IiwiaGFuZGxlS2V5RG93biIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInNjcm9sbGFibGUiLCJ0YWdJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJzaG93VG9vbHRpcCIsInBvc2l0aW9uU3R5bGVzIiwic2V0UG9zaXRpb25TdHlsZXMiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsInRpbWVyUmVmIiwidXBkYXRlUG9zaXRpb25TdHlsZXMiLCJyZWN0IiwibmV3UG9zaXRpb25TdHlsZXMiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblRvdWNoU3RhcnRIYW5kbGVyIiwiY2xlYXJUaW1lb3V0Iiwib25Ub3VjaEVuZEhhbmRsZXIiLCJzY3JvbGxhYmxlUGFyZW50IiwiaGlkZVRvb2x0aXAiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoRW5kIiwiY3JlYXRlUG9ydGFsIiwidG9vbHRpcCIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImlzIiwibCIsInVzZURlYnVnVmFsdWUiLCJnZXRTbmFwc2hvdCIsImQiLCJ1IiwiYyIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwibW9kdWxlIiwiX25pbCIsIl9wYXJzZSIsIl9zdHJpbmdpZnkiLCJfdiIsIl92MiIsIl92MyIsIl92NCIsIl92YWxpZGF0ZSIsIl92ZXJzaW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImdldE91dHB1dExlbmd0aCIsImlucHV0TGVuZ3RoOCIsInNhZmVBZGQiLCJsc3ciLCJtZDVjbW4iLCJxIiwibnVtIiwiY250IiwibWQ1ZmYiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJieXRlcyIsIm1zZyIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiVWludDhBcnJheSIsIm91dHB1dCIsImxlbmd0aDMyIiwiaGV4VGFiIiwiaGV4IiwiY2hhckF0IiwibWQ1VG9IZXhFbmNvZGVkQXJyYXkiLCJvbGRhIiwib2xkYiIsIm9sZGMiLCJvbGRkIiwid29yZHNUb01kNSIsImxlbmd0aDgiLCJVaW50MzJBcnJheSIsImJ5dGVzVG9Xb3JkcyIsIl9kZWZhdWx0IiwicmFuZG9tVVVJRCIsImNyeXB0byIsInV1aWQiLCJhcnIiLCJnZXRSYW5kb21WYWx1ZXMiLCJybmRzOCIsInoiLCJST1RMIiwiSyIsIkgiLCJOIiwiTSIsImoiLCJwb3ciLCJXIiwiVCIsInVuc2FmZVN0cmluZ2lmeSIsImJ5dGVUb0hleCIsIl9ybmciLCJfbm9kZUlkIiwiX2Nsb2Nrc2VxIiwiX2xhc3RNU2VjcyIsIl9sYXN0TlNlY3MiLCJidWYiLCJjbG9ja3NlcSIsInNlZWRCeXRlcyIsInJuZyIsIm1zZWNzIiwibnNlY3MiLCJkdCIsInRsIiwidG1oIiwiX21kIiwiVVJMIiwiRE5TIiwidmVyc2lvbiIsImhhc2hmdW5jIiwiZ2VuZXJhdGVVVUlEIiwibmFtZXNwYWNlIiwiX25hbWVzcGFjZSIsInN0ciIsInN0cmluZ1RvQnl0ZXMiLCJfbmF0aXZlIiwicm5kcyIsIl9zaGEiLCJfcmVnZXgiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJ0b1N0cmluZ1RhZyIsIl9fd2VicGFja19leHBvcnRzX18iXSwic291cmNlUm9vdCI6IiJ9
|
|
2
|
+
(()=>{var e={3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2122:(e,t,n)=>{"use strict";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)}n.d(t,{Z:()=>r})},1788:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{Z:()=>r})},9756:(e,t,n)=>{"use strict";function r(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}n.d(t,{Z:()=>r})},5348:(e,t,n)=>{"use strict";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 s=new WeakMap,c={},d={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,g=(e,t)=>({...e,...t}),_="undefined",b=typeof window!=_,y=typeof document!=_,O=(e,t)=>{const n=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,g(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},w=new WeakMap;let E=0;const M=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=++E+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=M(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+":"+M(e[a])+",");w.set(e,o)}}return o};let S=!0;const[x,C]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],P={isOnline:()=>S,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},j={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),x("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{S=!0,e()},n=()=>{S=!1};return x("online",t),x("offline",n),()=>{C("online",t),C("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,N=!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)?M(e):"",t]};let L=0;const z=()=>++L,A=2;var H=A;async function B(...e){const[t,n,r,o]=e,a=g({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const c=!1!==a.revalidate,d=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,_]=s.get(t),b=v[o],y=()=>c&&(delete _[o],b&&b[0])?b[0](A).then((()=>a().data)):a().data;if(e.length<3)return y();let w,E=r;const M=z();g[o]=[M,0];const S=!h(u),x=a(),C=x.data,P=x._c,j=h(P)?C:P;if(S&&(u=m(u)?u(j):u,l({data:u,_c:j})),m(E))try{E=E(j)}catch(e){w=e}if(E&&m(E.then)){if(E=await E.catch((e=>{w=e})),M!==g[o][0]){if(w)throw w;return E}w&&S&&d(w)&&(i=!0,E=j,l({data:E,_c:p}))}i&&(w||(m(i)&&(E=i(E,j)),l({data:E,_c:p}))),g[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:E;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!s.has(e)){const n=g(j,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)},c=()=>{if(!s.has(e)&&(s.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(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.get(e)[4]]},[G,W]=V(new Map),U=g({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:N?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:N?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:G,mutate:W,fallback:{}},P),Z=(0,r.createContext)({}),K=b&&window.__SWR_DEVTOOLS_USE__,q=K?window.__SWR_DEVTOOLS_USE__:[],Q=()=>g(U,(0,r.useContext)(Z));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=s.get(G),a=o[r];return a?(delete o[r],a):n(...e)}),r)));K&&(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)(Z),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=g(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=g(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||G),a));const s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(Z.Provider,g(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",drawerEnter:"HO9hxUo4GzbX2Kc3ES_W",drawerEnterActive:"dhOk1TkZVm88FGapmokB",drawerEnterDone:"mSqH8o4MUQyoYV3977wI",drawerExit:"TtuQW1XSimYpG_m_TTo4",drawerExitActive:"xDm2AtTcM3xCBfgZpLmE",drawerExitDone:"jYgIzOK06aP9OM0AA57q",drawerContent:"iIgBAsoPEjFOkH8UnKVX",drawerHeaderContent:"VC8jvVhJRcftqlacGAGI",drawerHeaderCloseIconContent:"JR5GIFQGA_SZ87ScUlE9",drawerHeaderCloseIcon:"B6Rc33pQzXBOube0jdZ9",drawerMain:"MyiN1UNjbOTgwJ1TXmEY",drawerFooter:"Cea_ntGL595Gdnjs1DqU"}},6114:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";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){"use strict";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,s=e.allowTabFill,c=e.allowEnterFill,d=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),g=l.useRef(null),_=l.useState(""),b=_[0],y=_[1],O=l.useState(""),w=O[0],E=O[1],M=l.useState(""),S=M[0],x=M[1],C=l.useState(),P=C[0],j=C[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,g,e)}}));var R=function(e){E(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):"",x(t),j(n),f&&f(n)},N=function(){if(""!==S&&k){var e=b+S;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(P),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)},L=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==g?void 0:g.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?N():(t&&s&&"Tab"===e.key&&""!==S||t&&c&&"Enter"===e.key&&""!==S)&&(e.preventDefault(),N()),v.onKeyDown&&v.onKeyDown(e)},ref:L&&"string"!=typeof L?u.mergeRefs(L,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:g,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?S&&""!==S&&(N(),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:S&&""!==S?"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:S,tabIndex:-1}))))}},2394:(e,t)=>{"use strict";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)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>P});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},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],g=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function _(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],s="*"===i?"*":g(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].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,c))}))}}))};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,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[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=d["*"],r=e.keyCode||e.which||e.charCode;if(E.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=s[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 c){for(var o in c[r]=!0,u)u[o]===r&&(E[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[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 d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],h=v.splitKey,m=v.key.split(h),_=[],y=0;y<m.length;y++)_.push(g(m[y]));_.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function E(e,t,n){p=[];var r=i(e),l=[],s="all",f=document,h=0,_=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(_=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&&(s=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":g(e))in d||(d[e]=[]),d[e].push({keyup:_,keydown:b,scope:s,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 c)for(var r in c[t]=!1,u)u[r]===t&&(E[r]=!1)}(e)}),O))}var M={setScope:_,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&_(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=g(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(d).forEach((function(n){var r=d[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(d).forEach((function(e){return delete d[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:s};for(var S in M)Object.prototype.hasOwnProperty.call(M,S)&&(E[S]=M[S]);if("undefined"!=typeof window){var x=window.hotkeys;E.noConflict=function(e){return e&&window.hotkeys===E&&(window.hotkeys=x),E},window.hotkeys=E}var C=n(6689);function P(){return E.isPressed}E.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return j(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,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,C.useRef)(null),m=(0,C.useCallback)((function(e,n){var r,o;return i&&!i(e)?!c:!!(I(e)&&!j(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,C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)};E.unbind(e,m)}),[m,e,f]),h}var D=E.isPressed},8744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CSSTransition:()=>M,ReplaceTransition:()=>R,SwitchTransition:()=>V,Transition:()=>O,TransitionGroup:()=>k,config:()=>d});var r=n(2122),o=n(9756),a=n(1788);function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var l=n(6689),u=n.n(l),s=n(6405),c=n.n(s);const d={disabled:!1},f=u().createContext(null);var p=function(e){return e.scrollTop},v="unmounted",h="exited",m="entering",g="entered",_="exiting",b=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=h,r.appearStatus=m):o=g:o=t.unmountOnExit||t.mountOnEnter?v:h,r.state={status:o},r.nextCallback=null,r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:h}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==m&&n!==g&&(t=m):n!==m&&n!==g||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===m){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this);n&&p(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===h&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[c().findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:g},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,i),this.safeSetState({status:m},(function(){t.props.onEntering(a,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:g},(function(){t.props.onEntered(a,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:c().findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:_},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:h},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:h},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,o.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function y(){}b.contextType=f,b.propTypes={},b.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},b.UNMOUNTED=v,b.EXITED=h,b.ENTERING=m,b.ENTERED=g,b.EXITING=_;const O=b;var w=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=i(n.className,r):n.setAttribute("class",i(n.className&&n.className.baseVal||"",r)));var n,r}))},E=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1];t.removeClasses(o,"exit"),t.addClass(o,a?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.addClass(o,a,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.removeClasses(o,a),t.addClass(o,a,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,a.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&p(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,a=n.done;this.appliedClasses[t]={},r&&w(e,r),o&&w(e,o),a&&w(e,a)},n.render=function(){var e=this.props,t=(e.classNames,(0,o.Z)(e,["classNames"]));return u().createElement(O,(0,r.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);E.defaultProps={classNames:""},E.propTypes={};const M=E;var S=n(3349);function x(e,t){var n=Object.create(null);return e&&l.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)})),n}function C(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=x(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var u in t){if(o[u])for(r=0;r<o[u].length;r++){var s=o[u][r];l[o[u][r]]=n(s)}l[u]=n(u)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(t,r);return Object.keys(o).forEach((function(a){var i=o[a];if((0,l.isValidElement)(i)){var u=a in t,s=a in r,c=t[a],d=(0,l.isValidElement)(c)&&!c.props.in;!s||u&&!d?s||!u||d?s&&u&&(0,l.isValidElement)(c)&&(o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:c.props.in,exit:C(i,"exit",e),enter:C(i,"enter",e)})):o[a]=(0,l.cloneElement)(i,{in:!1}):o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:!0,exit:C(i,"exit",e),enter:C(i,"enter",e)})}})),o}var j=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},I=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,S.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,r=a,x(n.children,(function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:C(e,"appear",n),enter:C(e,"enter",n),exit:C(e,"exit",n)})}))):P(e,o,a),firstRender:!1}},n.handleExited=function(e,t){var n=x(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,i=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(f.Provider,{value:a},i):u().createElement(f.Provider,{value:a},u().createElement(t,r,i))},t}(u().Component);I.propTypes={},I.defaultProps={component:"div",childFactory:function(e){return e}};const k=I;var D=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}(0,a.Z)(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,a=u().Children.toArray(o)[t];if(a.props[e]&&(r=a.props)[e].apply(r,n),this.props[e]){var i=a.props.nodeRef?void 0:c().findDOMNode(this);this.props[e](i)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=(0,o.Z)(e,["children","in"]),a=u().Children.toArray(t),i=a[0],l=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(k,r,n?u().cloneElement(i,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(l,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);D.propTypes={};const R=D;var N,T,L="out-in",z="in-out",A=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},H=((N={})[L]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){n(m,null)}))})},N[z]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:A(r,"onEntered",(function(){n(m)}))})]},N),B=((T={})[L]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:A(t,"onEntered",(function(){n(g,u().cloneElement(t,{in:!0}))}))})},T[z]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){r(g,u().cloneElement(n,{in:!0}))}))}),u().cloneElement(n,{in:!0})]},T),F=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:g,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===m&&e.mode===z?{status:m}:!t.current||((n=t.current)===(r=e.children)||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,a=o.status,i=o.current,l={children:n,current:i,changeState:this.changeState,status:a};switch(a){case m:e=B[r](l);break;case _:e=H[r](l);break;case g:e=i}return u().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);F.propTypes={},F.defaultProps={mode:L};const V=F},5691:(e,t,n)=>{"use strict";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,s=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 s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{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},4356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FixedSizeGrid:()=>A,FixedSizeList:()=>H,VariableSizeGrid:()=>j,VariableSizeList:()=>z,areEqual:()=>G,shouldComponentUpdate:()=>W});var r=n(2122),o=n(3349),a=n(1788),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 s=n(6689),c=n(9756),d="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=d(),r={id:requestAnimationFrame((function o(){d()-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 g(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 _=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,c=e.getColumnWidth,d=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,E=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,x=e.initInstanceProps,C=e.shouldResetStyleCacheOnItemSizeChange,P=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=x(r.props,(0,o.Z)(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:(0,o.Z)(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,s=r._getItemStyleCache(C&&i,C&&l,C&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:E(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:c(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,s=a;if("rtl"===t)switch(g()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,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,_)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),P(e),null};var j=t.prototype;return j.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)},j.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,s=a.width,c=this.state,f=c.scrollLeft,p=c.scrollTop,g=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 _=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?g:0,O=_>l?g: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})},j.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()},j.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(g()){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()},j.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},j.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,c=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,g=e.outerTagName,_=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,E=this.state.isScrolling,M=this._getHorizontalRangeToRender(),S=M[0],x=M[1],C=this._getVerticalRangeToRender(),P=C[0],j=C[1],I=[];if(o>0&&_)for(var k=P;k<=j;k++)for(var D=S;D<=x;D++)I.push((0,s.createElement)(t,{columnIndex:D,data:f,isScrolling:O?E:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=d(this.props,this._instanceProps),N=v(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:E?"none":void 0,width:N}}))},j._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],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,g=h.scrollLeft,_=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(g,_,m,y,b)}},j._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},j._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,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.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},E=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},M=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 s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},S=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?x(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},x=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=M(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},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&M(e,t,r,n).offset<o;)r+=i,i*=2;return x(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},P=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=M(e,t,n,a),s="column"===e?E(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=y({getColumnOffset:function(e,t,n){return M("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return S("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=M("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:E,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return P("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return P("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return M("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return S("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=M("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("row",e,s,r).size;return s},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,c=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,_=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,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(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,s=r._getItemStyleCache(_&&i,_&&u,_&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"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(g()){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}(0,a.Z)(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(c(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(g()){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,c=e.innerTagName,d=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,g=e.outerTagName,_=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,E=w?this._onScrollHorizontal:this._onScrollVertical,M=this._getRangeToRender(),S=M[0],x=M[1],C=[];if(d>0)for(var P=S;P<=x;P++)C.push((0,s.createElement)(t,{data:f,key:v(P,f),index:P,isScrolling:b?O:void 0,style:this._getItemStyle(P)}));var j=i(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:E,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,s.createElement)(u||c||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"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=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.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},N=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 s=r(u);o[u]={offset:i,size:s},i+=s}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=N(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},L=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 N(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:L,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=N(e,t,o),f=L(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"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&&N(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,s="horizontal"===o||"horizontal"===l?u:a,c=N(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)p++,f+=N(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}}),A=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,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},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}}),H=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,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+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,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-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 G(e,t){var n=e.style,r=(0,c.Z)(e,F),o=t.style,a=(0,c.Z)(t,V);return!B(n,o)&&!B(r,a)}function W(e,t){return!G(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";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,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noPadding,b=void 0!==_&&_,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.autoFocus,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=e.size,T=void 0===N?"medium":N,L=e.type;return o.default.createElement("button",{ref:s,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]=g,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=E,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:d,autoFocus:j,type:L,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){"use strict";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){"use strict";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){"use strict";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){"use strict";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,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,g=void 0!==m&&m,_=e.noShadow,b=void 0!==_&&_,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.disabled,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=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:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],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]=E,t[u.default.disabled]=j,t[u.default.transparent]=g,t[u.default.stretchHorizontally]=S,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),s])},N),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";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){"use strict";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)),s=n(4115),c=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,d=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,g=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]);return l.default.createElement(s.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)([c.default.checkbox,d,c.default[v]]),onChange:g,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){"use strict";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){"use strict";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,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},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){"use strict";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){"use strict";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,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";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){"use strict";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,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,g=e.noPadding,_=void 0!==g&&g,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,E=e.baseZIndex,M=void 0===E?1019:E;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:M},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=_,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){"use strict";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){"use strict";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)),s=n(8744);t.default=function(e){var t=e.header,n=e.footer,r=e.open,c=e.className,d=e.style,f=e.noCloseIcon,p=void 0!==f&&f,v=e.onClose,h=e.children,m=e.unmountOnExit,g=void 0!==m&&m;return a.default.createElement(s.CSSTransition,{in:r,timeout:300,classNames:{enter:u.default.drawerEnter,enterActive:u.default.drawerEnterActive,enterDone:u.default.drawerEnterDone,exit:u.default.drawerExit,exitActive:u.default.drawerExitActive,exitDone:u.default.drawerExitDone},unmountOnExit:g},a.default.createElement("div",{className:(0,o.default)([u.default.drawer,c]),style:d},a.default.createElement("div",{className:u.default.drawerContent},a.default.createElement("div",{className:u.default.drawerHeaderContent},!p&&a.default.createElement("div",{className:u.default.drawerHeaderCloseIconContent},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:v},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),!!t&&a.default.createElement("div",null,t)),a.default.createElement("div",{className:u.default.drawerMain},h),!!n&&a.default.createElement("div",{className:u.default.drawerFooter},n))))}},3212:function(e,t,n){"use strict";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){"use strict";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){"use strict";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),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),g=!n||0===n.length,_=function(){return h(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:g,selectedItem:c,toggleIsOpen:_}):i.default.createElement(u.Clickable,{display:o,isDisabled:g,onClick:_}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";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){"use strict";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,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,g=e.noBorder,_=void 0!==g&&g,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,E=e.stretchHorizontally,M=void 0!==E&&E,S=e.stretchVertically,x=void 0!==S&&S,C=e.rounded,P=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j;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]=P,t[i.default.noShadow]=m,t[i.default.noBorder]=_,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=x,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";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){"use strict";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,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.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[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";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){"use strict";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,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";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){"use strict";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,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,g=e.inverted,_=void 0!==g&&g,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.transparent,M=void 0!==E&&E,S=e.rounded,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.type,I=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[P],(t={},t[l.default.inverted]=_,t[l.default.rounded]=x,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=M,t[l.default.topOffset]=x&&f.includes("top"),t[l.default.rightOffset]=x&&f.includes("right"),t[l.default.bottomOffset]=x&&f.includes("bottom"),t[l.default.leftOffset]=x&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:P,inverted:_}),u)}},2847:function(e,t,n){"use strict";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){"use strict";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),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noBorder,b=void 0!==_&&_,y=e.transparent,O=void 0!==y&&y,w=e.rounded,E=void 0!==w&&w,M=e.offsetSides,S=void 0===M?[]:M,x=e.disabled,C=void 0!==x&&x,P=e.size,j=void 0===P?"medium":P,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)([s.default.container,s.default[j],(t={},t[s.default.inverted]=h,t[s.default.rounded]=E,t[s.default.noShadow]=g,t[s.default.noBorder]=b,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=E&&S.includes("top"),t[s.default.rightOffset]=E&&S.includes("right"),t[s.default.bottomOffset]=E&&S.includes("bottom"),t[s.default.leftOffset]=E&&S.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:j,inverted:h}),c)}},5860:function(e,t,n){"use strict";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){"use strict";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,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,f=e.decoding,p=void 0===f?"auto":f,v=e.loading,h=void 0===v?"eager":v,m=e.style,g=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[d]]),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:s,className:(0,a.default)([i.default.container,i.default.hasOverlay])},g,u&&o.default.createElement("div",{className:i.default.overlay},u)):g}},3928:function(e,t,n){"use strict";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){"use strict";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){"use strict";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){"use strict";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){"use strict";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,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,g=void 0===m?"center":m,_=e.onClick,b=void 0===_?function(){}:_;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:s,inverted:r,transparent:d,noPadding:p,align:g,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";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),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,g=e.size,_=void 0===g?"medium":g,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:_,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";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){"use strict";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)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),g=(0,l.useRef)(null),_=o||g;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&_.current){var e=_.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=_.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,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:_,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";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)),s=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,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";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,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";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,s=e.className,c=e.noPadding,d=void 0!==c&&c,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,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";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){"use strict";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),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,g=e.onClose,_=void 0===g?function(){}:g,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",_);var O=(0,l.useCallback)((function(){_()}),[_]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:c.default.modalButton},i))}},1391:function(e,t,n){"use strict";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){"use strict";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)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["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(s(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(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(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(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";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){"use strict";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,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;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]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(4685)),c=n(5348),d=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,c.useToggle)(a),h=i[0],m=i[1],g=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:s.default.header,onClick:g},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(8054)),c=n(4616),d=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(d.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)([s.default.container,(t={},t[s.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:s.default.label},n))}},3781:function(e,t,n){"use strict";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){"use strict";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 s=n(5348),c=i(n(6689)),d=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,s.useToggle)(!1),u=i[0],m=i[1],g=(0,c.useContext)(v.SelectContext),_=g.multiple,b=g.searchKeyword,y=g.selectAll,O=g.selectedOptions,w=g.setSelectedOptions,E=n.some((function(e){return!(0,t.isOption)(e)})),M=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},S=(0,c.useMemo)((function(){return E?n.reduce((function(e,t){var n=M(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):M(n)}),[E,n,b]),x=(0,c.useMemo)((function(){return S.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[E,S,t.isOption]),C=(0,c.useMemo)((function(){return O.filter((function(e){return S.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,S]),P=(0,c.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=S.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[S,t.isOption,u,w,m]);return(0,c.useEffect)((function(){C===x?m(!0):u&&m(!1)}),[C,x,u,m]),c.default.createElement("div",{className:h.default.container},y&&_&&!!S.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:P},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!C&&C!==x,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),S.length?S.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:e.value,data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(2396)),c=n(2568),d=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)(c.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)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";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){"use strict";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)),s=i(n(3790)),c=i(n(7917)),d=n(5348),f=n(2568),p=n(4745),v=n(8947),h=n(2847),m=n(4292),g=n(4115);t.default=function(e){var t,n,r,o=e.className,a=e.defaultValue,i=e.disabled,_=e.multiple,b=void 0!==_&&_,y=e.options,O=e.placeholder,w=e.label,E=e.selectAll,M=e.showExpandedGroup,S=e.scrollMenuIntoView,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.showSelectedAsTags,I=void 0!==j&&j,k=e.showSearch,D=void 0!==k&&k,R=e.width,N=e.onChange,T=e.onFilter,L=(0,d.useToggle)(!1),z=L[0],A=L[1],H=(0,d.useOutsideClick)((function(){return A(!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&&x){var e=new ResizeObserver(F);return e.observe(B.current),function(){e.disconnect(),e=null}}}),[z,x,F]);var V=(0,l.useCallback)((function(){A()}),[]),G=(0,l.useCallback)((function(e){b||A(!1),N&&N(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:G,selectAll:E,showExpandedGroup:M},l.default.createElement("div",{ref:H},w?l.default.createElement(g.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.disabled]=i,t),c.default[P],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([c.default.header,(n={},n[c.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)([c.default.iconButton,(r={},r[c.default.expanded]=z,r)]),src:s.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:c.default.content,ref:B},0===y.length?l.default.createElement("div",{className:c.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:c.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:T,onChange:G}))))))}},2568:function(e,t,n){"use strict";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),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(s.selectedOptions),g=m[0],_=m[1],b=(0,l.useState)(s.searchKeyword),y=b[0],O=b[1],w=(0,l.useCallback)((function(e){var t;t=o?g.some((function(t){return t.value===e.value}))?g.filter((function(t){return t.value!==e.value})):i(i([],g,!0),[e],!1):[e],_(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)}))),_(t)}}),[n,v]);var E=(0,l.useMemo)((function(){return{multiple:o,selectAll:d,showExpandedGroup:p,selectedOptions:g,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:_}}),[d,g,_,w,y,O]);return l.default.createElement(c.Provider,{value:E},t)}},237:function(e,t,n){"use strict";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)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.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,d.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(c.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),g=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:g:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].label):h}},4745:function(e,t,n){"use strict";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){"use strict";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){"use strict";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)),s=l(n(7659)),c=n(4356),d=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,g=e.pageSize,_=void 0===g?v.TableConfig.PAGE_SIZE:g,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,E=e.headerHeight,M=void 0===E?v.TableConfig.HEADER_HEIGHT:E,S=e.disableLazyLoader,x=e.activeRows,C=e.itemsCount,P=e.isHeaderSticky,j=void 0!==P&&P,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),N=R[0],T=R[1],L=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[s.id])}))}),[t,x,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;T(t)}),[]),A=(0,u.useCallback)((function(){S||n.length!==C&&(n.length<_*l||m&&i&&(m(l+1),i(l+1)))}),[S,n.length,C,_,l,m,i]),H=(0,u.useCallback)((function(e){return!S&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,S]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,s.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:N,headerHeight:M}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(d.default,{isItemLoaded:H,itemCount:n.length,loadMoreItems:A},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},L)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:N,isHeaderSticky:j,headerHeight:M}),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==x?void 0:x[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){"use strict";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,s=e.isHeaderSticky,c=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]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";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)),s=i(n(6689)),c=n(4958),d=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,g=n.className,_=(0,s.useState)((function(){return l||p.SortOrder.DESC})),b=_[0],y=_[1],O=(0,s.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 s.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,g,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";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)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";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){"use strict";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){"use strict";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)),s=i(n(7451)),c=n(4958),d=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)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";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){"use strict";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)),s=l(n(7659)),c=n(1982),d=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,g=e.inputRef,_=e.size,b=void 0===_?"small":_,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,E=void 0!==w&&w,M=e.noBorder,S=void 0!==M&&M,x=e.withScroll,C=void 0!==x&&x,P=e.inputMode,j=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],N=D[1],T=(0,u.useState)(),L=T[0],z=T[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var A=(0,u.useCallback)((function(e){var t=e.target.value;N(t)}),[N]),H=(0,u.useCallback)((function(e){var t=L.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[L,z]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],L,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],L,!0),[n],!1)}if(z(t),N(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[L,R,z,N]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){return B()})),G=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:g,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=S,t)]),onChange:A,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:E,inputMode:P,disabled:j}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=j,n[v.default.scrollable]=C,n),r]),ref:V},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:H,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},G))}},2819:function(e,t,n){"use strict";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){"use strict";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)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,g=e.type,_=void 0===g?"text":g,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.inputMode,M=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),S=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:M,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:_,value:d,autoFocus:y,inputMode:E});return n?l.default.createElement(s.Label,{value:n},S):l.default.createElement(l.default.Fragment,null,S)}},1143:function(e,t,n){"use strict";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){"use strict";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){"use strict";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){"use strict";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){"use strict";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(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=(0,l.useState)({left:0,top:0}),v=p[0],h=p[1],m=(0,l.useState)(!1),g=m[0],_=m[1],b=(0,l.useRef)(null),y=(0,l.useRef)(null),O=(0,l.useCallback)((function(){if(y.current){var e=y.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);h(t),_(!0)}}),[r,a]),w=(0,l.useCallback)((function(){O()}),[O]),E=(0,l.useCallback)((function(){_(!1)}),[]),M=(0,l.useCallback)((function(){b.current&&(clearTimeout(b.current),b.current=null),O()}),[O]),S=(0,l.useCallback)((function(){b.current=setTimeout((function(){_(!1),b.current=null}),5e3)}),[]);return(0,l.useEffect)((function(){return function(){return b.current&&clearTimeout(b.current)}}),[]),(0,l.useEffect)((function(){if(y.current&&"absolute"===a){var e=(0,s.default)(y.current);if(e){var t=function(){return _(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:M,onMouseEnter:w,onMouseLeave:E,onTouchEnd:S,ref:y},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&g?l.default.createElement("div",{style:v,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";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){"use strict";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,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,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:c,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:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";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)=>{"use strict";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){"use strict";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){"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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 s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="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,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";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 d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.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 s.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)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";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,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(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)=>{"use strict";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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>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)=>{"use strict";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)=>{"use strict";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,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=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:s+1;const h=p-u+(v-s)/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,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const g=p/4294967296*1e4&268435455;c[r++]=g>>>8&255,c[r++]=255&g,c[r++]=g>>>24&15|16,c[r++]=g>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";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)=>{"use strict";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 s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijt5Q0FBZSxTQUFTQSxFQUF1QkMsR0FDN0MsUUFBYSxJQUFUQSxFQUNGLE1BQU0sSUFBSUMsZUFBZSw2REFHM0IsT0FBT0QsQ0FDVCwrQ0NOZSxTQUFTRSxJQWV0QixPQWRBQSxFQUFXQyxPQUFPQyxRQUFVLFNBQVVDLEdBQ3BDLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBQ3pDLElBQUlHLEVBQVNGLFVBQVVELEdBRXZCLElBQUssSUFBSUksS0FBT0QsRUFDVk4sT0FBT1EsVUFBVUMsZUFBZUMsS0FBS0osRUFBUUMsS0FDL0NMLEVBQU9LLEdBQU9ELEVBQU9DLEdBRzNCLENBRUEsT0FBT0wsQ0FDVCxFQUVPSCxFQUFTWSxNQUFNQyxLQUFNUixVQUM5QiwrQ0NoQmUsU0FBU1MsRUFBZUMsRUFBVUMsR0FDL0NELEVBQVNOLFVBQVlSLE9BQU9nQixPQUFPRCxFQUFXUCxXQUM5Q00sRUFBU04sVUFBVVMsWUFBY0gsRUFDakNBLEVBQVNJLFVBQVlILENBQ3ZCLCtDQ0plLFNBQVNJLEVBQThCYixFQUFRYyxHQUM1RCxHQUFjLE1BQVZkLEVBQWdCLE1BQU8sQ0FBQyxFQUM1QixJQUVJQyxFQUFLSixFQUZMRCxFQUFTLENBQUMsRUFDVm1CLEVBQWFyQixPQUFPc0IsS0FBS2hCLEdBRzdCLElBQUtILEVBQUksRUFBR0EsRUFBSWtCLEVBQVdoQixPQUFRRixJQUNqQ0ksRUFBTWMsRUFBV2xCLEdBQ2JpQixFQUFTRyxRQUFRaEIsSUFBUSxJQUM3QkwsRUFBT0ssR0FBT0QsRUFBT0MsSUFHdkIsT0FBT0wsQ0FDVCw0SkNaSXNCLEVBQVUsQ0FDVkMsU0FBUyxHQUVFLFNBQVNDLEVBQWdCQyxHQUNwQyxJQUFJQyxHQUFNLElBQUFDLFVBZVYsT0FkQSxJQUFBQyxZQUFVLFdBQ04sSUFBSUMsRUFBYyxTQUFVQyxHQUNuQkosRUFBSUssVUFBV0wsRUFBSUssUUFBUUMsU0FBU0YsRUFBTTlCLFNBRy9DeUIsRUFBU0ssRUFDYixFQUdBLE9BRkFHLFNBQVNDLGlCQUFpQixVQUFXTCxFQUFhUCxHQUNsRFcsU0FBU0MsaUJBQWlCLFdBQVlMLEVBQWFQLEdBQzVDLFdBQ0hXLFNBQVNFLG9CQUFvQixVQUFXTixFQUFhUCxHQUNyRFcsU0FBU0Usb0JBQW9CLFdBQVlOLEVBQWFQLEVBQzFELENBQ0osR0FBRyxDQUFDRyxJQUNHQyxDQUNYLENDK0pPLFNBQVNVLEVBQU9DLEVBQUdDLEdBQ3RCLElBQUlDLEVBQXNCLG1CQUFYQyxRQUF5QkgsRUFBRUcsT0FBT0MsVUFDakQsSUFBS0YsRUFBRyxPQUFPRixFQUNmLElBQW1CSyxFQUFZQyxFQUEzQjFDLEVBQUlzQyxFQUFFL0IsS0FBSzZCLEdBQU9PLEVBQUssR0FDM0IsSUFDSSxXQUFjLElBQU5OLEdBQWdCQSxLQUFNLE1BQVFJLEVBQUl6QyxFQUFFNEMsUUFBUUMsTUFBTUYsRUFBR0csS0FBS0wsRUFBRU0sTUFDeEUsQ0FDQSxNQUFPQyxHQUFTTixFQUFJLENBQUVNLE1BQU9BLEVBQVMsQ0FDdEMsUUFDSSxJQUNRUCxJQUFNQSxFQUFFSSxPQUFTUCxFQUFJdEMsRUFBVSxTQUFJc0MsRUFBRS9CLEtBQUtQLEVBQ2xELENBQ0EsUUFBVSxHQUFJMEMsRUFBRyxNQUFNQSxFQUFFTSxLQUFPLENBQ3BDLENBQ0EsT0FBT0wsQ0FDWCxDQ2pNZSxTQUFTTSxJQUNwQixJQUFJQyxFQUFRekMsS0FDUjBDLEVBQUtoQixHQUFPLElBQUFpQixVQUFTLENBQ3JCQyxVQUFNQyxFQUNOTixXQUFPTSxFQUNQQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBQ1gsR0FBSUMsRUFBU1IsRUFBRyxHQUFJUyxFQUFZVCxFQUFHLEdBSW5DVSxHQUFlLElBQUFuQyxTQUFPLElBQzFCLElBQUFDLFlBQVUsV0FFTixPQURBa0MsRUFBYS9CLFNBQVUsRUFDaEIsV0FDSCtCLEVBQWEvQixTQUFVLENBQzNCLENBQ0osR0FBRyxJQUNILElBQUlnQyxHQUFXLElBQUFDLGNBQVksU0FBVUMsR0FBVyxPRDRGMUJDLEVDNUYyQ2YsRUQ0RmxDZ0IsT0M1RnlDLEVENEYxQkMsRUM1RjBDLFdBQ3BGLElBQUlkLEVBQU1lLEVBQ1YsT0RvR0QsU0FBcUJILEVBQVNJLEdBQ2pDLElBQXNHQyxFQUFHQyxFQUFHQyxFQUFHQyxFQUEzR0MsRUFBSSxDQUFFQyxNQUFPLEVBQUdDLEtBQU0sV0FBYSxHQUFXLEVBQVBKLEVBQUUsR0FBUSxNQUFNQSxFQUFFLEdBQUksT0FBT0EsRUFBRSxFQUFJLEVBQUdLLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUU3QixLQUFNbUMsRUFBSyxHQUFJLE1BQVNBLEVBQUssR0FBSSxPQUFVQSxFQUFLLElBQXdCLG1CQUFYeEMsU0FBMEJrQyxFQUFFbEMsT0FBT0MsVUFBWSxXQUFhLE9BQU8vQixJQUFNLEdBQUlnRSxFQUN2SixTQUFTTSxFQUFLMUMsR0FBSyxPQUFPLFNBQVUyQyxHQUFLLE9BQ3pDLFNBQWNDLEdBQ1YsR0FBSVgsRUFBRyxNQUFNLElBQUlZLFVBQVUsbUNBQzNCLEtBQU9ULElBQU1BLEVBQUksRUFBR1EsRUFBRyxLQUFPUCxFQUFJLElBQUtBLE9BQ25DLEdBQUlKLEVBQUksRUFBR0MsSUFBTUMsRUFBWSxFQUFSUyxFQUFHLEdBQVNWLEVBQVUsT0FBSVUsRUFBRyxHQUFLVixFQUFTLFNBQU9DLEVBQUlELEVBQVUsU0FBTUMsRUFBRWpFLEtBQUtnRSxHQUFJLEdBQUtBLEVBQUUzQixTQUFXNEIsRUFBSUEsRUFBRWpFLEtBQUtnRSxFQUFHVSxFQUFHLEtBQUtwQyxLQUFNLE9BQU8yQixFQUUzSixPQURJRCxFQUFJLEVBQUdDLElBQUdTLEVBQUssQ0FBUyxFQUFSQSxFQUFHLEdBQVFULEVBQUV6QixRQUN6QmtDLEVBQUcsSUFDUCxLQUFLLEVBQUcsS0FBSyxFQUFHVCxFQUFJUyxFQUFJLE1BQ3hCLEtBQUssRUFBYyxPQUFYUCxFQUFFQyxRQUFnQixDQUFFNUIsTUFBT2tDLEVBQUcsR0FBSXBDLE1BQU0sR0FDaEQsS0FBSyxFQUFHNkIsRUFBRUMsUUFBU0osRUFBSVUsRUFBRyxHQUFJQSxFQUFLLENBQUMsR0FBSSxTQUN4QyxLQUFLLEVBQUdBLEVBQUtQLEVBQUVJLElBQUlLLE1BQU9ULEVBQUVHLEtBQUtNLE1BQU8sU0FDeEMsUUFDSSxNQUFrQlgsR0FBWkEsRUFBSUUsRUFBRUcsTUFBWTNFLE9BQVMsR0FBS3NFLEVBQUVBLEVBQUV0RSxPQUFTLEtBQWtCLElBQVYrRSxFQUFHLElBQXNCLElBQVZBLEVBQUcsSUFBVyxDQUFFUCxFQUFJLEVBQUcsUUFBVSxDQUMzRyxHQUFjLElBQVZPLEVBQUcsTUFBY1QsR0FBTVMsRUFBRyxHQUFLVCxFQUFFLElBQU1TLEVBQUcsR0FBS1QsRUFBRSxJQUFNLENBQUVFLEVBQUVDLE1BQVFNLEVBQUcsR0FBSSxLQUFPLENBQ3JGLEdBQWMsSUFBVkEsRUFBRyxJQUFZUCxFQUFFQyxNQUFRSCxFQUFFLEdBQUksQ0FBRUUsRUFBRUMsTUFBUUgsRUFBRSxHQUFJQSxFQUFJUyxFQUFJLEtBQU8sQ0FDcEUsR0FBSVQsR0FBS0UsRUFBRUMsTUFBUUgsRUFBRSxHQUFJLENBQUVFLEVBQUVDLE1BQVFILEVBQUUsR0FBSUUsRUFBRUksSUFBSWhDLEtBQUttQyxHQUFLLEtBQU8sQ0FDOURULEVBQUUsSUFBSUUsRUFBRUksSUFBSUssTUFDaEJULEVBQUVHLEtBQUtNLE1BQU8sU0FFdEJGLEVBQUtaLEVBQUs5RCxLQUFLMEQsRUFBU1MsRUFDNUIsQ0FBRSxNQUFPaEMsR0FBS3VDLEVBQUssQ0FBQyxFQUFHdkMsR0FBSTZCLEVBQUksQ0FBRyxDQUFFLFFBQVVELEVBQUlFLEVBQUksQ0FBRyxDQUN6RCxHQUFZLEVBQVJTLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFbEMsTUFBT2tDLEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVFwQyxNQUFNLEVBQzlFLENBdEJnRHVDLENBQUssQ0FBQy9DLEVBQUcyQyxHQUFLLENBQUcsQ0F1QnJFLENDOUhlSyxDQUFZNUUsTUFBTSxTQUFVMEMsR0FDL0IsT0FBUUEsRUFBR3dCLE9BQ1AsS0FBSyxFQVVELE9BVEF4QixFQUFHMEIsS0FBSy9CLEtBQUssQ0FBQyxFQUFHLEVBQUcsQ0FBRSxJQUN0QmMsRUFBVSxDQUNOUCxVQUFNQyxFQUNOTixXQUFPTSxFQUNQQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBRVIsQ0FBQyxFQUFhTSxHQUN6QixLQUFLLEVBWUQsT0FYQVgsRUFBT0YsRUFBR3lCLFFBQ21CLElBQXpCZixFQUFhL0IsU0FDYjhCLEVBQVUsQ0FDTlAsS0FBTUEsRUFDTkwsV0FBT00sRUFDUEMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBY0wsR0FDMUIsS0FBSyxFQVlELE9BWEFlLEVBQVVqQixFQUFHeUIsUUFDZ0IsSUFBekJmLEVBQWEvQixTQUNiOEIsRUFBVSxDQUNOWixNQUFPb0IsRUFDUGYsVUFBTUMsRUFDTkMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBYSxHQUN6QixLQUFLLEVBQUcsTUFBTyxDQUFDLEdBRXhCLEdBQ0osRURrRE8sS0FGb0M0QixPQzVGcUMsS0Q4RjlEQSxFQUFJQyxXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVUzQyxHQUFTLElBQU1xQyxFQUFLakIsRUFBVXZCLEtBQUtHLEdBQVMsQ0FBRSxNQUFPTCxHQUFLK0MsRUFBTy9DLEVBQUksQ0FBRSxDQUMxRixTQUFTaUQsRUFBUzVDLEdBQVMsSUFBTXFDLEVBQUtqQixFQUFpQixNQUFFcEIsR0FBUyxDQUFFLE1BQU9MLEdBQUsrQyxFQUFPL0MsRUFBSSxDQUFFLENBQzdGLFNBQVMwQyxFQUFLekIsR0FKbEIsSUFBZVosRUFJYVksRUFBT2QsS0FBTzJDLEVBQVE3QixFQUFPWixRQUoxQ0EsRUFJeURZLEVBQU9aLE1BSmhEQSxhQUFpQnVDLEVBQUl2QyxFQUFRLElBQUl1QyxHQUFFLFNBQVVFLEdBQVdBLEVBQVF6QyxFQUFRLEtBSWpCNkMsS0FBS0YsRUFBV0MsRUFBVyxDQUM3R1AsR0FBTWpCLEVBQVlBLEVBQVUzRCxNQUFNeUQsRUFBU0MsR0FBYyxLQUFLdEIsT0FDbEUsSUFQRyxJQUFtQnFCLEVBQVNDLEVBQVlvQixFQUFHbkIsQ0NoRDFDLEdBQUcsQ0FBQ04sSUFDUixNQUFPLENBQUNGLEVBQVFHLEVBQ3BCLENEb0Y2QmpFLE9BQU9nQixPQTBHWGhCLE9BQU9nQixxQkUvUGhDLE1BQU1nRixFQUFpQixJQUFJQyxRQUVyQkMsRUFBYyxDQUFDLEVBQ2ZDLEVBQWdCLENBQUMsRUFDakJDLEVBQU8sT0FLUEMsRUFBOEJELElBQzlCRSxFQUFTdEcsT0FDVHVHLEVBQWVwQixHQUFJQSxJQUFNa0IsRUFDekJHLEVBQWNyQixHQUFnQixtQkFBTEEsRUFDekJzQixFQUFlLENBQUNDLEVBQUdDLEtBQUksSUFDbEJELEtBQ0FDLElBRUxDLEVBQWdCLFlBRWhCQyxTQUF5QkMsUUFBVUYsRUFDbkNHLFNBQTJCNUUsVUFBWXlFLEVBRXZDSSxFQUFvQixDQUFDQyxFQUFPMUcsS0FDOUIsTUFBTTJHLEVBQVFsQixFQUFlbUIsSUFBSUYsR0FDakMsTUFBTyxDQUVILElBQUlBLEVBQU1FLElBQUk1RyxJQUFRMkYsRUFFckJrQixJQUNHLElBQUtiLEVBQVloRyxHQUFNLENBQ25CLE1BQU04RyxFQUFPSixFQUFNRSxJQUFJNUcsR0FHakJBLEtBQU80RixJQUNUQSxFQUFjNUYsR0FBTzhHLEdBRXpCSCxFQUFNLEdBQUczRyxFQUFLa0csRUFBYVksRUFBTUQsR0FBT0MsR0FBUW5CLEVBQ3BELEdBR0pnQixFQUFNLEdBRU4sS0FDU1gsRUFBWWhHLElBRVRBLEtBQU80RixFQUFzQkEsRUFBYzVGLEdBRzVDMEcsRUFBTUUsSUFBSTVHLElBQVEyRixFQUVoQyxFQU9Db0IsRUFBUSxJQUFJckIsUUFFbEIsSUFBSXNCLEVBQVUsRUFTZCxNQUFNQyxFQUFjQyxJQUNoQixNQUFNQyxTQUFjRCxFQUNkeEcsRUFBY3dHLEdBQU9BLEVBQUl4RyxZQUN6QjBHLEVBQVMxRyxHQUFlMkcsS0FDOUIsSUFBSTlELEVBQ0ErRCxFQUNKLEdBQUl2QixFQUFPbUIsS0FBU0EsR0FBUUUsR0FBVTFHLEdBQWU2RyxPQThCakRoRSxFQUFTNkQsRUFBU0YsRUFBSU0sU0FBbUIsVUFBUkwsRUFBbUJELEVBQUlPLFdBQXFCLFVBQVJOLEVBQW1CTyxLQUFLQyxVQUFVVCxHQUFPLEdBQUtBLE1BOUIxRCxDQUl6RCxHQURBM0QsRUFBU3dELEVBQU1ILElBQUlNLEdBQ2YzRCxFQUFRLE9BQU9BLEVBTW5CLEdBRkFBLElBQVd5RCxFQUFVLElBQ3JCRCxFQUFNYSxJQUFJVixFQUFLM0QsR0FDWDdDLEdBQWVtSCxNQUFPLENBR3RCLElBREF0RSxFQUFTLElBQ0wrRCxFQUFRLEVBQUdBLEVBQVFKLEVBQUlwSCxPQUFRd0gsSUFDL0IvRCxHQUFVMEQsRUFBV0MsRUFBSUksSUFBVSxJQUV2Q1AsRUFBTWEsSUFBSVYsRUFBSzNELEVBQ25CLENBQ0EsR0FBSTdDLEdBQWVxRixFQUFRLENBRXZCeEMsRUFBUyxJQUNULE1BQU14QyxFQUFPZ0YsRUFBT2hGLEtBQUttRyxHQUFLWSxPQUM5QixNQUFPOUIsRUFBWXNCLEVBQVF2RyxFQUFLZ0UsUUFDdkJpQixFQUFZa0IsRUFBSUksTUFDakIvRCxHQUFVK0QsRUFBUSxJQUFNTCxFQUFXQyxFQUFJSSxJQUFVLEtBR3pEUCxFQUFNYSxJQUFJVixFQUFLM0QsRUFDbkIsQ0FDSixDQUdBLE9BQU9BLENBQU0sRUFTYixJQUFJd0UsR0FBUyxFQUNqQixNQUVPQyxFQUFlQyxHQUFrQjNCLEdBQW1CQyxPQUFPMUUsaUJBQW1CLENBQ2pGMEUsT0FBTzFFLGlCQUFpQnFHLEtBQUszQixRQUM3QkEsT0FBT3pFLG9CQUFvQm9HLEtBQUszQixTQUNoQyxDQUNBVixFQUNBQSxHQW9DRXNDLEVBQVMsQ0FDWEMsU0E1Q2EsSUFBSUwsRUE2Q2pCTSxVQXBDYyxLQUNkLE1BQU1DLEVBQWtCOUIsR0FBcUI1RSxTQUFTMEcsZ0JBQ3RELE9BQU90QyxFQUFZc0MsSUFBd0MsV0FBcEJBLENBQTRCLEdBb0NqRUMsRUFBdUIsQ0FDekJDLFVBbkNlcEgsSUFFWG9GLEdBQ0E1RSxTQUFTQyxpQkFBaUIsbUJBQW9CVCxHQUVsRDRHLEVBQWMsUUFBUzVHLEdBQ2hCLEtBQ0NvRixHQUNBNUUsU0FBU0Usb0JBQW9CLG1CQUFvQlYsR0FFckQ2RyxFQUFlLFFBQVM3RyxFQUFTLEdBMEJyQ3FILGNBdkJtQnJILElBRW5CLE1BQU1zSCxFQUFXLEtBQ2JYLEdBQVMsRUFDVDNHLEdBQVUsRUFHUnVILEVBQVksS0FDZFosR0FBUyxDQUFLLEVBSWxCLE9BRkFDLEVBQWMsU0FBVVUsR0FDeEJWLEVBQWMsVUFBV1csR0FDbEIsS0FDSFYsRUFBZSxTQUFVUyxHQUN6QlQsRUFBZSxVQUFXVSxFQUFVLENBQ3ZDLEdBV0NDLEdBQW1CLFFBQ25CQyxHQUFhdkMsR0FBbUIsU0FBVUMsT0FNMUN1QyxFQUE0QkQsRUFBWSxFQUFBdEgsVUFBWSxFQUFBd0gsZ0JBRXBEQyxFQUEyQyxvQkFBZEMsV0FBNkJBLFVBQVVDLFdBRXBFQyxHQUFrQk4sR0FBYUcsSUFBd0IsQ0FDekQsVUFDQSxNQUNGSSxTQUFTSixFQUFvQkssZ0JBQWtCTCxFQUFvQk0sVUFFL0QsRUFBYXRKLElBQ2YsR0FBSWlHLEVBQVdqRyxHQUNYLElBQ0lBLEVBQU1BLEdBQ1YsQ0FBRSxNQUFPdUosR0FFTHZKLEVBQU0sRUFDVixDQUlKLE1BQU13SixFQUFPeEosRUFHYixNQUFPLENBRFBBLEVBQW9CLGlCQUFQQSxFQUFrQkEsR0FBTzZILE1BQU00QixRQUFRekosR0FBT0EsRUFBSUYsT0FBU0UsR0FBT2lILEVBQVdqSCxHQUFPLEdBRzdGd0osRUFDSCxFQUlMLElBQUlFLEVBQWMsRUFDbEIsTUFBTUMsRUFBZSxNQUFNRCxFQUlyQkUsRUFBZSxFQUdyQixJQUFJQyxFQUlZRCxFQUloQkUsZUFBZUMsS0FBa0JQLEdBQzdCLE1BQU85QyxFQUFPc0QsRUFBTUMsRUFBT0MsR0FBU1YsRUFHOUJ2SSxFQUFVaUYsRUFBYSxDQUN6QmlFLGVBQWUsRUFDZkMsY0FBYyxHQUNFLGtCQUFWRixFQUFzQixDQUM1QkcsV0FBWUgsR0FDWkEsR0FBUyxDQUFDLEdBQ2QsSUFBSUMsRUFBZ0JsSixFQUFRa0osY0FDNUIsTUFBTUcsRUFBd0JySixFQUFRc0osZ0JBQ3RDLElBQUlDLEVBQWlCdkosRUFBUXVKLGVBQzdCLE1BQU1ILEdBQW9DLElBQXZCcEosRUFBUW9KLFdBQ3JCRSxFQUFtQjNILEdBQ21CLG1CQUExQjBILEVBQXVDQSxFQUFzQjFILElBQW1DLElBQTFCMEgsRUFFbEZGLEVBQWVuSixFQUFRbUosYUFHN0IsR0FBSW5FLEVBQVcrRCxHQUFPLENBQ2xCLE1BQU1TLEVBQVlULEVBQ1pVLEVBQWMsR0FDZEMsRUFBS2pFLEVBQU0zRixPQUNqQixJQUFJLElBQUk2SixFQUFRRCxFQUFHbkksUUFBU29JLEVBQU1uSSxLQUFNbUksRUFBUUQsRUFBR25JLE9BQU8sQ0FDdEQsTUFBTXhDLEVBQU00SyxFQUFNakksT0FFakIsaUJBQWlCa0ksS0FBSzdLLElBQVF5SyxFQUFVL0QsRUFBTUUsSUFBSTVHLEdBQUs4SyxLQUNwREosRUFBWWhJLEtBQUsxQyxFQUV6QixDQUNBLE9BQU9tRixRQUFRNEYsSUFBSUwsRUFBWU0sSUFBSUMsR0FDdkMsQ0FDQSxPQUFPQSxFQUFZakIsR0FDbkJGLGVBQWVtQixFQUFZSCxHQUV2QixNQUFPOUssR0FBTyxFQUFVOEssR0FDeEIsSUFBSzlLLEVBQUssT0FDVixNQUFPNEcsRUFBS2dCLEdBQU9uQixFQUFrQkMsRUFBTzFHLElBQ3JDa0wsRUFBb0JDLEVBQVVDLEdBQVMzRixFQUFlbUIsSUFBSUYsR0FDM0QyRSxFQUFlSCxFQUFtQmxMLEdBQ2xDc0wsRUFBa0IsSUFDaEJqQixXQUdPZSxFQUFNcEwsR0FDVHFMLEdBQWdCQSxFQUFhLElBQ3RCQSxFQUFhLEdBQUd6QixHQUFjcEUsTUFBSyxJQUFJb0IsSUFBTTNELE9BR3JEMkQsSUFBTTNELEtBR2pCLEdBQUl1RyxFQUFLMUosT0FBUyxFQUVkLE9BQU93TCxJQUVYLElBQ0kxSSxFQURBSyxFQUFPZ0gsRUFHWCxNQUFNc0IsRUFBbUI1QixJQUN6QndCLEVBQVNuTCxHQUFPLENBQ1p1TCxFQUNBLEdBRUosTUFBTUMsR0FBcUJ4RixFQUFZd0UsR0FDakM3RCxFQUFRQyxJQUlSNkUsRUFBZ0I5RSxFQUFNMUQsS0FDdEJ5SSxFQUFjL0UsRUFBTWdGLEdBQ3BCQyxFQUFnQjVGLEVBQVkwRixHQUFlRCxFQUFnQkMsRUFVakUsR0FSSUYsSUFDQWhCLEVBQWlCdkUsRUFBV3VFLEdBQWtCQSxFQUFlb0IsR0FBaUJwQixFQUU5RTVDLEVBQUksQ0FDQTNFLEtBQU11SCxFQUNObUIsR0FBSUMsS0FHUjNGLEVBQVdoRCxHQUVYLElBQ0lBLEVBQU9BLEVBQUsySSxFQUNoQixDQUFFLE1BQU9yQyxHQUVMM0csRUFBUTJHLENBQ1osQ0FHSixHQUFJdEcsR0FBUWdELEVBQVdoRCxFQUFLdUMsTUFBTyxDQVMvQixHQU5BdkMsUUFBYUEsRUFBSzRJLE9BQU90QyxJQUNyQjNHLEVBQVEyRyxDQUFHLElBS1hnQyxJQUFxQkosRUFBU25MLEdBQUssR0FBSSxDQUN2QyxHQUFJNEMsRUFBTyxNQUFNQSxFQUNqQixPQUFPSyxDQUNYLENBQVdMLEdBQVM0SSxHQUFxQmpCLEVBQWdCM0gsS0FHckR1SCxHQUFnQixFQUNoQmxILEVBQU8ySSxFQUVQaEUsRUFBSSxDQUNBM0UsT0FDQTBJLEdBQUk3RixJQUdoQixDQUVJcUUsSUFDS3ZILElBRUdxRCxFQUFXa0UsS0FDWGxILEVBQU9rSCxFQUFjbEgsRUFBTTJJLElBRy9CaEUsRUFBSSxDQUNBM0UsT0FDQTBJLEdBQUk3RixNQUtoQnFGLEVBQVNuTCxHQUFLLEdBQUsySixJQUVuQixNQUFNbUMsUUFBWVIsSUFPbEIsR0FKQTFELEVBQUksQ0FDQStELEdBQUk3RixLQUdKbEQsRUFJSixPQUFPdUgsRUFBZ0IyQixFQUFNN0ksRUFIekIsR0FBSW1ILEVBQWMsTUFBTXhILENBSWhDLENBQ0osQ0FFQSxNQUFNbUosRUFBb0IsQ0FBQ1YsRUFBY2xFLEtBQ3JDLElBQUksTUFBTW5ILEtBQU9xTCxFQUNUQSxFQUFhckwsR0FBSyxJQUFJcUwsRUFBYXJMLEdBQUssR0FBR21ILEVBQ25ELEVBRUU2RSxFQUFZLENBQUNDLEVBQVVoTCxLQU16QixJQUFLd0UsRUFBZXlHLElBQUlELEdBQVcsQ0FDL0IsTUFBTUUsRUFBT2pHLEVBQWFxQyxFQUFzQnRILEdBRzFDaUssRUFBcUIsQ0FBQyxFQUN0QmtCLEVBQVNyQyxFQUFlN0IsS0FBS3BDLEVBQVdtRyxHQUM5QyxJQUFJSSxFQUFVeEcsRUFDZCxNQUFNeUcsRUFBZ0IsQ0FBQyxFQUNqQkMsRUFBWSxDQUFDdk0sRUFBS29CLEtBQ3BCLE1BQU1vTCxFQUFPRixFQUFjdE0sSUFBUSxHQUduQyxPQUZBc00sRUFBY3RNLEdBQU93TSxFQUNyQkEsRUFBSzlKLEtBQUt0QixHQUNILElBQUlvTCxFQUFLQyxPQUFPRCxFQUFLeEwsUUFBUUksR0FBVyxFQUFFLEVBRS9Dc0wsRUFBUyxDQUFDMU0sRUFBSzJDLEVBQU9tRSxLQUN4Qm1GLEVBQVNyRSxJQUFJNUgsRUFBSzJDLEdBQ2xCLE1BQU02SixFQUFPRixFQUFjdE0sR0FDM0IsR0FBSXdNLEVBQ0EsSUFBSyxNQUFNRyxLQUFNSCxFQUNiRyxFQUFHaEssRUFBT21FLEVBRWxCLEVBRUU4RixFQUFlLEtBQ2pCLElBQUtuSCxFQUFleUcsSUFBSUQsS0FFcEJ4RyxFQUFlbUMsSUFBSXFFLEVBQVUsQ0FDekJmLEVBQ0EsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0RrQixFQUNBTSxFQUNBSCxLQUVDMUQsR0FBVyxDQU9aLE1BQU1nRSxFQUFlVixFQUFLM0QsVUFBVXNFLFdBQVc1RSxLQUFLcEMsRUFBV2lHLEVBQWtCN0QsS0FBS3BDLEVBQVdvRixFQXROakcsS0F1Tk02QixFQUFtQlosRUFBSzFELGNBQWNxRSxXQUFXNUUsS0FBS3BDLEVBQVdpRyxFQUFrQjdELEtBQUtwQyxFQUFXb0YsRUF0TnJHLEtBdU5KbUIsRUFBVSxLQUNOUSxHQUFnQkEsSUFDaEJFLEdBQW9CQSxJQUlwQnRILEVBQWV1SCxPQUFPZixFQUFTLENBRXZDLENBQ0osRUFRSixPQU5BVyxJQU1PLENBQ0hYLEVBQ0FHLEVBQ0FRLEVBQ0FQLEVBRVIsQ0FDQSxNQUFPLENBQ0hKLEVBQ0F4RyxFQUFlbUIsSUFBSXFGLEdBQVUsR0FDaEMsR0FnQkV2RixFQUFPMEYsR0FBVUosRUFBVSxJQUFJaUIsS0FFaENDLEVBQWdCaEgsRUFBYSxDQUUvQmlILGNBQWV0SCxFQUNmdUgsVUFBV3ZILEVBQ1h3SCxRQUFTeEgsRUFDVHlILGFBbkJpQixDQUFDaEosRUFBR2lKLEVBQUlDLEVBQVFuRCxFQUFZOEIsS0FDN0MsTUFBTXNCLEVBQWdCRCxFQUFPRSxnQkFDdkJDLEVBQW9CeEIsRUFBS3lCLFdBRXpCQyxNQUFjQyxLQUFLQyxTQUFXLEtBQVEsSUFBTUosRUFBb0IsRUFBSUEsRUFBb0IsS0FBT0gsRUFBT1Esb0JBQ3ZHaEksRUFBWXlILElBQWtCRSxFQUFvQkYsR0FHdkRYLFdBQVd6QyxFQUFZd0QsRUFBUzFCLEVBQUssRUFZckM4QixZQUFhcEksRUFFYnFJLG1CQUFtQixFQUNuQkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLG9CQUFvQixFQUVwQkwsbUJBQW9CN0UsRUFBaUIsSUFBUSxJQUM3Q21GLHNCQUF1QixJQUN2QkMsaUJBQWtCLElBQ2xCQyxlQUFnQnJGLEVBQWlCLElBQU8sSUFFeENzRixRQXRCWSxDQUFDL0MsRUFBYWdELElBQVV6SCxFQUFXeUUsSUFBZ0J6RSxFQUFXeUgsR0F1QjFFQyxTQUFVLEtBQUksRUFDZGpJLFFBQ0EwRixTQUNBd0MsU0FBVSxDQUFDLEdBRWZ6RyxHQW1CTTBHLEdBQW1CLElBQUFDLGVBQWMsQ0FBQyxHQTBDbENDLEVBQWlCekksR0FBbUJDLE9BQU95SSxxQkFDM0NDLEVBQU1GLEVBQWlCeEksT0FBT3lJLHFCQUF1QixHQW9CckRFLEVBQWUsSUFDVmhKLEVBQWFnSCxHQUFlLElBQUFpQyxZQUFXTixJQTJCdEJJLEVBQUlHLFFBZlpDLEdBQWEsQ0FBQ0MsRUFBTUMsRUFBVS9CLElBWW5DNkIsRUFBV0MsRUFWRkMsR0FBWSxLQUFLL0YsS0FDN0IsTUFBTXhKLEVBQU0sRUFBVXNQLEdBQU0sSUFDckIsQ0FBRSxDQUFFLENBQUVFLEdBQVcvSixFQUFlbUIsSUFBSUYsR0FDckMrSSxFQUFNRCxFQUFReFAsR0FDcEIsT0FBSXlQLFVBQ09ELEVBQVF4UCxHQUNSeVAsR0FFSkYsS0FBWS9GLEVBQ3RCLEdBQ2dDZ0UsS0EzQ2pDdUIsSUFFQXhJLE9BQU9tSix1QkFBeUIsR0M3aUJ4QyxNQUFNQyxFQUFjLENBQ2hCQyxRQUFRLEdDSkcsU0FBU0MsSUFDcEIsSUFBSUMsRUFBWVosSUFFaEIsT0FEWSxJQUFBYSxVQUFRLFdBQWMsTUFBTyxDQUFHM0QsT0FBUTBELEVBQVUxRCxPQUFRMUYsTUFBT29KLEVBQVVwSixNQUFVLEdBQUcsQ0FBQ29KLEVBQVUxRCxPQUFRMEQsRUFBVXBKLE9BRXJJLENDSmUsU0FBU3NKLEVBQVVDLFFBQ1QsSUFBakJBLElBQTJCQSxHQUFlLEdBQzlDLElBQUlsTixFQUFLaEIsR0FBTyxJQUFBaUIsVUFBU2lOLEdBQWUsR0FBSXROLEVBQVFJLEVBQUcsR0FBSW1OLEVBQVduTixFQUFHLEdBV3pFLE1BQU8sQ0FBQ0osR0FWSyxJQUFBZ0IsY0FBWSxTQUFVd00sR0FFM0JELEVBRG9CLGtCQUFiQyxFQUNFQSxFQUdBLFNBQVVDLEdBQ2YsT0FBUUEsQ0FDWixFQUVSLEdBQUcsSUFFUCxDRnFja0JySyxFQUFPc0ssZ0JEK0NOQyxJQUNmLE1BQU0sTUFBRTNOLEdBQVcyTixFQUNiQyxHQUFlLElBQUFwQixZQUFXTixHQUMxQjJCLEVBQXFCdkssRUFBV3RELEdBQ2hDNkssR0FBUyxJQUFBdUMsVUFBUSxJQUFJUyxFQUFxQjdOLEVBQU00TixHQUFnQjVOLEdBQU8sQ0FDekU2TixFQUNBRCxFQUNBNU4sSUFHRThOLEdBQWlCLElBQUFWLFVBQVEsSUFBSVMsRUFBcUJoRCxFQTVCdkMsRUFBQ3JILEVBQUdDLEtBRXJCLE1BQU14QixFQUFJc0IsRUFBYUMsRUFBR0MsR0FFMUIsR0FBSUEsRUFBRyxDQUNILE1BQVE2SSxJQUFLeUIsRUFBSzlCLFNBQVUrQixHQUFReEssR0FDNUI4SSxJQUFLMkIsRUFBS2hDLFNBQVVpQyxHQUFRekssRUFDaENzSyxHQUFNRSxJQUNOaE0sRUFBRXFLLElBQU15QixFQUFHdEIsT0FBT3dCLElBRWxCRCxHQUFNRSxJQUNOak0sRUFBRWdLLFNBQVcxSSxFQUFheUssRUFBSUUsR0FFdEMsQ0FDQSxPQUFPak0sQ0FBQyxFQWN5RGtNLENBQWFQLEVBQWMvQyxJQUFTLENBQ2pHZ0QsRUFDQUQsRUFDQS9DLElBR0V2QixFQUFXdUIsR0FBVUEsRUFBT3ZCLFNBRTVCOEUsR0FBa0IsSUFBQXpQLFFBQU93RSxHQUMzQm1HLElBQWE4RSxFQUFnQnJQLFVBQzdCcVAsRUFBZ0JyUCxRQUFVc0ssRUFBVUMsRUFBU3dFLEVBQWUvSixPQUFTQSxHQUFROEcsSUFFakYsTUFBTXdELEVBQWVELEVBQWdCclAsUUFhckMsT0FYSXNQLElBQ0FQLEVBQWUvSixNQUFRc0ssRUFBYSxHQUNwQ1AsRUFBZXJFLE9BQVM0RSxFQUFhLElBR3pDbEksR0FBMEIsS0FDdEIsR0FBSWtJLEVBRUEsT0FEQUEsRUFBYSxJQUFNQSxFQUFhLEtBQ3pCQSxFQUFhLEVBQ3hCLEdBQ0QsS0FDSSxJQUFBQyxlQUFjcEMsRUFBaUJxQyxTQUFVaEwsRUFBYW9LLEVBQU8sQ0FDaEUzTixNQUFPOE4sSUFDUixHQ3BGOEMsZUFBZ0IsQ0FDakU5TixNQUFPdUssK0RHdGRYLElBQUl6RCxFQUFVNUIsTUFBTTRCLFFBRUwsU0FBUzBILEVBQUdDLEdBQ3pCLElBQUlDLEVBQU0sR0FFVixHQUFtQixpQkFBUkQsR0FBbUMsaUJBQVJBLEVBQWtCLE9BQU9BLEdBQU8sR0FFdEUsR0FBSTNILEVBQVEySCxHQUNWLElBQUssSUFBV0UsRUFBUEMsRUFBSSxFQUFRQSxFQUFJSCxFQUFJdFIsT0FBUXlSLElBQ1IsTUFBdEJELEVBQU1ILEVBQUdDLEVBQUlHLE9BQ2hCRixJQUFRQSxHQUFPLEtBQU9DLFFBSTFCLElBQUssSUFBSUMsS0FBS0gsRUFDUkEsRUFBSWxSLGVBQWVxUixJQUFNSCxFQUFJRyxLQUFJRixJQUFRQSxHQUFPLEtBQU9FLEdBRy9ELE9BQU9GLENBQ1QsNkRDbEJBLFNBQWdCLFVBQVksdUJBQXVCLEtBQU8sdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsdUJBQXVCLFFBQVUsdUJBQXVCLFlBQWMsdUJBQXVCLFdBQWEsdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFlBQWMsdUJBQXVCLG9CQUFzQix1QkFBdUIsa0JBQW9CLHVCQUF1QixVQUFZLHVCQUF1QixRQUFVLG1GQ0F6aUIsU0FBZ0IsWUFBYyx1QkFBdUIsU0FBVyxtRkNBaEUsU0FBZ0IsVUFBWSx1QkFBdUIsS0FBTyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyx1QkFBdUIsUUFBVSx1QkFBdUIsWUFBYyx1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyx1QkFBdUIsWUFBYyx1QkFBdUIsb0JBQXNCLHVCQUF1QixrQkFBb0IsdUJBQXVCLFVBQVksdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFFBQVUsbUZDQTNtQixTQUFnQixTQUFXLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLG1GQ0F6SixTQUFnQixZQUFjLHVCQUF1QixXQUFhLHVCQUF1QixTQUFXLG1GQ0FwRyxTQUFnQixZQUFjLHVCQUF1QixNQUFRLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixTQUFXLHVCQUF1QixPQUFTLG1GQ0E5TCxTQUFnQixVQUFZLHVCQUF1QixZQUFjLHVCQUF1QixhQUFlLHVCQUF1QixVQUFZLHVCQUF1QixzQkFBd0IsdUJBQXVCLGFBQWUsbUZDQS9OLFNBQWdCLE9BQVMsdUJBQXVCLFlBQWMsdUJBQXVCLGtCQUFvQix1QkFBdUIsZ0JBQWtCLHVCQUF1QixXQUFhLHVCQUF1QixpQkFBbUIsdUJBQXVCLGVBQWlCLHVCQUF1QixjQUFnQix1QkFBdUIsb0JBQXNCLHVCQUF1Qiw2QkFBK0IsdUJBQXVCLHNCQUF3Qix1QkFBdUIsV0FBYSx1QkFBdUIsYUFBZSxtRkNBM2dCLFNBQWdCLFVBQVksbUZDQTVCLFNBQWdCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsdUJBQXVCLFFBQVUsdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFVBQVksdUJBQXVCLFlBQWMsdUJBQXVCLG9CQUFzQix1QkFBdUIsa0JBQW9CLG1GQ0E1YixTQUFnQixVQUFZLHVCQUF1QixJQUFNLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixNQUFRLHVCQUF1QixZQUFjLHVCQUF1QixJQUFNLHVCQUF1QixRQUFVLHVCQUF1QixVQUFZLHVCQUF1QixNQUFRLHVCQUF1QixVQUFZLHVCQUF1QixZQUFjLHVCQUF1QixPQUFTLHVCQUF1QixXQUFhLHVCQUF1QixhQUFlLHVCQUF1QixLQUFPLHVCQUF1QixTQUFXLHVCQUF1QixXQUFhLHVCQUF1QixpQkFBbUIsdUJBQXVCLGVBQWlCLG1GQ0FwcUIsU0FBZ0IsS0FBTyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyxtRkNBdkwsU0FBZ0IsVUFBWSx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsUUFBVSx1QkFBdUIsVUFBWSx1QkFBdUIsWUFBYyx1QkFBdUIsYUFBZSx1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsWUFBYyxtRkNBeGQsU0FBZ0IsVUFBWSx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsUUFBVSx1QkFBdUIsVUFBWSx1QkFBdUIsWUFBYyx1QkFBdUIsYUFBZSx1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsWUFBYyx1QkFBdUIsU0FBVyxtRkNBMWYsU0FBZ0IsVUFBWSx1QkFBdUIsV0FBYSx1QkFBdUIsUUFBVSx1QkFBdUIsTUFBUSx1QkFBdUIsTUFBUSx1QkFBdUIsUUFBVSx1QkFBdUIsb0JBQXNCLHVCQUF1QixrQkFBb0IsbUZDQXhSLFNBQWdCLFVBQVksbUZDQTVCLFNBQWdCLFVBQVksdUJBQXVCLE9BQVMsdUJBQXVCLFlBQWMsdUJBQXVCLEtBQU8sbUZDQS9ILFNBQWdCLGFBQWUsbUZDQS9CLFNBQWdCLEtBQU8sdUJBQXVCLEtBQU8sdUJBQXVCLFNBQVcsdUJBQXVCLE9BQVMsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsbUZDQXpMLFNBQWdCLFVBQVksdUJBQXVCLGNBQWdCLHVCQUF1QixJQUFNLHVCQUF1QixNQUFRLHVCQUF1QixLQUFPLHVCQUF1QixPQUFTLGtGQ0E3TCxTQUFnQixTQUFXLHVCQUF1QixVQUFZLHVCQUF1QixPQUFTLG1GQ0E5RixTQUFnQixhQUFlLHVCQUF1QixVQUFZLHVCQUF1QixPQUFTLHVCQUF1QixTQUFXLG1GQ0FwSSxTQUFnQixRQUFVLHVCQUF1QixVQUFZLHVCQUF1QixNQUFRLHVCQUF1QixZQUFjLHVCQUF1QixTQUFXLHVCQUF1QixZQUFjLG1GQ0F4TSxTQUFnQixPQUFTLHVCQUF1QixRQUFVLGtGQ0ExRCxTQUFnQixRQUFVLHVCQUF1QixZQUFjLHVCQUF1QixNQUFRLG1GQ0E5RixTQUFnQixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixTQUFXLG1GQ0ExRixTQUFnQixVQUFZLHVCQUF1QixTQUFXLHdCQUF3QixrQkFBb0IsdUJBQXVCLFNBQVcsdUJBQXVCLE1BQVEsbUZDQTNLLFNBQWdCLFVBQVksdUJBQXVCLG1CQUFxQix1QkFBdUIsU0FBVyx1QkFBdUIsa0JBQW9CLHVCQUF1QixNQUFRLHVCQUF1QixVQUFZLHVCQUF1QixjQUFnQixtRkNBOVAsU0FBZ0IsVUFBWSx1QkFBdUIsb0JBQXNCLHVCQUF1QixZQUFjLG1GQ0E5RyxTQUFnQixVQUFZLHVCQUF1QixTQUFXLHVCQUF1QixPQUFTLHVCQUF1QixPQUFTLHVCQUF1QixRQUFVLHVCQUF1QixVQUFZLHVCQUF1QixnQkFBa0IsdUJBQXVCLFdBQWEsdUJBQXVCLFNBQVcsbUZDQWpULFNBQWdCLFlBQWMsdUJBQXVCLE9BQVMsdUJBQXVCLFdBQWEsdUJBQXVCLGVBQWlCLHVCQUF1QixnQkFBa0IsbUZDQW5MLFNBQWdCLFVBQVksdUJBQXVCLE1BQVEsdUJBQXVCLHFCQUF1Qix3QkFBd0IsbUJBQXFCLG1GQ0F0SixTQUFnQixVQUFZLHVCQUF1QixlQUFpQix1QkFBdUIsYUFBZSxtRkNBMUcsU0FBZ0IsZ0JBQWtCLHVCQUF1QixnQkFBa0IsdUJBQXVCLFNBQVcsbUZDQTdHLFNBQWdCLFVBQVksdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsbUZDQTlGLFNBQWdCLFVBQVksbUZDQTVCLFNBQWdCLFVBQVksdUJBQXVCLFFBQVUsdUJBQXVCLFlBQWMsdUJBQXVCLFNBQVcsbUZDQXBJLFNBQWdCLFVBQVksdUJBQXVCLFdBQWEsdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFVBQVksdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsbUZDQXZVLFNBQWdCLFVBQVksdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsbUZDQTVMLFNBQWdCLE1BQVEsdUJBQXVCLFNBQVcsbUZDQTFELFNBQWdCLGVBQWlCLG1GQ0FqQyxTQUFnQixRQUFVLHVCQUF1QixTQUFXLHVCQUF1QixNQUFRLHVCQUF1QixLQUFPLHVCQUF1QixNQUFRLHVCQUF1QixJQUFNLHVCQUF1QixPQUFTLG1GQ0FyTixTQUFnQixVQUFZLHVCQUF1QixXQUFhLHVCQUF1QixNQUFRLHVCQUF1QixNQUFRLHVCQUF1QixRQUFVLHVCQUF1QixvQkFBc0IsdUJBQXVCLGtCQUFvQix1QkFBdUIsUUFBVSwyRENBeFIsSUFBSUcsRUFBWW5SLE1BQVFBLEtBQUttUixVQUFhLFdBU3RDLE9BUkFBLEVBQVcvUixPQUFPQyxRQUFVLFNBQVMwRSxHQUNqQyxJQUFLLElBQUlxTixFQUFHN1IsRUFBSSxFQUFHcUMsRUFBSXBDLFVBQVVDLE9BQVFGLEVBQUlxQyxFQUFHckMsSUFFNUMsSUFBSyxJQUFJOFIsS0FEVEQsRUFBSTVSLFVBQVVELEdBQ09ILE9BQU9RLFVBQVVDLGVBQWVDLEtBQUtzUixFQUFHQyxLQUN6RHROLEVBQUVzTixHQUFLRCxFQUFFQyxJQUVqQixPQUFPdE4sQ0FDWCxFQUNPb04sRUFBU3BSLE1BQU1DLEtBQU1SLFVBQ2hDLEVBQ0k4UixFQUFtQnRSLE1BQVFBLEtBQUtzUixrQkFBcUJsUyxPQUFPZ0IsT0FBUyxTQUFVdUIsRUFBR0UsRUFBR3FQLEVBQUdLLFFBQzdFMU8sSUFBUDBPLElBQWtCQSxFQUFLTCxHQUMzQjlSLE9BQU80USxlQUFlck8sRUFBRzRQLEVBQUksQ0FBRUMsWUFBWSxFQUFNakwsSUFBSyxXQUFhLE9BQU8xRSxFQUFFcVAsRUFBSSxHQUNuRixFQUFJLFNBQVV2UCxFQUFHRSxFQUFHcVAsRUFBR0ssUUFDVDFPLElBQVAwTyxJQUFrQkEsRUFBS0wsR0FDM0J2UCxFQUFFNFAsR0FBTTFQLEVBQUVxUCxFQUNiLEdBQ0dPLEVBQXNCelIsTUFBUUEsS0FBS3lSLHFCQUF3QnJTLE9BQU9nQixPQUFTLFNBQVV1QixFQUFHNEMsR0FDeEZuRixPQUFPNFEsZUFBZXJPLEVBQUcsVUFBVyxDQUFFNlAsWUFBWSxFQUFNbFAsTUFBT2lDLEdBQ2xFLEVBQUksU0FBUzVDLEVBQUc0QyxHQUNiNUMsRUFBVyxRQUFJNEMsQ0FDbkIsR0FDSW1OLEVBQWdCMVIsTUFBUUEsS0FBSzBSLGNBQWlCLFNBQVVDLEdBQ3hELEdBQUlBLEdBQU9BLEVBQUlDLFdBQVksT0FBT0QsRUFDbEMsSUFBSXpPLEVBQVMsQ0FBQyxFQUNkLEdBQVcsTUFBUHlPLEVBQWEsSUFBSyxJQUFJVCxLQUFLUyxFQUFlLFlBQU5ULEdBQW1COVIsT0FBT1MsZUFBZUMsS0FBSzZSLEVBQUtULElBQUlJLEVBQWdCcE8sRUFBUXlPLEVBQUtULEdBRTVILE9BREFPLEVBQW1Cdk8sRUFBUXlPLEdBQ3BCek8sQ0FDWCxFQUNBOUQsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FBRXZQLE9BQU8sSUFDdER1UCxFQUFRQyxVQUFPLEVBQ2YsSUFBSUMsRUFBVUwsRUFBYSxFQUFRLE9BQy9CTSxFQUFVLEVBQVEsTUFDdEJILEVBQVFDLEtBQU8sU0FBVTdCLEdBQ3JCLElBQUl2TixFQUFJdVAsRUFDSkMsRUFBUUgsRUFBUUksUUFBUUMsU0FBU0MsS0FBS3BDLEVBQU1xQyxVQUNoRCxHQUE0SSxXQUF2RCxRQUEvRUwsRUFBMkIsUUFBckJ2UCxFQUFLd1AsRUFBTXBMLFlBQXlCLElBQVBwRSxPQUFnQixFQUFTQSxFQUFHMEUsa0JBQStCLElBQVA2SyxPQUFnQixFQUFTQSxFQUFHTSxlQUNySCxNQUFNLElBQUk5TixVQUFVLDZFQUV4QixJQUFJN0QsRUFBVXFQLEVBQU1yUCxRQUFTNFIsRUFBY3ZDLEVBQU11QyxZQUFhQyxFQUFleEMsRUFBTXdDLGFBQWNDLEVBQWlCekMsRUFBTXlDLGVBQWdCQyxFQUFTMUMsRUFBTTBDLE9BQVFDLEVBQVMzQyxFQUFNMkMsT0FBUUMsRUFBZ0I1QyxFQUFNNEMsY0FDeE1DLEVBQWFaLEVBQU1qQyxNQUNuQjhDLEVBQWVoQixFQUFROVEsT0FBTyxNQUM5QitSLEVBQWlCakIsRUFBUTlRLE9BQU8sTUFDaENnUyxFQUFVbEIsRUFBUTlRLE9BQU8sTUFDekJxSyxFQUFLeUcsRUFBUXBQLFNBQVMsSUFBS3VRLEVBQXNCNUgsRUFBRyxHQUFJNkgsRUFBeUI3SCxFQUFHLEdBQ3BGOEgsRUFBS3JCLEVBQVFwUCxTQUFTLElBQUswUSxFQUFPRCxFQUFHLEdBQUlFLEVBQVVGLEVBQUcsR0FDdERHLEVBQUt4QixFQUFRcFAsU0FBUyxJQUFLNlEsRUFBT0QsRUFBRyxHQUFJRSxFQUFVRixFQUFHLEdBQ3RERyxFQUFLM0IsRUFBUXBQLFdBQVlnUixFQUFRRCxFQUFHLEdBQUlFLEVBQVdGLEVBQUcsR0FDdERHLEVBQUs5QixFQUFRcFAsV0FBWW1SLEVBQWNELEVBQUcsR0FBSUUsRUFBaUJGLEVBQUcsR0FDdEU5QixFQUFRN1EsV0FBVSxXQUNkLEdBQTBCLGlCQUFmTixFQUFRLEdBQWlCLENBQ2hDLElBQUlvVCxFQUFZaEMsRUFBUWlDLHdCQUF3QnJULEdBQzVDb1QsR0FDQUUsUUFBUUMsS0FBSyw2QkFBZ0NILEVBQVksNkZBRWpFLENBQ0osR0FBRyxDQUFDcFQsSUFDSm1SLEVBQVE3USxXQUFVLFdBQ2QsSUFBSXNSLEVBQUosQ0FHQSxJQUFJNEIsRUFBYXJCLEVBQWExUixTQUFXNkUsT0FBT21PLGlCQUFpQnRCLEVBQWExUixTQUM5RStTLEdBQWNFLEVBQVV0QixFQUFnQkMsRUFBU21CLEVBRmpELENBR0osSUFDQSxJQWlCSUcsRUFBbUIsU0FBVWxCLEdBQzdCQyxFQUFRRCxHQUNSLElBQ0lHLEVBREFHLEVBbkJPLFNBQVVOLEdBQ3JCLEdBQUtBLEdBQWlCLEtBQVRBLEVBR2IsTUFBNEIsaUJBQWhCelMsRUFBUSxHQUNGQSxFQUNUNFQsUUFBTyxTQUFVQyxHQUFLLE9BQU9BLEVBQUVsQyxnQkFBa0JjLEVBQUtkLGVBQWlCa0MsRUFBRWxDLGNBQWNtQyxXQUFXckIsRUFBS2QsY0FBZ0IsSUFDdkg5SyxPQUFPLEdBSUU3RyxFQUNUNFQsUUFBTyxTQUFVQyxHQUFLLE9BQU9BLEVBQUV2USxNQUFNcU8sZ0JBQWtCYyxFQUFLZCxlQUFpQmtDLEVBQUV2USxNQUFNcU8sY0FBY21DLFdBQVdyQixFQUFLZCxjQUFnQixJQUNuSTlLLE1BQUssU0FBVTNCLEVBQUdDLEdBQUssT0FBT2lNLEVBQVEyQyxRQUFRN08sRUFBRTVCLE1BQU82QixFQUFFN0IsTUFBUSxJQUFHLEVBR2pGLENBR2dCMFEsQ0FBU3ZCLEdBTWpCRyxFQUpDRyxFQUdxQixpQkFBVkEsRUFDTEEsRUFBTWtCLE1BQU14QixFQUFLNVQsUUFHakJrVSxFQUFNelAsTUFBTTJRLE1BQU14QixFQUFLNVQsUUFOdkIsR0FRWGdVLEVBQVFELEdBQ1JJLEVBQVNELEdBQ1RmLEdBQVVBLEVBQU9lLEVBQ3JCLEVBQ0ltQixFQUFlLFdBQ2YsR0FBYSxLQUFUdEIsR0FBZ0JNLEVBQXBCLENBR0EsSUFBSWlCLEVBQW9CN0IsRUFBc0JNLEVBQzlDTSxFQUFZeFUsT0FBT2dELE1BQVF5UyxFQUMzQmpDLEVBQVdrQyxVQUFZbEMsRUFBV2tDLFNBQVNsQixHQUMzQ1MsRUFBaUIsSUFDakI1QixHQUFVQSxFQUFPZ0IsR0FDakJSLEVBQXVCNEIsRUFOdkIsQ0FPSixFQUNJVCxFQUFZLFNBQVV0QixFQUFnQkMsRUFBU21CLEdBQy9DLElBQUkxUixFQUFJdVAsR0FDOEYsUUFBakd2UCxFQUFLc1EsYUFBdUQsRUFBU0EsRUFBZTNSLGVBQTRCLElBQVBxQixPQUFnQixFQUFTQSxFQUFHdVMsU0FDdElqQyxFQUFlM1IsUUFBUTRULE1BQU1DLFdBQWFkLEVBQVdjLFdBQ3JEbEMsRUFBZTNSLFFBQVE0VCxNQUFNRSxTQUFXZixFQUFXZSxTQUNuRG5DLEVBQWUzUixRQUFRNFQsTUFBTUcsTUFBUWhCLEVBQVdnQixNQUNoRHBDLEVBQWUzUixRQUFRNFQsTUFBTUksT0FBU2pCLEVBQVdpQixPQUNqRHJDLEVBQWUzUixRQUFRNFQsTUFBTUssV0FBYWxCLEVBQVdrQixXQUNyRHRDLEVBQWUzUixRQUFRNFQsTUFBTU0sVUFBWW5CLEVBQVdtQixVQUNwRHZDLEVBQWUzUixRQUFRNFQsTUFBTU8sT0FBU3hELEVBQVF5RCxpQkFBaUJyQixFQUFZLFVBQzNFcEIsRUFBZTNSLFFBQVE0VCxNQUFNUyxRQUFVMUQsRUFBUXlELGlCQUFpQnJCLEVBQVksV0FDNUVwQixFQUFlM1IsUUFBUTRULE1BQU1VLFlBQWMzRCxFQUFReUQsaUJBQWlCckIsRUFBWSxTQUFVLFNBQzFGcEIsRUFBZTNSLFFBQVE0VCxNQUFNVyxZQUFjNUQsRUFBUXlELGlCQUFpQnJCLEVBQVksU0FBVSxXQUViLFFBQTVFbkMsRUFBS2dCLGFBQXlDLEVBQVNBLEVBQVE1UixlQUE0QixJQUFQNFEsT0FBZ0IsRUFBU0EsRUFBR2dELFNBQ2pIaEMsRUFBUTVSLFFBQVE0VCxNQUFNQyxXQUFhZCxFQUFXYyxXQUM5Q2pDLEVBQVE1UixRQUFRNFQsTUFBTUUsU0FBV2YsRUFBV2UsU0FDNUNsQyxFQUFRNVIsUUFBUTRULE1BQU1LLFdBQWFsQixFQUFXa0IsV0FFdEQsRUFnRUlPLEVBQVc5RCxFQUFRK0QsYUFBYTVELEdBQU9sUixJQUN2QytVLEVBQVloRSxFQUFRK0QsYUFBYTVELEVBQU9mLEVBQVNBLEVBQVMsQ0FBQyxFQUFHMkIsR0FBYSxDQUFFa0MsU0FoRWxFLFNBQVUvUyxHQUNyQjhSLEVBQWU5UixHQUNmQSxFQUFFK1QsVUFDRjdDLEVBQXVCbFIsRUFBRTNDLE9BQU9nRCxPQUNoQyxJQUFJMlQsRUFBZ0JwRCxFQUFnQkEsRUFBYzVRLEVBQUUzQyxPQUFPZ0QsT0FBU0wsRUFBRTNDLE9BQU9nRCxNQUM3RWlTLEVBQWlCMEIsR0FDakJuRCxFQUFXa0MsVUFBWWxDLEVBQVdrQyxTQUFTL1MsRUFDL0MsRUEwRElpVSxPQXJEUyxTQUFValUsSUFFZGdSLGFBQXlDLEVBQVNBLEVBQVE1UixXQUFhWSxFQUFFa1UsZ0JBQzFFNUIsRUFBaUIsSUFDakJ6QixFQUFXb0QsUUFBVXBELEVBQVdvRCxPQUFPalUsR0FFL0MsRUFnREltVSxRQTFEVSxTQUFVblUsR0FDcEJzUyxFQUFpQnRTLEVBQUUzQyxPQUFPZ0QsT0FDMUJ3USxFQUFXc0QsU0FBV3RELEVBQVdzRCxRQUFRblUsRUFDN0MsRUF3RElvVSxVQTdDWSxTQUFVcFUsR0FDdEIsSUFBSXFVLEVBSTJELE9BQWpDclUsRUFBRXNVLGNBQWNDLGNBQ0l2VSxFQUFFc1UsY0FBY0MsZUFBaUJ2VSxFQUFFc1UsY0FBY2pVLE1BQU03QyxPQUdyRzZXLEdBWlMsZUFZV3JVLEVBQUV0QyxJQUN0Qm1WLEtBRUt3QixHQUFvQjdELEdBZHZCLFFBY3VDeFEsRUFBRXRDLEtBQXdCLEtBQVQ2VCxHQUlyRDhDLEdBQW9CNUQsR0FqQnJCLFVBaUJ1Q3pRLEVBQUV0QyxLQUEwQixLQUFUNlQsS0FIOUR2UixFQUFFd1UsaUJBQ0YzQixLQU1KaEMsRUFBV3VELFdBQWF2RCxFQUFXdUQsVUFBVXBVLEVBQ2pELEVBd0IwQmpCLElBQUs2VSxHQUFrQyxpQkFBZixFQUN4QzdELEVBQVEwRSxVQUFVYixFQUFVOUMsR0FDNUJBLEtBQ1YsT0FBUWhCLEVBQVFJLFFBQVF2QixjQUFjLE1BQU8sQ0FBRStGLFVBQVcsb0JBQXFCMUIsTUFBTyxDQUM5RTJCLFNBQVUsYUFDVHBFLEVBQ0hOLEVBQ0NILEVBQVFJLFFBQVF2QixjQUFjbUIsRUFBUUksUUFBUTBFLFNBQVUsS0FDdkRkLEVBQ0FoRSxFQUFRSSxRQUFRdkIsY0FBYyxPQUFRLENBQUUrRixVQUFXLG1CQUFvQjNWLElBQUtnUyxFQUFnQmlDLE1BQU8sQ0FDM0Y2QixRQUFTLE9BQ1RDLGNBQWUsT0FDZkMsZ0JBQWlCLGNBQ2pCQyxZQUFhLGNBQ2JDLFVBQVcsT0FDWEMsTUFBTyxzQkFDUFAsU0FBVSxXQUNWUSxJQUFLLEVBQ0xDLEtBQU0sSUFFVnRGLEVBQVFJLFFBQVF2QixjQUFjLE9BQVEsQ0FBRStGLFVBQVcsa0JBQW1CMUIsTUFBTyxDQUNyRXFDLFdBQVksU0FDWlAsY0FBZSxPQUNmUSxXQUFZLFFBQ1hsRSxHQUNUdEIsRUFBUUksUUFBUXZCLGNBQWMsUUFBUyxDQUFFK0YsVUFBVyxXQUFZM1YsSUFBS2lTLEVBQVN1RSxRQWhEeEUsU0FBVXZWLEdBQ3hCLElBQUlTLEVBQ0ErVSxFQUFvQnhWLEVBQUVzVSxjQUFjQyxjQUFnQixFQUc5QixJQUF0QmlCLEVBSUVqRSxHQUFpQixLQUFUQSxJQUNWc0IsSUFDQXJJLFlBQVcsV0FDUCxJQUFJL0osRUFBSXVQLEVBQ3dCLFFBQS9CdlAsRUFBS3FRLEVBQWExUixlQUE0QixJQUFQcUIsR0FBeUJBLEVBQUdnVixRQUNwRSxJQUFJQyxFQUFnQnRFLEVBQUs1VCxPQUFTZ1ksRUFDRixRQUEvQnhGLEVBQUtjLEVBQWExUixlQUE0QixJQUFQNFEsR0FBeUJBLEVBQUcyRixrQkFBa0JELEVBQWVBLEVBQ3pHLEdBQUcsSUFWNkIsUUFBL0JqVixFQUFLcVEsRUFBYTFSLGVBQTRCLElBQVBxQixHQUF5QkEsRUFBR2dWLE9BWTVFLEVBOEJnSHpDLE1BQU8sQ0FDbkc4QixjQUFnQnZELEdBQWlCLEtBQVRBLEVBQXVCLFVBQVQsT0FDdENxRSxXQUFZLGNBQ1p6QyxNQUFPLE9BQ1AwQyxRQUFTLE9BQ1RDLE9BQVEsT0FDUmIsVUFBVyxPQUNYeEIsUUFBUyxFQUNURixPQUFRLEVBQ1IyQixNQUFPLHNCQUNQYSxXQUFZLGVBQ2JDLGFBQWN6RSxFQUFNMEUsVUFBVyxNQUN0RCw2QkMxT0E5WSxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUFFdlAsT0FBTyxJQUN0RHVQLEVBQVFvQyx3QkFBMEJwQyxFQUFROEMsUUFBVTlDLEVBQVE0RCxpQkFBbUI1RCxFQUFRNkUsZUFBWSxFQW1Cbkc3RSxFQUFRNkUsVUFsQlIsV0FFSSxJQURBLElBQUl5QixFQUFPLEdBQ0ZDLEVBQUssRUFBR0EsRUFBSzVZLFVBQVVDLE9BQVEyWSxJQUNwQ0QsRUFBS0MsR0FBTTVZLFVBQVU0WSxHQUV6QixJQUFJQyxFQUFlRixFQUFLM0QsT0FBTzhELFNBQy9CLE9BQU8sU0FBVUMsR0FDYixJQUFLLElBQUlILEVBQUssRUFBR0ksRUFBaUJILEVBQWNELEVBQUtJLEVBQWUvWSxPQUFRMlksSUFBTSxDQUM5RSxJQUFJcFgsRUFBTXdYLEVBQWVKLEdBQ04sbUJBQVJwWCxFQUNQQSxFQUFJdVgsR0FFQ3ZYLElBQ0xBLEVBQUlLLFFBQVVrWCxFQUV0QixDQUNKLENBQ0osRUFnQkExRyxFQUFRNEQsaUJBWFIsU0FBMEJnRCxFQUFRQyxFQUFNQyxHQU1wQyxZQUxnQixJQUFaQSxJQUFzQkEsRUFBVSxJQUVoQ0EsSUFDQUEsRUFBVUEsRUFBUUMsUUFBUUQsRUFBUSxHQUFJQSxFQUFRLEdBQUdFLGdCQUU5QyxDQUFDLE1BQU8sUUFBUyxTQUFVLFFBRTdCbE8sS0FBSSxTQUFVbU8sR0FBTyxPQUFPTCxFQUFPQyxFQUFPSSxFQUFNSCxFQUFVLElBQzFESSxLQUFLLElBQ2QsRUFXQWxILEVBQVE4QyxRQVRSLFNBQWlCN08sRUFBR0MsR0FDaEIsT0FBSUQsRUFBSUMsRUFDRyxFQUVQRCxFQUFJQyxHQUNJLEVBRUwsQ0FDWCxFQVlBOEwsRUFBUW9DLHdCQVZSLFNBQWlDK0UsR0FFN0IsSUFEQSxJQUFJQyxFQUFVLENBQUMsRUFDTjFaLEVBQUksRUFBR0EsRUFBSXlaLEVBQU12WixPQUFRRixJQUFLLENBQ25DLEdBQUkwWixFQUFRRCxFQUFNelosR0FBRzJFLE9BQ2pCLE9BQU84VSxFQUFNelosR0FBRzJFLE1BRXBCK1UsRUFBUUQsRUFBTXpaLEdBQUcyRSxRQUFTLENBQzlCLENBQ0EsT0FBTyxJQUNYLCtHQy9DQSxJQUFJZ1YsRUFBNEIsb0JBQWR0USxXQUE0QkEsVUFBVXVRLFVBQVU1RyxjQUFjNVIsUUFBUSxXQUFhLEVBRXJHLFNBQVN5WSxFQUFTQyxFQUFRalksRUFBT2tZLEVBQVFDLEdBQ25DRixFQUFPN1gsaUJBQ1Q2WCxFQUFPN1gsaUJBQWlCSixFQUFPa1ksRUFBUUMsR0FDOUJGLEVBQU9HLGFBQ2hCSCxFQUFPRyxZQUFZLEtBQUt6SyxPQUFPM04sSUFBUSxXQUNyQ2tZLEVBQU9wVCxPQUFPOUUsTUFDaEIsR0FFSixDQUdBLFNBQVNxWSxFQUFRQyxFQUFVL1osR0FHekIsSUFGQSxJQUFJZ2EsRUFBT2hhLEVBQUlrVixNQUFNLEVBQUdsVixFQUFJRixPQUFTLEdBRTVCRixFQUFJLEVBQUdBLEVBQUlvYSxFQUFLbGEsT0FBUUYsSUFDL0JvYSxFQUFLcGEsR0FBS21hLEVBQVNDLEVBQUtwYSxHQUFHZ1QsZUFHN0IsT0FBT29ILENBQ1QsQ0FHQSxTQUFTQyxFQUFRamEsR0FDSSxpQkFBUkEsSUFBa0JBLEVBQU0sSUFPbkMsSUFKQSxJQUFJZSxHQUZKZixFQUFNQSxFQUFJaVosUUFBUSxNQUFPLEtBRVZpQixNQUFNLEtBRWpCNVMsRUFBUXZHLEVBQUtvWixZQUFZLElBRXRCN1MsR0FBUyxHQUNkdkcsRUFBS3VHLEVBQVEsSUFBTSxJQUNuQnZHLEVBQUswTCxPQUFPbkYsRUFBTyxHQUNuQkEsRUFBUXZHLEVBQUtvWixZQUFZLElBRzNCLE9BQU9wWixDQUNULENBc0dBLElBdkZBLElBQUlxWixFQUFVLENBQ1pDLFVBQVcsRUFDWEMsSUFBSyxFQUNMQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsT0FBUSxHQUNSQyxJQUFLLEdBQ0xDLE9BQVEsR0FDUkMsTUFBTyxHQUNQbEQsS0FBTSxHQUNObUQsR0FBSSxHQUNKQyxNQUFPLEdBQ1BDLEtBQU0sR0FDTkMsSUFBSyxHQUNMaE8sT0FBUSxHQUNSaU8sSUFBSyxHQUNMQyxPQUFRLEdBQ1JDLEtBQU0sR0FDTkMsSUFBSyxHQUNMQyxPQUFRLEdBQ1JDLFNBQVUsR0FDVkMsU0FBVSxHQUNWQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxNQUFPLEdBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLGFBQWMsSUFDZEMsUUFBUyxJQUNUQyxVQUFXLElBQ1hDLGFBQWMsSUFDZEMsWUFBYSxJQUNiQyxXQUFZLElBQ1osSUFBSyxHQUNMLElBQUssSUFDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLaEQsRUFBTyxJQUFNLElBQ2xCLElBQUtBLEVBQU8sR0FBSyxJQUNqQixJQUFLQSxFQUFPLEdBQUssSUFDakIsSUFBTSxJQUNOLElBQUssSUFDTCxJQUFLLElBQ0wsS0FBTSxLQUdKaUQsRUFBWSxDQUVkLElBQUssR0FDTEMsTUFBTyxHQUVQLElBQUssR0FDTEMsSUFBSyxHQUNMQyxPQUFRLEdBRVIsSUFBSyxHQUNMQyxLQUFNLEdBQ05DLFFBQVMsR0FFVCxJQUFLLEdBQ0xDLElBQUssR0FDTEMsUUFBUyxJQUVQQyxFQUFjLENBQ2hCLEdBQUksV0FDSixHQUFJLFNBQ0osR0FBSSxVQUNKLEdBQUksVUFDSkMsU0FBVSxHQUNWQyxRQUFTLEdBQ1RDLE9BQVEsR0FDUkMsUUFBUyxJQUVQQyxFQUFRLENBQ1YsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxHQUVGQyxFQUFZLENBQUMsRUFFUi9MLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUN0QjZJLEVBQVEsSUFBSWhMLE9BQU9tQyxJQUFNLElBQU1BLEVBR2pDLElBQUlnTSxFQUFZLEdBRVpDLEdBQWtCLEVBRWxCQyxFQUFTLE1BRVRDLEVBQXNCLEdBR3RCQyxFQUFPLFNBQWM3SSxHQUN2QixPQUFPc0YsRUFBUXRGLEVBQUVsQyxnQkFBa0I0SixFQUFVMUgsRUFBRWxDLGdCQUFrQmtDLEVBQUVvRSxjQUFjMEUsV0FBVyxFQUM5RixFQUdBLFNBQVNDLEVBQVNDLEdBQ2hCTCxFQUFTSyxHQUFTLEtBQ3BCLENBR0EsU0FBU0MsSUFDUCxPQUFPTixHQUFVLEtBQ25CLENBc0hBLElBQUlPLEVBQWEsU0FBb0JDLEdBQ25DLElBQUlqZSxFQUFNaWUsRUFBS2plLElBQ1g4ZCxFQUFRRyxFQUFLSCxNQUNibkUsRUFBU3NFLEVBQUt0RSxPQUNkdUUsRUFBZ0JELEVBQUtFLFNBQ3JCQSxPQUE2QixJQUFsQkQsRUFBMkIsSUFBTUEsRUFDN0JqRSxFQUFRamEsR0FDZG9lLFNBQVEsU0FBVUMsR0FDN0IsSUFBSUMsRUFBYUQsRUFBVW5FLE1BQU1pRSxHQUM3QkksRUFBTUQsRUFBV3hlLE9BQ2pCMGUsRUFBVUYsRUFBV0MsRUFBTSxHQUMzQkUsRUFBc0IsTUFBWkQsRUFBa0IsSUFBTWIsRUFBS2EsR0FDM0MsR0FBS2xCLEVBQVVtQixHQUFmLENBRUtYLElBQU9BLEVBQVFDLEtBQ3BCLElBQUkvRCxFQUFPdUUsRUFBTSxFQUFJekUsRUFBUTBDLEVBQVc4QixHQUFjLEdBQ3REaEIsRUFBVW1CLEdBQVduQixFQUFVbUIsR0FBUzVKLFFBQU8sU0FBVTZKLEdBR3ZELFVBRHVCL0UsR0FBUytFLEVBQU8vRSxTQUFXQSxJQUNyQitFLEVBQU9aLFFBQVVBLEdBclFwRCxTQUFzQmEsRUFBSUMsR0FLeEIsSUFKQSxJQUFJQyxFQUFPRixFQUFHN2UsUUFBVThlLEVBQUc5ZSxPQUFTNmUsRUFBS0MsRUFDckNFLEVBQU9ILEVBQUc3ZSxRQUFVOGUsRUFBRzllLE9BQVM4ZSxFQUFLRCxFQUNyQ0ksR0FBVSxFQUVMbmYsRUFBSSxFQUFHQSxFQUFJaWYsRUFBSy9lLE9BQVFGLEtBQ0EsSUFBM0JrZixFQUFLOWQsUUFBUTZkLEVBQUtqZixNQUFZbWYsR0FBVSxHQUc5QyxPQUFPQSxDQUNULENBMlA2REMsQ0FBYU4sRUFBTzFFLEtBQU1BLEdBQ25GLEdBUitCLENBU2pDLEdBQ0YsRUFHQSxTQUFTaUYsRUFBYXhkLEVBQU95ZCxFQUFTcEIsRUFBT3FCLEdBSzNDLElBQUlDLEVBSkosR0FBSUYsRUFBUUMsVUFBWUEsSUFNcEJELEVBQVFwQixRQUFVQSxHQUEyQixRQUFsQm9CLEVBQVFwQixPQUFpQixDQUl0RCxJQUFLLElBQUkzWixLQUZUaWIsRUFBaUJGLEVBQVFsRixLQUFLbGEsT0FBUyxFQUV6QnVkLEVBQ1I1ZCxPQUFPUSxVQUFVQyxlQUFlQyxLQUFLa2QsRUFBT2xaLE1BQ3pDa1osRUFBTWxaLElBQU0rYSxFQUFRbEYsS0FBS2haLFNBQVNtRCxJQUFNLEdBQUtrWixFQUFNbFosS0FBb0MsSUFBOUIrYSxFQUFRbEYsS0FBS2haLFNBQVNtRCxNQUNsRmliLEdBQWlCLElBTUssSUFBeEJGLEVBQVFsRixLQUFLbGEsUUFBaUJ1ZCxFQUFNLEtBQVFBLEVBQU0sS0FBUUEsRUFBTSxLQUFRQSxFQUFNLE9BQU8rQixHQUF1QyxNQUFyQkYsRUFBUUcsV0FDMUUsSUFBbkNILEVBQVF2RixPQUFPbFksRUFBT3lkLEtBQ3BCemQsRUFBTXFWLGVBQWdCclYsRUFBTXFWLGlCQUFzQnJWLEVBQU02ZCxhQUFjLEVBQ3RFN2QsRUFBTThkLGlCQUFpQjlkLEVBQU04ZCxrQkFDN0I5ZCxFQUFNK2QsZUFBYy9kLEVBQU0rZCxjQUFlLEdBR25ELENBQ0YsQ0FHQSxTQUFTOWIsRUFBU2pDLEVBQU8wZCxHQUN2QixJQUFJTSxFQUFXbkMsRUFBVSxLQUNyQnRkLEVBQU15QixFQUFNZ2QsU0FBV2hkLEVBQU1pZSxPQUFTamUsRUFBTWtlLFNBRWhELEdBQUtDLEVBQVEvSyxPQUFPMVUsS0FBS0UsS0FBTW9CLEdBQS9CLENBc0NBLEdBbkNZLEtBQVJ6QixHQUFzQixNQUFSQSxJQUFhQSxFQUFNLEtBUUwsSUFBNUJ1ZCxFQUFVdmMsUUFBUWhCLElBQXVCLE1BQVJBLEdBQWF1ZCxFQUFVN2EsS0FBSzFDLEdBTWpFLENBQUMsVUFBVyxTQUFVLFdBQVksV0FBV29lLFNBQVEsU0FBVXlCLEdBQzdELElBQUlDLEVBQVM5QyxFQUFZNkMsR0FFckJwZSxFQUFNb2UsS0FBMkMsSUFBL0J0QyxFQUFVdmMsUUFBUThlLEdBQ3RDdkMsRUFBVTdhLEtBQUtvZCxJQUNMcmUsRUFBTW9lLElBQVl0QyxFQUFVdmMsUUFBUThlLElBQVcsRUFDekR2QyxFQUFVOVEsT0FBTzhRLEVBQVV2YyxRQUFROGUsR0FBUyxHQUN2QixZQUFaRCxHQUF5QnBlLEVBQU1vZSxJQUFpQyxJQUFyQnRDLEVBQVV6ZCxTQUt4RDJCLEVBQU15YixTQUFXemIsRUFBTXdiLFVBQVl4YixFQUFNMGIsU0FDN0NJLEVBQVlBLEVBQVVySSxNQUFNcUksRUFBVXZjLFFBQVE4ZSxLQUdwRCxJQUtJOWYsS0FBT3FkLEVBQU8sQ0FHaEIsSUFBSyxJQUFJOUwsS0FGVDhMLEVBQU1yZCxJQUFPLEVBRUN3YyxFQUNSQSxFQUFVakwsS0FBT3ZSLElBQUs0ZixFQUFRck8sSUFBSyxHQUd6QyxJQUFLa08sRUFBVSxNQUNqQixDQUdBLElBQUssSUFBSW5kLEtBQUsrYSxFQUNSNWQsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS2tkLEVBQU8vYSxLQUM5QythLEVBQU0vYSxHQUFLYixFQUFNdWIsRUFBWTFhLEtBVzdCYixFQUFNc2Usb0JBQXNCdGUsRUFBTTBiLFFBQVcxYixFQUFNeWIsVUFBWXpiLEVBQU1zZSxpQkFBaUIsZUFDekQsSUFBM0J4QyxFQUFVdmMsUUFBUSxLQUNwQnVjLEVBQVU3YSxLQUFLLEtBR2MsSUFBM0I2YSxFQUFVdmMsUUFBUSxLQUNwQnVjLEVBQVU3YSxLQUFLLElBR2pCMmEsRUFBTSxLQUFNLEVBQ1pBLEVBQU0sS0FBTSxHQUlkLElBQUlTLEVBQVFDLElBRVosR0FBSTBCLEVBQ0YsSUFBSyxJQUFJN2YsRUFBSSxFQUFHQSxFQUFJNmYsRUFBUzNmLE9BQVFGLElBQy9CNmYsRUFBUzdmLEdBQUdrZSxRQUFVQSxJQUF5QixZQUFmcmMsRUFBTTBGLE1BQXNCc1ksRUFBUzdmLEdBQUdvZ0IsU0FBMEIsVUFBZnZlLEVBQU0wRixNQUFvQnNZLEVBQVM3ZixHQUFHcWdCLFFBQzNIaEIsRUFBYXhkLEVBQU9nZSxFQUFTN2YsR0FBSWtlLEVBQU9xQixHQU05QyxHQUFNbmYsS0FBT3NkLEVBRWIsSUFBSyxJQUFJN0UsRUFBSyxFQUFHQSxFQUFLNkUsRUFBVXRkLEdBQUtGLE9BQVEyWSxJQUMzQyxJQUFtQixZQUFmaFgsRUFBTTBGLE1BQXNCbVcsRUFBVXRkLEdBQUt5WSxHQUFJdUgsU0FBMEIsVUFBZnZlLEVBQU0wRixNQUFvQm1XLEVBQVV0ZCxHQUFLeVksR0FBSXdILFFBQ3JHM0MsRUFBVXRkLEdBQUt5WSxHQUFJelksSUFBSyxDQU0xQixJQUxBLElBQUkwZSxFQUFTcEIsRUFBVXRkLEdBQUt5WSxHQUN4QjBGLEVBQVdPLEVBQU9QLFNBQ2xCK0IsRUFBY3hCLEVBQU8xZSxJQUFJa2EsTUFBTWlFLEdBQy9CZ0MsRUFBbUIsR0FFZGhhLEVBQUksRUFBR0EsRUFBSStaLEVBQVlwZ0IsT0FBUXFHLElBQ3RDZ2EsRUFBaUJ6ZCxLQUFLaWIsRUFBS3VDLEVBQVkvWixLQUdyQ2dhLEVBQWlCclksT0FBT3NSLEtBQUssTUFBUW1FLEVBQVV6VixPQUFPc1IsS0FBSyxLQUU3RDZGLEVBQWF4ZCxFQUFPaWQsRUFBUVosRUFBT3FCLEVBRXZDLENBekd5QyxDQTRHL0MsQ0FPQSxTQUFTUyxFQUFRNWYsRUFBSzJjLEVBQVFoRCxHQUM1QjRELEVBQVksR0FDWixJQUFJeGMsRUFBT2taLEVBQVFqYSxHQUVmZ2EsRUFBTyxHQUNQOEQsRUFBUSxNQUVScUIsRUFBVXZkLFNBRVZoQyxFQUFJLEVBQ0pxZ0IsR0FBUSxFQUNSRCxHQUFVLEVBQ1Y3QixFQUFXLElBQ1hqZCxHQUFVLEVBc0JkLFNBcEJlZ0MsSUFBWHlXLEdBQTBDLG1CQUFYZ0QsSUFDakNoRCxFQUFTZ0QsR0FHb0Msb0JBQTNDbGQsT0FBT1EsVUFBVXdILFNBQVN0SCxLQUFLd2MsS0FDN0JBLEVBQU9tQixRQUFPQSxFQUFRbkIsRUFBT21CLE9BRTdCbkIsRUFBT3dDLFVBQVNBLEVBQVV4QyxFQUFPd0MsU0FFakN4QyxFQUFPc0QsUUFBT0EsRUFBUXRELEVBQU9zRCxZQUVWL2MsSUFBbkJ5WixFQUFPcUQsVUFBdUJBLEVBQVVyRCxFQUFPcUQsY0FFNUI5YyxJQUFuQnlaLEVBQU96YixVQUF1QkEsRUFBVXliLEVBQU96YixTQUVwQixpQkFBcEJ5YixFQUFPd0IsV0FBdUJBLEVBQVd4QixFQUFPd0IsV0FHdkMsaUJBQVh4QixJQUFxQm1CLEVBQVFuQixHQUVqQy9jLEVBQUltQixFQUFLakIsT0FBUUYsSUFHdEJvYSxFQUFPLElBRlBoYSxFQUFNZSxFQUFLbkIsR0FBR3NhLE1BQU1pRSxJQUlacmUsT0FBUyxJQUFHa2EsRUFBT0YsRUFBUTBDLEVBQVd4YyxLQUc5Q0EsRUFBYyxPQURkQSxFQUFNQSxFQUFJQSxFQUFJRixPQUFTLElBQ0gsSUFBTTZkLEVBQUszZCxNQUdsQnNkLElBQVlBLEVBQVV0ZCxHQUFPLElBRTFDc2QsRUFBVXRkLEdBQUswQyxLQUFLLENBQ2xCdWQsTUFBT0EsRUFDUEQsUUFBU0EsRUFDVGxDLE1BQU9BLEVBQ1A5RCxLQUFNQSxFQUNOcUYsU0FBVXRlLEVBQUtuQixHQUNmK1osT0FBUUEsRUFDUjNaLElBQUtlLEVBQUtuQixHQUNWdWUsU0FBVUEsRUFDVmdCLFFBQVNBLFNBS1UsSUFBWkEsSUFsRWIsU0FBdUJBLEdBQ3JCLE9BQU96QixFQUFvQjFjLFFBQVFtZSxJQUFZLENBQ2pELENBZ0V5Q2lCLENBQWNqQixJQUFZNVksU0FDL0RtWCxFQUFvQmhiLEtBQUt5YyxHQUN6QjFGLEVBQVMwRixFQUFTLFdBQVcsU0FBVTdjLEdBQ3JDb0IsRUFBU3BCLEVBQUc2YyxFQUNkLEdBQUdqZSxHQUVFc2MsSUFDSEEsR0FBa0IsRUFDbEIvRCxFQUFTbFQsT0FBUSxTQUFTLFdBQ3hCZ1gsRUFBWSxFQUNkLEdBQUdyYyxJQUdMdVksRUFBUzBGLEVBQVMsU0FBUyxTQUFVN2MsR0FDbkNvQixFQUFTcEIsRUFBRzZjLEdBN1RsQixTQUF1QjFkLEdBQ3JCLElBQUl6QixFQUFNeUIsRUFBTWdkLFNBQVdoZCxFQUFNaWUsT0FBU2plLEVBQU1rZSxTQUU1Qy9mLEVBQUkyZCxFQUFVdmMsUUFBUWhCLEdBZTFCLEdBWklKLEdBQUssR0FDUDJkLEVBQVU5USxPQUFPN00sRUFBRyxHQUlsQjZCLEVBQU16QixLQUFtQyxTQUE1QnlCLEVBQU16QixJQUFJNFMsZUFDekIySyxFQUFVOVEsT0FBTyxFQUFHOFEsRUFBVXpkLFFBSXBCLEtBQVJFLEdBQXNCLE1BQVJBLElBQWFBLEVBQU0sSUFFakNBLEtBQU9xZCxFQUdULElBQUssSUFBSTlMLEtBRlQ4TCxFQUFNcmQsSUFBTyxFQUVDd2MsRUFDUkEsRUFBVWpMLEtBQU92UixJQUFLNGYsRUFBUXJPLElBQUssRUFHN0MsQ0FxU004TyxDQUFjL2QsRUFDaEIsR0FBR3BCLEdBRVAsQ0FlQSxJQUFJb2YsRUFBTyxDQUNUekMsU0FBVUEsRUFDVkUsU0FBVUEsRUFDVndDLFlBeFdGLFNBQXFCekMsRUFBTzBDLEdBQzFCLElBQUlDLEVBQ0E3Z0IsRUFJSixJQUFLLElBQUlJLEtBRko4ZCxJQUFPQSxFQUFRQyxLQUVKVCxFQUNkLEdBQUk3ZCxPQUFPUSxVQUFVQyxlQUFlQyxLQUFLbWQsRUFBV3RkLEdBR2xELElBRkF5Z0IsRUFBV25ELEVBQVV0ZCxHQUVoQkosRUFBSSxFQUFHQSxFQUFJNmdCLEVBQVMzZ0IsUUFDbkIyZ0IsRUFBUzdnQixHQUFHa2UsUUFBVUEsRUFBTzJDLEVBQVNoVSxPQUFPN00sRUFBRyxHQUFRQSxJQU05RG1lLE1BQWVELEdBQU9ELEVBQVMyQyxHQUFZLE1BQ2pELEVBdVZFRSxtQkFyWUYsV0FDRSxPQUFPbkQsRUFBVXJJLE1BQU0sRUFDekIsRUFvWUV5TCxVQW5YRixTQUFtQmxDLEdBS2pCLE1BSnVCLGlCQUFaQSxJQUNUQSxFQUFVZCxFQUFLYyxLQUdzQixJQUFoQ2xCLEVBQVV2YyxRQUFReWQsRUFDM0IsRUE4V0U1SixPQWpZRixTQUFnQnBULEdBQ2QsSUFBSTlCLEVBQVM4QixFQUFNOUIsUUFBVThCLEVBQU1tZixXQUMvQkMsRUFBVWxoQixFQUFPa2hCLFFBQ2pCQyxHQUFPLEVBTVgsT0FKSW5oQixFQUFPb2hCLG9CQUFrQyxVQUFaRixHQUFtQyxhQUFaQSxHQUFzQyxXQUFaQSxHQUEwQmxoQixFQUFPcWhCLFlBQ2pIRixHQUFPLEdBR0ZBLENBQ1QsRUF3WEVHLFFBcEJGLFNBQWlCNUIsR0FDZixJQUFJdkIsRUFBUWplLFVBQVVDLE9BQVMsUUFBc0JvRCxJQUFqQnJELFVBQVUsR0FBbUJBLFVBQVUsR0FBSyxNQUNoRkosT0FBT3NCLEtBQUt1YyxHQUFXYyxTQUFRLFNBQVVwZSxHQUN2QyxJQUFJaUQsRUFBT3FhLEVBQVV0ZCxHQUFLa2hCLE1BQUssU0FBVUMsR0FDdkMsT0FBT0EsRUFBS3JELFFBQVVBLEdBQVNxRCxFQUFLOUIsV0FBYUEsQ0FDbkQsSUFFSXBjLEdBQVFBLEVBQUswVyxRQUNmMVcsRUFBSzBXLFFBRVQsR0FDRixFQVVFeUgsT0E3VEYsU0FBZ0JDLEdBRWQsUUFBd0IsSUFBYkEsRUFDVDVoQixPQUFPc0IsS0FBS3VjLEdBQVdjLFNBQVEsU0FBVXBlLEdBQ3ZDLGNBQWNzZCxFQUFVdGQsRUFDMUIsU0FDSyxHQUFJNkgsTUFBTTRCLFFBQVE0WCxHQUV2QkEsRUFBU2pELFNBQVEsU0FBVXZYLEdBQ3JCQSxFQUFLN0csS0FBS2dlLEVBQVduWCxFQUMzQixTQUNLLEdBQXdCLGlCQUFid2EsRUFFWkEsRUFBU3JoQixLQUFLZ2UsRUFBV3FELFFBQ3hCLEdBQXdCLGlCQUFiQSxFQUF1QixDQUN2QyxJQUFLLElBQUlDLEVBQU96aEIsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU15WixFQUFPLEVBQUlBLEVBQU8sRUFBSSxHQUFJdFgsRUFBTyxFQUFHQSxFQUFPc1gsRUFBTXRYLElBQ2xHUixFQUFLUSxFQUFPLEdBQUtuSyxVQUFVbUssR0FLN0IsSUFBSThULEVBQVF0VSxFQUFLLEdBQ2JtUSxFQUFTblEsRUFBSyxHQUVHLG1CQUFWc1UsSUFDVG5FLEVBQVNtRSxFQUNUQSxFQUFRLElBR1ZFLEVBQVcsQ0FDVGhlLElBQUtxaEIsRUFDTHZELE1BQU9BLEVBQ1BuRSxPQUFRQSxFQUNSd0UsU0FBVSxLQUVkLENBQ0YsRUEwUkVvRCxPQUFRbkgsRUFDUkwsU0FBVXlDLEVBQ1ZRLFlBQWFBLEdBR2YsSUFBSyxJQUFJN1csS0FBS21hLEVBQ1I3Z0IsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS21nQixFQUFNbmEsS0FDN0N5WixFQUFRelosR0FBS21hLEVBQUtuYSxJQUl0QixHQUFzQixvQkFBWEksT0FBd0IsQ0FDakMsSUFBSWliLEVBQVdqYixPQUFPcVosUUFFdEJBLEVBQVE2QixXQUFhLFNBQVVDLEdBSzdCLE9BSklBLEdBQVFuYixPQUFPcVosVUFBWUEsSUFDN0JyWixPQUFPcVosUUFBVTRCLEdBR1o1QixDQUNULEVBRUFyWixPQUFPcVosUUFBVUEsQ0FDbkIsZUM1a0JBLFNBQVMrQixJQUNQLE9BQU8vQixFQUFRZSxTQUNqQixDQUVBZixFQUFRL0ssT0FBUyxXQUNmLE9BQU8sQ0FDVCxFQUVBLElBQUkrTSxFQUFZLFNBQW1CM0QsRUFBTTRELEdBQ3ZDLElBQUlsaUIsRUFBU3NlLEVBQUt0ZSxPQUNkbWlCLEVBQWdCbmlCLEdBQVVBLEVBQU9raEIsUUFDckMsT0FBT2xJLFFBQVFtSixHQUFpQkQsR0FBZ0JBLEVBQWF6WSxTQUFTMFksR0FDeEUsRUFFSUMsRUFBa0MsU0FBeUNDLEdBQzdFLE9BQU9KLEVBQVVJLEVBQUksQ0FBQyxRQUFTLFdBQVksVUFDN0MsRUFFQSxTQUFTQyxFQUFXbGhCLEVBQU1LLEVBQVVILEVBQVNpaEIsR0FDdkNqaEIsYUFBbUI0RyxRQUNyQnFhLEVBQU9qaEIsRUFDUEEsT0FBVWlDLEdBR1osSUFBSWlmLEVBQVFsaEIsR0FBVyxDQUFDLEVBQ3BCNGdCLEVBQWVNLEVBQU1OLGFBQ3JCaE4sRUFBU3NOLEVBQU10TixPQUNmb0wsRUFBUWtDLEVBQU1sQyxNQUNkRCxFQUFVbUMsRUFBTW5DLFFBQ2hCb0MsRUFBd0JELEVBQU1FLHFCQUM5QkEsT0FBaUQsSUFBMUJELEdBQTBDQSxFQUNqRUUsRUFBZ0JILEVBQU1JLFFBQ3RCQSxPQUE0QixJQUFsQkQsR0FBa0NBLEVBQzVDRSxFQUF3QkwsRUFBTU0sd0JBQzlCQSxPQUFvRCxJQUExQkQsR0FBMkNBLEVBRXJFbmhCLEdBQU0sSUFBQUMsUUFBTyxNQUVib2hCLEdBQW1CLElBQUEvZSxjQUFZLFNBQVVnZixFQUFlQyxHQUMxRCxJQUFJQyxFQUF1QkMsRUFFM0IsT0FBSWpPLElBQVdBLEVBQU84TixJQUNaTixLQUlOTixFQUFnQ1ksS0FBbUJmLEVBQVVlLEVBQWVkLElBQW1FLE9BQWpEZ0IsRUFBd0JGLEVBQWNoakIsU0FBbUJrakIsRUFBc0I5QixvQkFBc0IwQixPQUluTCxPQUFoQnBoQixFQUFJSyxTQUFvQkUsU0FBU21oQixnQkFBa0IxaEIsRUFBSUssU0FBMkMsT0FBL0JvaEIsRUFBZXpoQixFQUFJSyxVQUFvQm9oQixFQUFhbmhCLFNBQVNDLFNBQVNtaEIsa0JBQzNJM2hCLEVBQVN1aEIsRUFBZUMsSUFDakIsRUFJWCxHQUFHVixFQUFPLENBQUM3Z0IsRUFBS3dnQixFQUFjaE4sR0FBUXpGLE9BQU84UyxHQUFRLENBQUM3Z0IsRUFBS3dnQixFQUFjaE4sSUFpQnpFLE9BaEJBLElBQUF0VCxZQUFVLFdBQ1IsR0FBS2doQixFQVdMLE9BTEl0QyxJQUFxQixJQUFaRCxJQUNYL2UsRUFBUStlLFNBQVUsR0FHcEJKLEVBQVE3ZSxFQUFNRSxHQUFXLENBQUMsRUFBR3loQixHQUN0QixXQUNMLE9BQU85QyxFQUFRd0IsT0FBT3JnQixFQUFNMmhCLEVBQzlCLEVBWkU5QyxFQUFRd0IsT0FBT3JnQixFQUFNMmhCLEVBYXpCLEdBQUcsQ0FBQ0EsRUFBa0IzaEIsRUFBTXdoQixJQUNyQmxoQixDQUNULENBRUEsSUFBSTJoQixFQUFrQnBELEVBQVFlLGdOQ25GOUIsU0FBU3NDLEVBQWlCQyxFQUFXQyxHQUNuQyxPQUFPRCxFQUFVakssUUFBUSxJQUFJMVIsT0FBTyxVQUFZNGIsRUFBZ0IsWUFBYSxLQUFNLE1BQU1sSyxRQUFRLE9BQVEsS0FBS0EsUUFBUSxhQUFjLEdBQ3RJLDJDQ0ZBLFNBQ0VtSyxVQUFVLEdDQVosRUFBZSxrQkFBb0IsTUNENUIsSUFBSUMsRUFBYyxTQUFxQkMsR0FDNUMsT0FBT0EsRUFBS0MsU0FDZCxFQ09XQyxFQUFZLFlBQ1pDLEVBQVMsU0FDVEMsRUFBVyxXQUNYQyxFQUFVLFVBQ1ZDLEVBQVUsVUE2RmpCQyxFQUEwQixTQUFVQyxHQUd0QyxTQUFTRCxFQUFXdlQsRUFBT3lULEdBQ3pCLElBQUlqaEIsRUFFSkEsRUFBUWdoQixFQUFpQjNqQixLQUFLRSxLQUFNaVEsRUFBT3lULElBQVkxakIsS0FDdkQsSUFHSTJqQixFQURBQyxFQUZjRixNQUV1QkcsV0FBYTVULEVBQU1rSyxNQUFRbEssRUFBTTJULE9BdUIxRSxPQXJCQW5oQixFQUFNcWhCLGFBQWUsS0FFakI3VCxFQUFNOFQsR0FDSkgsR0FDRkQsRUFBZ0JQLEVBQ2hCM2dCLEVBQU1xaEIsYUFBZVQsR0FFckJNLEVBQWdCTCxFQUloQkssRUFERTFULEVBQU0rVCxlQUFpQi9ULEVBQU1nVSxhQUNmZCxFQUVBQyxFQUlwQjNnQixFQUFNNkQsTUFBUSxDQUNaNGQsT0FBUVAsR0FFVmxoQixFQUFNMGhCLGFBQWUsS0FDZDFoQixDQUNULEVBaENBLE9BQWUrZ0IsRUFBWUMsR0FrQzNCRCxFQUFXWSx5QkFBMkIsU0FBa0N4RyxFQUFNeUcsR0FHNUUsT0FGYXpHLEVBQUttRyxJQUVKTSxFQUFVSCxTQUFXZixFQUMxQixDQUNMZSxPQUFRZCxHQUlMLElBQ1QsRUFrQkEsSUFBSWtCLEVBQVNkLEVBQVc1akIsVUFrUHhCLE9BaFBBMGtCLEVBQU9DLGtCQUFvQixXQUN6QnZrQixLQUFLd2tCLGNBQWEsRUFBTXhrQixLQUFLOGpCLGFBQy9CLEVBRUFRLEVBQU9HLG1CQUFxQixTQUE0QkMsR0FDdEQsSUFBSUMsRUFBYSxLQUVqQixHQUFJRCxJQUFjMWtCLEtBQUtpUSxNQUFPLENBQzVCLElBQUlpVSxFQUFTbGtCLEtBQUtzRyxNQUFNNGQsT0FFcEJsa0IsS0FBS2lRLE1BQU04VCxHQUNURyxJQUFXYixHQUFZYSxJQUFXWixJQUNwQ3FCLEVBQWF0QixHQUdYYSxJQUFXYixHQUFZYSxJQUFXWixJQUNwQ3FCLEVBQWFwQixFQUduQixDQUVBdmpCLEtBQUt3a0IsY0FBYSxFQUFPRyxFQUMzQixFQUVBTCxFQUFPTSxxQkFBdUIsV0FDNUI1a0IsS0FBSzZrQixvQkFDUCxFQUVBUCxFQUFPUSxZQUFjLFdBQ25CLElBQ0lDLEVBQU01SyxFQUFPeUosRUFEYnBXLEVBQVV4TixLQUFLaVEsTUFBTXpDLFFBV3pCLE9BVEF1WCxFQUFPNUssRUFBUXlKLEVBQVNwVyxFQUVULE1BQVhBLEdBQXNDLGlCQUFaQSxJQUM1QnVYLEVBQU92WCxFQUFRdVgsS0FDZjVLLEVBQVEzTSxFQUFRMk0sTUFFaEJ5SixPQUE0Qi9nQixJQUFuQjJLLEVBQVFvVyxPQUF1QnBXLEVBQVFvVyxPQUFTekosR0FHcEQsQ0FDTDRLLEtBQU1BLEVBQ041SyxNQUFPQSxFQUNQeUosT0FBUUEsRUFFWixFQUVBVSxFQUFPRSxhQUFlLFNBQXNCUSxFQUFVTCxHQUtwRCxRQUppQixJQUFiSyxJQUNGQSxHQUFXLEdBR00sT0FBZkwsRUFJRixHQUZBM2tCLEtBQUs2a0IscUJBRURGLElBQWV0QixFQUFVLENBQzNCLEdBQUlyakIsS0FBS2lRLE1BQU0rVCxlQUFpQmhrQixLQUFLaVEsTUFBTWdVLGFBQWMsQ0FDdkQsSUFBSWhCLEVBQU9qakIsS0FBS2lRLE1BQU1nVixRQUFVamxCLEtBQUtpUSxNQUFNZ1YsUUFBUTVqQixRQUFVLGdCQUFxQnJCLE1BSTlFaWpCLEdBQU1ELEVBQVlDLEVBQ3hCLENBRUFqakIsS0FBS2tsQixhQUFhRixFQUNwQixNQUNFaGxCLEtBQUttbEIsbUJBRUVubEIsS0FBS2lRLE1BQU0rVCxlQUFpQmhrQixLQUFLc0csTUFBTTRkLFNBQVdkLEdBQzNEcGpCLEtBQUtvbEIsU0FBUyxDQUNabEIsT0FBUWYsR0FHZCxFQUVBbUIsRUFBT1ksYUFBZSxTQUFzQkYsR0FDMUMsSUFBSUssRUFBU3JsQixLQUVUbWEsRUFBUW5hLEtBQUtpUSxNQUFNa0ssTUFDbkJtTCxFQUFZdGxCLEtBQUswakIsUUFBVTFqQixLQUFLMGpCLFFBQVFHLFdBQWFtQixFQUVyRGxELEVBQVE5aEIsS0FBS2lRLE1BQU1nVixRQUFVLENBQUNLLEdBQWEsQ0FBQyxnQkFBcUJ0bEIsTUFBT3NsQixHQUN4RUMsRUFBWXpELEVBQU0sR0FDbEIwRCxFQUFpQjFELEVBQU0sR0FFdkIyRCxFQUFXemxCLEtBQUs4a0IsY0FDaEJZLEVBQWVKLEVBQVlHLEVBQVM3QixPQUFTNkIsRUFBU3RMLE9BR3JENkssSUFBYTdLLEdBQVNoTixFQUFPNFYsU0FDaEMvaUIsS0FBSzJsQixhQUFhLENBQ2hCekIsT0FBUVosSUFDUCxXQUNEK0IsRUFBT3BWLE1BQU0yVixVQUFVTCxFQUN6QixLQUlGdmxCLEtBQUtpUSxNQUFNNFYsUUFBUU4sRUFBV0MsR0FDOUJ4bEIsS0FBSzJsQixhQUFhLENBQ2hCekIsT0FBUWIsSUFDUCxXQUNEZ0MsRUFBT3BWLE1BQU02VixXQUFXUCxFQUFXQyxHQUVuQ0gsRUFBT1UsZ0JBQWdCTCxHQUFjLFdBQ25DTCxFQUFPTSxhQUFhLENBQ2xCekIsT0FBUVosSUFDUCxXQUNEK0IsRUFBT3BWLE1BQU0yVixVQUFVTCxFQUFXQyxFQUNwQyxHQUNGLEdBQ0YsSUFDRixFQUVBbEIsRUFBT2EsWUFBYyxXQUNuQixJQUFJYSxFQUFTaG1CLEtBRVQra0IsRUFBTy9rQixLQUFLaVEsTUFBTThVLEtBQ2xCVSxFQUFXemxCLEtBQUs4a0IsY0FDaEJTLEVBQVl2bEIsS0FBS2lRLE1BQU1nVixhQUFVcGlCLEVBQVksZ0JBQXFCN0MsTUFFakUra0IsSUFBUTVYLEVBQU80VixVQVNwQi9pQixLQUFLaVEsTUFBTWdXLE9BQU9WLEdBQ2xCdmxCLEtBQUsybEIsYUFBYSxDQUNoQnpCLE9BQVFYLElBQ1AsV0FDRHlDLEVBQU8vVixNQUFNaVcsVUFBVVgsR0FFdkJTLEVBQU9ELGdCQUFnQk4sRUFBU1YsTUFBTSxXQUNwQ2lCLEVBQU9MLGFBQWEsQ0FDbEJ6QixPQUFRZCxJQUNQLFdBQ0Q0QyxFQUFPL1YsTUFBTWtXLFNBQVNaLEVBQ3hCLEdBQ0YsR0FDRixLQXJCRXZsQixLQUFLMmxCLGFBQWEsQ0FDaEJ6QixPQUFRZCxJQUNQLFdBQ0Q0QyxFQUFPL1YsTUFBTWtXLFNBQVNaLEVBQ3hCLEdBa0JKLEVBRUFqQixFQUFPTyxtQkFBcUIsV0FDQSxPQUF0QjdrQixLQUFLbWtCLGVBQ1Bua0IsS0FBS21rQixhQUFhaUMsU0FDbEJwbUIsS0FBS21rQixhQUFlLEtBRXhCLEVBRUFHLEVBQU9xQixhQUFlLFNBQXNCVSxFQUFXdGxCLEdBSXJEQSxFQUFXZixLQUFLc21CLGdCQUFnQnZsQixHQUNoQ2YsS0FBS29sQixTQUFTaUIsRUFBV3RsQixFQUMzQixFQUVBdWpCLEVBQU9nQyxnQkFBa0IsU0FBeUJ2bEIsR0FDaEQsSUFBSXdsQixFQUFTdm1CLEtBRVR3bUIsR0FBUyxFQWNiLE9BWkF4bUIsS0FBS21rQixhQUFlLFNBQVUvaUIsR0FDeEJvbEIsSUFDRkEsR0FBUyxFQUNURCxFQUFPcEMsYUFBZSxLQUN0QnBqQixFQUFTSyxHQUViLEVBRUFwQixLQUFLbWtCLGFBQWFpQyxPQUFTLFdBQ3pCSSxHQUFTLENBQ1gsRUFFT3htQixLQUFLbWtCLFlBQ2QsRUFFQUcsRUFBT3lCLGdCQUFrQixTQUF5QnZZLEVBQVNxUixHQUN6RDdlLEtBQUtzbUIsZ0JBQWdCekgsR0FDckIsSUFBSW9FLEVBQU9qakIsS0FBS2lRLE1BQU1nVixRQUFVamxCLEtBQUtpUSxNQUFNZ1YsUUFBUTVqQixRQUFVLGdCQUFxQnJCLE1BQzlFeW1CLEVBQTBDLE1BQVhqWixJQUFvQnhOLEtBQUtpUSxNQUFNeVcsZUFFbEUsR0FBS3pELElBQVF3RCxFQUFiLENBS0EsR0FBSXptQixLQUFLaVEsTUFBTXlXLGVBQWdCLENBQzdCLElBQUlDLEVBQVEzbUIsS0FBS2lRLE1BQU1nVixRQUFVLENBQUNqbEIsS0FBS21rQixjQUFnQixDQUFDbEIsRUFBTWpqQixLQUFLbWtCLGNBQy9Eb0IsRUFBWW9CLEVBQU0sR0FDbEJDLEVBQW9CRCxFQUFNLEdBRTlCM21CLEtBQUtpUSxNQUFNeVcsZUFBZW5CLEVBQVdxQixFQUN2QyxDQUVlLE1BQVhwWixHQUNGZixXQUFXek0sS0FBS21rQixhQUFjM1csRUFYaEMsTUFGRWYsV0FBV3pNLEtBQUtta0IsYUFBYyxFQWVsQyxFQUVBRyxFQUFPdUMsT0FBUyxXQUNkLElBQUkzQyxFQUFTbGtCLEtBQUtzRyxNQUFNNGQsT0FFeEIsR0FBSUEsSUFBV2YsRUFDYixPQUFPLEtBR1QsSUFBSTJELEVBQWM5bUIsS0FBS2lRLE1BQ25CcUMsRUFBV3dVLEVBQVl4VSxTQWdCdkJRLEdBZk1nVSxFQUFZL0MsR0FDRitDLEVBQVk3QyxhQUNYNkMsRUFBWTlDLGNBQ25COEMsRUFBWWxELE9BQ2JrRCxFQUFZM00sTUFDYjJNLEVBQVkvQixLQUNUK0IsRUFBWXRaLFFBQ0xzWixFQUFZSixlQUNuQkksRUFBWWpCLFFBQ1RpQixFQUFZaEIsV0FDYmdCLEVBQVlsQixVQUNma0IsRUFBWWIsT0FDVGEsRUFBWVosVUFDYlksRUFBWVgsU0FDYlcsRUFBWTdCLFNBQ1YsT0FBOEI2QixFQUFhLENBQUMsV0FBWSxLQUFNLGVBQWdCLGdCQUFpQixTQUFVLFFBQVMsT0FBUSxVQUFXLGlCQUFrQixVQUFXLGFBQWMsWUFBYSxTQUFVLFlBQWEsV0FBWSxhQUVqUCxPQUdFLGtCQUFvQkMsRUFBdUJsVyxTQUFVLENBQ25Edk8sTUFBTyxNQUNjLG1CQUFiZ1EsRUFBMEJBLEVBQVM0UixFQUFRcFIsR0FBYyxpQkFBbUIsa0JBQW9CUixHQUFXUSxHQUV6SCxFQUVPMFEsQ0FDVCxDQWxUOEIsQ0FrVDVCLGVBK0xGLFNBQVNoZSxJQUFRLENBN0xqQmdlLEVBQVd3RCxZQUFjRCxFQUN6QnZELEVBQVd5RCxVQTBMUCxDQUFDLEVBSUx6RCxFQUFXMEQsYUFBZSxDQUN4Qm5ELElBQUksRUFDSkUsY0FBYyxFQUNkRCxlQUFlLEVBQ2ZKLFFBQVEsRUFDUnpKLE9BQU8sRUFDUDRLLE1BQU0sRUFDTmMsUUFBU3JnQixFQUNUc2dCLFdBQVl0Z0IsRUFDWm9nQixVQUFXcGdCLEVBQ1h5Z0IsT0FBUXpnQixFQUNSMGdCLFVBQVcxZ0IsRUFDWDJnQixTQUFVM2dCLEdBRVpnZSxFQUFXTCxVQUFZQSxFQUN2QkssRUFBV0osT0FBU0EsRUFDcEJJLEVBQVdILFNBQVdBLEVBQ3RCRyxFQUFXRixRQUFVQSxFQUNyQkUsRUFBV0QsUUFBVUEsRUFDckIsVUNybUJBLElBTUk0RCxFQUFjLFNBQXFCbEUsRUFBTW1FLEdBQzNDLE9BQU9uRSxHQUFRbUUsR0FBV0EsRUFBUXZOLE1BQU0sS0FBS2tFLFNBQVEsU0FBVXNKLEdBQzdELE9MUnlDMVEsRUtRYjBRLFFMUkl2SSxFS1FWbUUsR0xQWnFFLFVBQ1Z4SSxFQUFRd0ksVUFBVUMsT0FBTzVRLEdBQ2EsaUJBQXRCbUksRUFBUW5JLFVBQ3hCbUksRUFBUW5JLFVBQVlpTSxFQUFpQjlELEVBQVFuSSxVQUFXQSxHQUV4RG1JLEVBQVEwSSxhQUFhLFFBQVM1RSxFQUFpQjlELEVBQVFuSSxXQUFhbUksRUFBUW5JLFVBQVU4USxTQUFXLEdBQUk5USxLQU4xRixJQUFxQm1JLEVBQVNuSSxDS1MzQyxHQUNGLEVBd0VJK1EsRUFBNkIsU0FBVWpFLEdBR3pDLFNBQVNpRSxJQUdQLElBRkEsSUFBSWpsQixFQUVLd2UsRUFBT3poQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTXlaLEdBQU90WCxFQUFPLEVBQUdBLEVBQU9zWCxFQUFNdFgsSUFDL0VSLEVBQUtRLEdBQVFuSyxVQUFVbUssR0FnSHpCLE9BN0dBbEgsRUFBUWdoQixFQUFpQjNqQixLQUFLQyxNQUFNMGpCLEVBQWtCLENBQUN6akIsTUFBTStPLE9BQU81RixLQUFVbkosTUFDeEUybkIsZUFBaUIsQ0FDckIvRCxPQUFRLENBQUMsRUFDVHpKLE1BQU8sQ0FBQyxFQUNSNEssS0FBTSxDQUFDLEdBR1R0aUIsRUFBTW9qQixRQUFVLFNBQVVOLEVBQVdDLEdBQ25DLElBQUlvQyxFQUF3Qm5sQixFQUFNb2xCLGlCQUFpQnRDLEVBQVdDLEdBQzFEdkMsRUFBTzJFLEVBQXNCLEdBQzdCdEMsRUFBWXNDLEVBQXNCLEdBRXRDbmxCLEVBQU1xbEIsY0FBYzdFLEVBQU0sUUFFMUJ4Z0IsRUFBTXNsQixTQUFTOUUsRUFBTXFDLEVBQVksU0FBVyxRQUFTLFFBRWpEN2lCLEVBQU13TixNQUFNNFYsU0FDZHBqQixFQUFNd04sTUFBTTRWLFFBQVFOLEVBQVdDLEVBRW5DLEVBRUEvaUIsRUFBTXFqQixXQUFhLFNBQVVQLEVBQVdDLEdBQ3RDLElBQUl3QyxFQUF5QnZsQixFQUFNb2xCLGlCQUFpQnRDLEVBQVdDLEdBQzNEdkMsRUFBTytFLEVBQXVCLEdBRzlCbGhCLEVBRllraEIsRUFBdUIsR0FFaEIsU0FBVyxRQUVsQ3ZsQixFQUFNc2xCLFNBQVM5RSxFQUFNbmMsRUFBTSxVQUV2QnJFLEVBQU13TixNQUFNNlYsWUFDZHJqQixFQUFNd04sTUFBTTZWLFdBQVdQLEVBQVdDLEVBRXRDLEVBRUEvaUIsRUFBTW1qQixVQUFZLFNBQVVMLEVBQVdDLEdBQ3JDLElBQUl5QyxFQUF5QnhsQixFQUFNb2xCLGlCQUFpQnRDLEVBQVdDLEdBQzNEdkMsRUFBT2dGLEVBQXVCLEdBRzlCbmhCLEVBRlltaEIsRUFBdUIsR0FFaEIsU0FBVyxRQUVsQ3hsQixFQUFNcWxCLGNBQWM3RSxFQUFNbmMsR0FFMUJyRSxFQUFNc2xCLFNBQVM5RSxFQUFNbmMsRUFBTSxRQUV2QnJFLEVBQU13TixNQUFNMlYsV0FDZG5qQixFQUFNd04sTUFBTTJWLFVBQVVMLEVBQVdDLEVBRXJDLEVBRUEvaUIsRUFBTXdqQixPQUFTLFNBQVVWLEdBQ3ZCLElBQ0l0QyxFQUR5QnhnQixFQUFNb2xCLGlCQUFpQnRDLEdBQ2xCLEdBRWxDOWlCLEVBQU1xbEIsY0FBYzdFLEVBQU0sVUFFMUJ4Z0IsRUFBTXFsQixjQUFjN0UsRUFBTSxTQUUxQnhnQixFQUFNc2xCLFNBQVM5RSxFQUFNLE9BQVEsUUFFekJ4Z0IsRUFBTXdOLE1BQU1nVyxRQUNkeGpCLEVBQU13TixNQUFNZ1csT0FBT1YsRUFFdkIsRUFFQTlpQixFQUFNeWpCLFVBQVksU0FBVVgsR0FDMUIsSUFDSXRDLEVBRHlCeGdCLEVBQU1vbEIsaUJBQWlCdEMsR0FDbEIsR0FFbEM5aUIsRUFBTXNsQixTQUFTOUUsRUFBTSxPQUFRLFVBRXpCeGdCLEVBQU13TixNQUFNaVcsV0FDZHpqQixFQUFNd04sTUFBTWlXLFVBQVVYLEVBRTFCLEVBRUE5aUIsRUFBTTBqQixTQUFXLFNBQVVaLEdBQ3pCLElBQ0l0QyxFQUR5QnhnQixFQUFNb2xCLGlCQUFpQnRDLEdBQ2xCLEdBRWxDOWlCLEVBQU1xbEIsY0FBYzdFLEVBQU0sUUFFMUJ4Z0IsRUFBTXNsQixTQUFTOUUsRUFBTSxPQUFRLFFBRXpCeGdCLEVBQU13TixNQUFNa1csVUFDZDFqQixFQUFNd04sTUFBTWtXLFNBQVNaLEVBRXpCLEVBRUE5aUIsRUFBTW9sQixpQkFBbUIsU0FBVXRDLEVBQVdDLEdBQzVDLE9BQU8vaUIsRUFBTXdOLE1BQU1nVixRQUFVLENBQUN4aUIsRUFBTXdOLE1BQU1nVixRQUFRNWpCLFFBQVNra0IsR0FDekQsQ0FBQ0EsRUFBV0MsRUFDaEIsRUFFQS9pQixFQUFNeWxCLGNBQWdCLFNBQVVwaEIsR0FDOUIsSUFBSXFoQixFQUFhMWxCLEVBQU13TixNQUFNa1ksV0FDekJDLEVBQTJDLGlCQUFmRCxFQUU1QkUsRUFBZ0JELEdBRFBBLEdBQXNCRCxFQUFhQSxFQUFhLElBQU0sSUFDWnJoQixFQUFPcWhCLEVBQVdyaEIsR0FHekUsTUFBTyxDQUNMdWhCLGNBQWVBLEVBQ2ZDLGdCQUpvQkYsRUFBcUJDLEVBQWdCLFVBQVlGLEVBQVdyaEIsRUFBTyxVQUt2RnloQixjQUprQkgsRUFBcUJDLEVBQWdCLFFBQVVGLEVBQVdyaEIsRUFBTyxRQU12RixFQUVPckUsQ0FDVCxFQXZIQSxPQUFlaWxCLEVBQWVqRSxHQXlIOUIsSUFBSWEsRUFBU29ELEVBQWM5bkIsVUE0RDNCLE9BMURBMGtCLEVBQU95RCxTQUFXLFNBQWtCOUUsRUFBTW5jLEVBQU0waEIsR0FDOUMsSUFBSTdSLEVBQVkzVyxLQUFLa29CLGNBQWNwaEIsR0FBTTBoQixFQUFRLGFBRzdDRCxFQURzQnZvQixLQUFLa29CLGNBQWMsU0FDTEssY0FFM0IsV0FBVHpoQixHQUErQixTQUFWMGhCLEdBQW9CRCxJQUMzQzVSLEdBQWEsSUFBTTRSLEdBS1AsV0FBVkMsR0FDRXZGLEdBQU1ELEVBQVlDLEdBR3BCdE0sSUFDRjNXLEtBQUsybkIsZUFBZTdnQixHQUFNMGhCLEdBQVM3UixFQS9OekIsU0FBa0JzTSxFQUFNbUUsR0FDL0JuRSxHQUFRbUUsR0FBV0EsRUFBUXZOLE1BQU0sS0FBS2tFLFNBQVEsU0FBVXNKLEdBQzdELE9DTHNDMVEsRURLYjBRLFFDTEl2SSxFREtWbUUsR0NKVHFFLFVBQVd4SSxFQUFRd0ksVUFBVW1CLElBQUk5UixHQ0hoQyxTQUFrQm1JLEVBQVNuSSxHQUN4QyxPQUFJbUksRUFBUXdJLFlBQW9CM1EsR0FBYW1JLEVBQVF3SSxVQUFVaG1CLFNBQVNxVixJQUNrQyxLQUFsRyxLQUFPbUksRUFBUW5JLFVBQVU4USxTQUFXM0ksRUFBUW5JLFdBQWEsS0FBS2hXLFFBQVEsSUFBTWdXLEVBQVksSUFDbEcsQ0RBb0UrUixDQUFTNUosRUFBU25JLEtBQTZDLGlCQUF0Qm1JLEVBQVFuSSxVQUF3Qm1JLEVBQVFuSSxVQUFZbUksRUFBUW5JLFVBQVksSUFBTUEsRUFBZW1JLEVBQVEwSSxhQUFhLFNBQVUxSSxFQUFRbkksV0FBYW1JLEVBQVFuSSxVQUFVOFEsU0FBVyxJQUFNLElBQU05USxLQUR4UixJQUFrQm1JLEVBQVNuSSxDRE14QyxHQUNGLENBNk5NZ1MsQ0FBVTFGLEVBQU10TSxHQUVwQixFQUVBMk4sRUFBT3dELGNBQWdCLFNBQXVCN0UsRUFBTW5jLEdBQ2xELElBQUk4aEIsRUFBd0I1b0IsS0FBSzJuQixlQUFlN2dCLEdBQzVDdWhCLEVBQWdCTyxFQUFzQkMsS0FDdENQLEVBQWtCTSxFQUFzQnBDLE9BQ3hDK0IsRUFBZ0JLLEVBQXNCeG1CLEtBQzFDcEMsS0FBSzJuQixlQUFlN2dCLEdBQVEsQ0FBQyxFQUV6QnVoQixHQUNGbEIsRUFBWWxFLEVBQU1vRixHQUdoQkMsR0FDRm5CLEVBQVlsRSxFQUFNcUYsR0FHaEJDLEdBQ0ZwQixFQUFZbEUsRUFBTXNGLEVBRXRCLEVBRUFqRSxFQUFPdUMsT0FBUyxXQUNkLElBQUlDLEVBQWM5bUIsS0FBS2lRLE1BRW5CQSxHQURJNlcsRUFBWXFCLFlBQ1IsT0FBOEJyQixFQUFhLENBQUMsZ0JBRXhELE9BQW9CLGtCQUFvQixHQUFZLE9BQVMsQ0FBQyxFQUFHN1csRUFBTyxDQUN0RTRWLFFBQVM3bEIsS0FBSzZsQixRQUNkRCxVQUFXNWxCLEtBQUs0bEIsVUFDaEJFLFdBQVk5bEIsS0FBSzhsQixXQUNqQkcsT0FBUWptQixLQUFLaW1CLE9BQ2JDLFVBQVdsbUIsS0FBS2ttQixVQUNoQkMsU0FBVW5tQixLQUFLbW1CLFdBRW5CLEVBRU91QixDQUNULENBdkxpQyxDQXVML0IsZUFFRkEsRUFBY1IsYUFBZSxDQUMzQmlCLFdBQVksSUFFZFQsRUFBY1QsVUFpSVQsQ0FBQyxFQUNOLHdCR25aTyxTQUFTNkIsRUFBZ0J4VyxFQUFVeVcsR0FDeEMsSUFJSTdsQixFQUFTOUQsT0FBT2dCLE9BQU8sTUFPM0IsT0FOSWtTLEdBQVUsRUFBQUYsU0FBQSxJQUFhRSxHQUFVLFNBQVUrVSxHQUM3QyxPQUFPQSxDQUNULElBQUd0SixTQUFRLFNBQVU3TCxHQUVuQmhQLEVBQU9nUCxFQUFNdlMsS0FURixTQUFnQnVTLEdBQzNCLE9BQU82VyxJQUFTLElBQUFDLGdCQUFlOVcsR0FBUzZXLEVBQU03VyxHQUFTQSxDQUN6RCxDQU9zQitXLENBQU8vVyxFQUM3QixJQUNPaFAsQ0FDVCxDQWlFQSxTQUFTZ21CLEVBQVFoWCxFQUFPaVgsRUFBTWxaLEdBQzVCLE9BQXNCLE1BQWZBLEVBQU1rWixHQUFnQmxaLEVBQU1rWixHQUFRalgsRUFBTWpDLE1BQU1rWixFQUN6RCxDQWFPLFNBQVNDLEVBQW9CQyxFQUFXQyxFQUFrQm5ELEdBQy9ELElBQUlvRCxFQUFtQlQsRUFBZ0JPLEVBQVUvVyxVQUM3Q0EsRUEvREMsU0FBNEI3TCxFQUFNdEUsR0FJdkMsU0FBU3FuQixFQUFlN3BCLEdBQ3RCLE9BQU9BLEtBQU93QyxFQUFPQSxFQUFLeEMsR0FBTzhHLEVBQUs5RyxFQUN4QyxDQUxBOEcsRUFBT0EsR0FBUSxDQUFDLEVBQ2hCdEUsRUFBT0EsR0FBUSxDQUFDLEVBUWhCLElBY0k1QyxFQWRBa3FCLEVBQWtCcnFCLE9BQU9nQixPQUFPLE1BQ2hDc3BCLEVBQWMsR0FFbEIsSUFBSyxJQUFJQyxLQUFXbGpCLEVBQ2RrakIsS0FBV3huQixFQUNUdW5CLEVBQVlqcUIsU0FDZGdxQixFQUFnQkUsR0FBV0QsRUFDM0JBLEVBQWMsSUFHaEJBLEVBQVlybkIsS0FBS3NuQixHQUtyQixJQUFJQyxFQUFlLENBQUMsRUFFcEIsSUFBSyxJQUFJQyxLQUFXMW5CLEVBQU0sQ0FDeEIsR0FBSXNuQixFQUFnQkksR0FDbEIsSUFBS3RxQixFQUFJLEVBQUdBLEVBQUlrcUIsRUFBZ0JJLEdBQVNwcUIsT0FBUUYsSUFBSyxDQUNwRCxJQUFJdXFCLEVBQWlCTCxFQUFnQkksR0FBU3RxQixHQUM5Q3FxQixFQUFhSCxFQUFnQkksR0FBU3RxQixJQUFNaXFCLEVBQWVNLEVBQzdELENBR0ZGLEVBQWFDLEdBQVdMLEVBQWVLLEVBQ3pDLENBR0EsSUFBS3RxQixFQUFJLEVBQUdBLEVBQUltcUIsRUFBWWpxQixPQUFRRixJQUNsQ3FxQixFQUFhRixFQUFZbnFCLElBQU1pcUIsRUFBZUUsRUFBWW5xQixJQUc1RCxPQUFPcXFCLENBQ1QsQ0FtQmlCRyxDQUFtQlQsRUFBa0JDLEdBbUNwRCxPQWxDQW5xQixPQUFPc0IsS0FBSzRSLEdBQVV5TCxTQUFRLFNBQVVwZSxHQUN0QyxJQUFJdVMsRUFBUUksRUFBUzNTLEdBQ3JCLElBQUssSUFBQXFwQixnQkFBZTlXLEdBQXBCLENBQ0EsSUFBSThYLEVBQVdycUIsS0FBTzJwQixFQUNsQlcsRUFBV3RxQixLQUFPNHBCLEVBQ2xCVyxFQUFZWixFQUFpQjNwQixHQUM3QndxQixHQUFZLElBQUFuQixnQkFBZWtCLEtBQWVBLEVBQVVqYSxNQUFNOFQsSUFFMURrRyxHQUFhRCxJQUFXRyxFQVFoQkYsSUFBV0QsR0FBWUcsRUFNeEJGLEdBQVdELElBQVcsSUFBQWhCLGdCQUFla0IsS0FJOUM1WCxFQUFTM1MsSUFBTyxJQUFBbVcsY0FBYTVELEVBQU8sQ0FDbENpVSxTQUFVQSxFQUFTdGUsS0FBSyxLQUFNcUssR0FDOUI2UixHQUFJbUcsRUFBVWphLE1BQU04VCxHQUNwQmdCLEtBQU1tRSxFQUFRaFgsRUFBTyxPQUFRbVgsR0FDN0JsUCxNQUFPK08sRUFBUWhYLEVBQU8sUUFBU21YLE1BWGpDL1csRUFBUzNTLElBQU8sSUFBQW1XLGNBQWE1RCxFQUFPLENBQ2xDNlIsSUFBSSxJQVZOelIsRUFBUzNTLElBQU8sSUFBQW1XLGNBQWE1RCxFQUFPLENBQ2xDaVUsU0FBVUEsRUFBU3RlLEtBQUssS0FBTXFLLEdBQzlCNlIsSUFBSSxFQUNKZ0IsS0FBTW1FLEVBQVFoWCxFQUFPLE9BQVFtWCxHQUM3QmxQLE1BQU8rTyxFQUFRaFgsRUFBTyxRQUFTbVgsSUFaRCxDQStCcEMsSUFDTy9XLENBQ1QsQ0NsSUEsSUFBSThYLEVBQVNockIsT0FBT2dyQixRQUFVLFNBQVVyWixHQUN0QyxPQUFPM1IsT0FBT3NCLEtBQUtxUSxHQUFLcEcsS0FBSSxTQUFVdUcsR0FDcEMsT0FBT0gsRUFBSUcsRUFDYixHQUNGLEVBdUJJbVosRUFBK0IsU0FBVTVHLEdBRzNDLFNBQVM0RyxFQUFnQnBhLEVBQU95VCxHQUM5QixJQUFJamhCLEVBSUE2bkIsR0FGSjduQixFQUFRZ2hCLEVBQWlCM2pCLEtBQUtFLEtBQU1pUSxFQUFPeVQsSUFBWTFqQixNQUU5QnNxQixhQUFhemlCLE1BQUssT0FBdUJwRixJQVVsRSxPQVBBQSxFQUFNNkQsTUFBUSxDQUNaaWtCLGFBQWMsQ0FDWjFHLFlBQVksR0FFZHlHLGFBQWNBLEVBQ2RFLGFBQWEsR0FFUi9uQixDQUNULEVBbEJBLE9BQWU0bkIsRUFBaUI1RyxHQW9CaEMsSUFBSWEsRUFBUytGLEVBQWdCenFCLFVBcUU3QixPQW5FQTBrQixFQUFPQyxrQkFBb0IsV0FDekJ2a0IsS0FBS3lxQixTQUFVLEVBQ2Z6cUIsS0FBS29sQixTQUFTLENBQ1ptRixhQUFjLENBQ1oxRyxZQUFZLElBR2xCLEVBRUFTLEVBQU9NLHFCQUF1QixXQUM1QjVrQixLQUFLeXFCLFNBQVUsQ0FDakIsRUFFQUosRUFBZ0JqRyx5QkFBMkIsU0FBa0NpRixFQUFXekwsR0FDdEYsSURpQm1DM04sRUFBT2tXLEVDakJ0Q21ELEVBQW1CMUwsRUFBS3RMLFNBQ3hCZ1ksRUFBZTFNLEVBQUswTSxhQUV4QixNQUFPLENBQ0xoWSxTQUZnQnNMLEVBQUs0TSxhRGVZdmEsRUNiY29aLEVEYVBsRCxFQ2JrQm1FLEVEY3ZEeEIsRUFBZ0I3WSxFQUFNcUMsVUFBVSxTQUFVSixHQUMvQyxPQUFPLElBQUE0RCxjQUFhNUQsRUFBTyxDQUN6QmlVLFNBQVVBLEVBQVN0ZSxLQUFLLEtBQU1xSyxHQUM5QjZSLElBQUksRUFDSkgsT0FBUXNGLEVBQVFoWCxFQUFPLFNBQVVqQyxHQUNqQ2tLLE1BQU8rTyxFQUFRaFgsRUFBTyxRQUFTakMsR0FDL0I4VSxLQUFNbUUsRUFBUWhYLEVBQU8sT0FBUWpDLElBRWpDLEtDdEI4RW1aLEVBQW9CQyxFQUFXQyxFQUFrQmdCLEdBQzNIRSxhQUFhLEVBRWpCLEVBR0FsRyxFQUFPZ0csYUFBZSxTQUFzQnBZLEVBQU8rUSxHQUNqRCxJQUFJeUgsRUFBc0I1QixFQUFnQjlvQixLQUFLaVEsTUFBTXFDLFVBQ2pESixFQUFNdlMsT0FBTytxQixJQUVieFksRUFBTWpDLE1BQU1rVyxVQUNkalUsRUFBTWpDLE1BQU1rVyxTQUFTbEQsR0FHbkJqakIsS0FBS3lxQixTQUNQenFCLEtBQUtvbEIsVUFBUyxTQUFVOWUsR0FDdEIsSUFBSWdNLEdBQVcsT0FBUyxDQUFDLEVBQUdoTSxFQUFNZ00sVUFHbEMsY0FET0EsRUFBU0osRUFBTXZTLEtBQ2YsQ0FDTDJTLFNBQVVBLEVBRWQsSUFFSixFQUVBZ1MsRUFBT3VDLE9BQVMsV0FDZCxJQUFJQyxFQUFjOW1CLEtBQUtpUSxNQUNuQjBhLEVBQVk3RCxFQUFZOEQsVUFDeEJDLEVBQWUvRCxFQUFZK0QsYUFDM0I1YSxHQUFRLE9BQThCNlcsRUFBYSxDQUFDLFlBQWEsaUJBRWpFeUQsRUFBZXZxQixLQUFLc0csTUFBTWlrQixhQUMxQmpZLEVBQVc4WCxFQUFPcHFCLEtBQUtzRyxNQUFNZ00sVUFBVTNILElBQUlrZ0IsR0FLL0MsY0FKTzVhLEVBQU0yVCxjQUNOM1QsRUFBTWtLLGFBQ05sSyxFQUFNOFUsS0FFSyxPQUFkNEYsRUFDa0Isa0JBQW9CNUQsRUFBdUJsVyxTQUFVLENBQ3ZFdk8sTUFBT2lvQixHQUNOalksR0FHZSxrQkFBb0J5VSxFQUF1QmxXLFNBQVUsQ0FDdkV2TyxNQUFPaW9CLEdBQ08sa0JBQW9CSSxFQUFXMWEsRUFBT3FDLEdBQ3hELEVBRU8rWCxDQUNULENBM0ZtQyxDQTJGakMsZUFFRkEsRUFBZ0JwRCxVQXlEWixDQUFDLEVBQ0xvRCxFQUFnQm5ELGFBNUtHLENBQ2pCMEQsVUFBVyxNQUNYQyxhQUFjLFNBQXNCM1ksR0FDbEMsT0FBT0EsQ0FDVCxHQXlLRixVQzFLQSxJQUFJNFksRUFBaUMsU0FBVXJILEdBRzdDLFNBQVNxSCxJQUdQLElBRkEsSUFBSXJvQixFQUVLd2UsRUFBT3poQixVQUFVQyxPQUFRc3JCLEVBQVEsSUFBSXZqQixNQUFNeVosR0FBT3RYLEVBQU8sRUFBR0EsRUFBT3NYLEVBQU10WCxJQUNoRm9oQixFQUFNcGhCLEdBQVFuSyxVQUFVbUssR0FxRDFCLE9BbERBbEgsRUFBUWdoQixFQUFpQjNqQixLQUFLQyxNQUFNMGpCLEVBQWtCLENBQUN6akIsTUFBTStPLE9BQU9nYyxLQUFXL3FCLE1BRXpFZ3JCLFlBQWMsV0FDbEIsSUFBSyxJQUFJQyxFQUFRenJCLFVBQVVDLE9BQVEwSixFQUFPLElBQUkzQixNQUFNeWpCLEdBQVFDLEVBQVEsRUFBR0EsRUFBUUQsRUFBT0MsSUFDcEYvaEIsRUFBSytoQixHQUFTMXJCLFVBQVUwckIsR0FHMUIsT0FBT3pvQixFQUFNMG9CLGdCQUFnQixVQUFXLEVBQUdoaUIsRUFDN0MsRUFFQTFHLEVBQU0yb0IsZUFBaUIsV0FDckIsSUFBSyxJQUFJQyxFQUFRN3JCLFVBQVVDLE9BQVEwSixFQUFPLElBQUkzQixNQUFNNmpCLEdBQVFDLEVBQVEsRUFBR0EsRUFBUUQsRUFBT0MsSUFDcEZuaUIsRUFBS21pQixHQUFTOXJCLFVBQVU4ckIsR0FHMUIsT0FBTzdvQixFQUFNMG9CLGdCQUFnQixhQUFjLEVBQUdoaUIsRUFDaEQsRUFFQTFHLEVBQU04b0IsY0FBZ0IsV0FDcEIsSUFBSyxJQUFJQyxFQUFRaHNCLFVBQVVDLE9BQVEwSixFQUFPLElBQUkzQixNQUFNZ2tCLEdBQVFDLEVBQVEsRUFBR0EsRUFBUUQsRUFBT0MsSUFDcEZ0aUIsRUFBS3NpQixHQUFTanNCLFVBQVVpc0IsR0FHMUIsT0FBT2hwQixFQUFNMG9CLGdCQUFnQixZQUFhLEVBQUdoaUIsRUFDL0MsRUFFQTFHLEVBQU1pcEIsV0FBYSxXQUNqQixJQUFLLElBQUlDLEVBQVFuc0IsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU1ta0IsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRnppQixFQUFLeWlCLEdBQVNwc0IsVUFBVW9zQixHQUcxQixPQUFPbnBCLEVBQU0wb0IsZ0JBQWdCLFNBQVUsRUFBR2hpQixFQUM1QyxFQUVBMUcsRUFBTW9wQixjQUFnQixXQUNwQixJQUFLLElBQUlDLEVBQVF0c0IsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU1za0IsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRjVpQixFQUFLNGlCLEdBQVN2c0IsVUFBVXVzQixHQUcxQixPQUFPdHBCLEVBQU0wb0IsZ0JBQWdCLFlBQWEsRUFBR2hpQixFQUMvQyxFQUVBMUcsRUFBTTZuQixhQUFlLFdBQ25CLElBQUssSUFBSTBCLEVBQVF4c0IsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU13a0IsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRjlpQixFQUFLOGlCLEdBQVN6c0IsVUFBVXlzQixHQUcxQixPQUFPeHBCLEVBQU0wb0IsZ0JBQWdCLFdBQVksRUFBR2hpQixFQUM5QyxFQUVPMUcsQ0FDVCxFQTVEQSxPQUFlcW9CLEVBQW1CckgsR0E4RGxDLElBQUlhLEVBQVN3RyxFQUFrQmxyQixVQTRDL0IsT0ExQ0Ewa0IsRUFBTzZHLGdCQUFrQixTQUF5QnRNLEVBQVNxTixFQUFLQyxHQUM5RCxJQUFJQyxFQUVBOVosRUFBV3RTLEtBQUtpUSxNQUFNcUMsU0FDdEJKLEVBQVEscUJBQXVCSSxHQUFVNFosR0FHN0MsR0FGSWhhLEVBQU1qQyxNQUFNNE8sS0FBV3VOLEVBQWVsYSxFQUFNakMsT0FBTzRPLEdBQVM5ZSxNQUFNcXNCLEVBQWNELEdBRWhGbnNCLEtBQUtpUSxNQUFNNE8sR0FBVSxDQUN2QixJQUFJMEcsRUFBWXJULEVBQU1qQyxNQUFNZ1YsYUFBVXBpQixFQUFZLGdCQUFxQjdDLE1BQ3ZFQSxLQUFLaVEsTUFBTTRPLEdBQVMwRyxFQUN0QixDQUNGLEVBRUFqQixFQUFPdUMsT0FBUyxXQUNkLElBQUlDLEVBQWM5bUIsS0FBS2lRLE1BQ25CcUMsRUFBV3dVLEVBQVl4VSxTQUN2QitaLEVBQVN2RixFQUFZL0MsR0FDckI5VCxHQUFRLE9BQThCNlcsRUFBYSxDQUFDLFdBQVksT0FFaEV3RixFQUF3QixxQkFBdUJoYSxHQUMvQ2lhLEVBQVFELEVBQXNCLEdBQzlCRSxFQUFTRixFQUFzQixHQVFuQyxjQU5PcmMsRUFBTTRWLGVBQ041VixFQUFNNlYsa0JBQ043VixFQUFNMlYsaUJBQ04zVixFQUFNZ1csY0FDTmhXLEVBQU1pVyxpQkFDTmpXLEVBQU1rVyxTQUNPLGtCQUFvQixFQUFpQmxXLEVBQU9vYyxFQUFTLGlCQUFtQkUsRUFBTyxDQUNqRzVzQixJQUFLLFFBQ0xrbUIsUUFBUzdsQixLQUFLZ3JCLFlBQ2RsRixXQUFZOWxCLEtBQUtvckIsZUFDakJ4RixVQUFXNWxCLEtBQUt1ckIsZ0JBQ2IsaUJBQW1CaUIsRUFBUSxDQUM5QjdzQixJQUFLLFNBQ0xrbUIsUUFBUzdsQixLQUFLMHJCLFdBQ2Q1RixXQUFZOWxCLEtBQUs2ckIsY0FDakJqRyxVQUFXNWxCLEtBQUtzcUIsZUFFcEIsRUFFT1EsQ0FDVCxDQTVHcUMsQ0E0R25DLGVBRUZBLEVBQWtCN0QsVUFNZCxDQUFDLEVBQ0wsVUNySUEsSUFBSXdGLEVBQWVDLEVBc0JSQyxFQUNKLFNBRElBLEVBRUwsU0FHRkMsRUFBVyxTQUFrQjlOLEVBQVMrTixFQUFNQyxHQUM5QyxPQUFPLFdBQ0wsSUFBSUMsRUFFSmpPLEVBQVE3TyxNQUFNNGMsS0FBVUUsRUFBaUJqTyxFQUFRN08sT0FBTzRjLEdBQU05c0IsTUFBTWd0QixFQUFnQnZ0QixXQUNwRnN0QixHQUNGLENBQ0YsRUFFSUUsSUFBZ0JQLEVBQWdCLENBQUMsR0FBaUJFLEdBQWEsU0FBVS9PLEdBQzNFLElBQUl2YyxFQUFVdWMsRUFBS3ZjLFFBQ2Y0ckIsRUFBY3JQLEVBQUtxUCxZQUN2QixPQUFPLGlCQUFtQjVyQixFQUFTLENBQ2pDMGlCLElBQUksRUFDSm9DLFNBQVV5RyxFQUFTdnJCLEVBQVMsWUFBWSxXQUN0QzRyQixFQUFZNUosRUFBVSxLQUN4QixLQUVKLEVBQUdvSixFQUFjRSxHQUFZLFNBQVU3SyxHQUNyQyxJQUFJemdCLEVBQVV5Z0IsRUFBTXpnQixRQUNoQjRyQixFQUFjbkwsRUFBTW1MLFlBQ3BCM2EsRUFBV3dQLEVBQU14UCxTQUNyQixNQUFPLENBQUNqUixFQUFTLGlCQUFtQmlSLEVBQVUsQ0FDNUN5UixJQUFJLEVBQ0o2QixVQUFXZ0gsRUFBU3RhLEVBQVUsYUFBYSxXQUN6QzJhLEVBQVk1SixFQUNkLE1BRUosRUFBR29KLEdBQ0NTLElBQWdCUixFQUFnQixDQUFDLEdBQWlCQyxHQUFhLFNBQVVoRyxHQUMzRSxJQUFJclUsRUFBV3FVLEVBQU1yVSxTQUNqQjJhLEVBQWN0RyxFQUFNc0csWUFDeEIsT0FBTyxpQkFBbUIzYSxFQUFVLENBQ2xDeVIsSUFBSSxFQUNKNkIsVUFBV2dILEVBQVN0YSxFQUFVLGFBQWEsV0FDekMyYSxFQUFZM0osRUFBUyxpQkFBbUJoUixFQUFVLENBQ2hEeVIsSUFBSSxJQUVSLEtBRUosRUFBRzJJLEVBQWNDLEdBQVksU0FBVVEsR0FDckMsSUFBSTlyQixFQUFVOHJCLEVBQU05ckIsUUFDaEJpUixFQUFXNmEsRUFBTTdhLFNBQ2pCMmEsRUFBY0UsRUFBTUYsWUFDeEIsTUFBTyxDQUFDLGlCQUFtQjVyQixFQUFTLENBQ2xDMGlCLElBQUksRUFDSm9DLFNBQVV5RyxFQUFTdnJCLEVBQVMsWUFBWSxXQUN0QzRyQixFQUFZM0osRUFBUyxpQkFBbUJoUixFQUFVLENBQ2hEeVIsSUFBSSxJQUVSLE1BQ0UsaUJBQW1CelIsRUFBVSxDQUMvQnlSLElBQUksSUFFUixFQUFHMkksR0FzRENVLEVBQWdDLFNBQVUzSixHQUc1QyxTQUFTMkosSUFHUCxJQUZBLElBQUkzcUIsRUFFS3dlLEVBQU96aEIsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU15WixHQUFPdFgsRUFBTyxFQUFHQSxFQUFPc1gsRUFBTXRYLElBQy9FUixFQUFLUSxHQUFRbkssVUFBVW1LLEdBcUJ6QixPQWxCQWxILEVBQVFnaEIsRUFBaUIzakIsS0FBS0MsTUFBTTBqQixFQUFrQixDQUFDempCLE1BQU0rTyxPQUFPNUYsS0FBVW5KLE1BQ3hFc0csTUFBUSxDQUNaNGQsT0FBUVosRUFDUmppQixRQUFTLE1BRVhvQixFQUFNNHFCLFVBQVcsRUFFakI1cUIsRUFBTXdxQixZQUFjLFNBQVUvSSxFQUFRN2lCLFFBQ3BCLElBQVpBLElBQ0ZBLEVBQVVvQixFQUFNNkQsTUFBTWpGLFNBR3hCb0IsRUFBTTJpQixTQUFTLENBQ2JsQixPQUFRQSxFQUNSN2lCLFFBQVNBLEdBRWIsRUFFT29CLENBQ1QsRUE1QkEsT0FBZTJxQixFQUFrQjNKLEdBOEJqQyxJQUFJYSxFQUFTOEksRUFBaUJ4dEIsVUFtRTlCLE9BakVBMGtCLEVBQU9DLGtCQUFvQixXQUN6QnZrQixLQUFLcXRCLFVBQVcsQ0FDbEIsRUFFQUQsRUFBaUJoSix5QkFBMkIsU0FBa0NuVSxFQUFPM0osR0FDbkYsT0FBc0IsTUFBbEIySixFQUFNcUMsU0FDRCxDQUNMalIsUUFBUyxNQUlUaUYsRUFBTTRkLFNBQVdiLEdBQVlwVCxFQUFNcWQsT0FBU1gsRUFDdkMsQ0FDTHpJLE9BQVFiLElBSVIvYyxFQUFNakYsV0FsTGdCa3NCLEVBa0xnQmpuQixFQUFNakYsWUFsTFRtc0IsRUFrTGtCdmQsRUFBTXFDLFdBL0s3RCxtQkFBcUJpYixJQUFnQixtQkFBcUJDLElBQW1DLE1BQW5CRCxFQUFZNXRCLEtBQWU0dEIsRUFBWTV0QixNQUFRNnRCLEVBQVk3dEIsS0FxTGhJLENBQ0wwQixRQUFTLGlCQUFtQjRPLEVBQU1xQyxTQUFVLENBQzFDeVIsSUFBSSxLQVBDLENBQ0xHLE9BQVFYLEdBcExoQixJQUE4QmdLLEVBQWFDLENBNkx6QyxFQUVBbEosRUFBT3VDLE9BQVMsV0FDZCxJQVlJK0QsRUFaQTlELEVBQWM5bUIsS0FBS2lRLE1BQ25CcUMsRUFBV3dVLEVBQVl4VSxTQUN2QmdiLEVBQU94RyxFQUFZd0csS0FDbkJHLEVBQWN6dEIsS0FBS3NHLE1BQ25CNGQsRUFBU3VKLEVBQVl2SixPQUNyQjdpQixFQUFVb3NCLEVBQVlwc0IsUUFDdEJ1QixFQUFPLENBQ1QwUCxTQUFVQSxFQUNWalIsUUFBU0EsRUFDVDRyQixZQUFhanRCLEtBQUtpdEIsWUFDbEIvSSxPQUFRQSxHQUlWLE9BQVFBLEdBQ04sS0FBS2IsRUFDSHVILEVBQVlzQyxFQUFhSSxHQUFNMXFCLEdBQy9CLE1BRUYsS0FBSzJnQixFQUNIcUgsRUFBWW9DLEVBQWFNLEdBQU0xcUIsR0FDL0IsTUFFRixLQUFLMGdCLEVBQ0hzSCxFQUFZdnBCLEVBR2hCLE9BQW9CLGtCQUFvQjBsQixFQUF1QmxXLFNBQVUsQ0FDdkV2TyxNQUFPLENBQ0x1aEIsWUFBYTdqQixLQUFLcXRCLFdBRW5CekMsRUFDTCxFQUVPd0MsQ0FDVCxDQW5Hb0MsQ0FtR2xDLGVBRUZBLEVBQWlCbkcsVUFjYixDQUFDLEVBQ0xtRyxFQUFpQmxHLGFBQWUsQ0FDOUJvRyxLQUFNWCxHQUVSLG1GQy9LSWUsRUFBYyxXQUNoQixTQUFTQyxFQUFpQnJ1QixFQUFRMlEsR0FDaEMsSUFBSyxJQUFJMVEsRUFBSSxFQUFHQSxFQUFJMFEsRUFBTXhRLE9BQVFGLElBQUssQ0FDckMsSUFBSXF1QixFQUFhM2QsRUFBTTFRLEdBQ3ZCcXVCLEVBQVdwYyxXQUFhb2MsRUFBV3BjLGFBQWMsRUFDakRvYyxFQUFXQyxjQUFlLEVBQ3RCLFVBQVdELElBQVlBLEVBQVdFLFVBQVcsR0FDakQxdUIsT0FBTzRRLGVBQWUxUSxFQUFRc3VCLEVBQVdqdUIsSUFBS2l1QixFQUNoRCxDQUNGLENBRUEsT0FBTyxTQUFVRyxFQUFhQyxFQUFZQyxHQUd4QyxPQUZJRCxHQUFZTCxFQUFpQkksRUFBWW51QixVQUFXb3VCLEdBQ3BEQyxHQUFhTixFQUFpQkksRUFBYUUsR0FDeENGLENBQ1QsQ0FDRixDQWhCa0IsR0FrQ2RHLEVBQTRCLFNBQVVqdkIsRUFBTWEsR0FDOUMsSUFBS2IsRUFDSCxNQUFNLElBQUlDLGVBQWUsNkRBRzNCLE9BQU9ZLEdBQXlCLGlCQUFUQSxHQUFxQyxtQkFBVEEsRUFBOEJiLEVBQVBhLENBQzVFLEVBRUlxdUIsRUFBaUIsU0FBVUMsR0FHN0IsU0FBU0QsSUFDUCxJQUFJdlEsRUFFQXlRLEVBQU81ckIsR0F0RE0sU0FBVTZyQixFQUFVUCxHQUN2QyxLQUFNTyxhQUFvQlAsR0FDeEIsTUFBTSxJQUFJdHBCLFVBQVUsb0NBRXhCLENBb0RJOHBCLENBQWV2dUIsS0FBTW11QixHQUVyQixJQUFLLElBQUlsTixFQUFPemhCLFVBQVVDLE9BQVEwSixFQUFPM0IsTUFBTXlaLEdBQU90WCxFQUFPLEVBQUdBLEVBQU9zWCxFQUFNdFgsSUFDM0VSLEVBQUtRLEdBQVFuSyxVQUFVbUssR0FHekIsT0FBZTBrQixFQUFTNXJCLEVBQVF5ckIsRUFBMEJsdUIsTUFBTzRkLEVBQU91USxFQUFlN3RCLFdBQWFsQixPQUFPb3ZCLGVBQWVMLElBQWlCcnVCLEtBQUtDLE1BQU02ZCxFQUFNLENBQUM1ZCxNQUFNK08sT0FBTzVGLEtBQWlCMUcsRUFBTWdzQix5QkFBMkIsRUFBR2hzQixFQUFNaXNCLHdCQUEwQixFQUFHanNCLEVBQU1rc0Isd0JBQTBCLEdBQUlsc0IsRUFBTW1zQixpQkFBbUIsU0FBVTlNLEdBQ3ZVLElBQUkrTSxFQUFvQi9NLEVBQU0rTSxrQkFDMUJDLEVBQW1CaE4sRUFBTWdOLGlCQVk3QnJzQixFQUFNZ3NCLHdCQUEwQkksRUFDaENwc0IsRUFBTWlzQix1QkFBeUJJLEVBRS9CcnNCLEVBQU1zc0Isa0JBQWtCRixFQUFtQkMsRUFDN0MsRUFBR3JzQixFQUFNdXNCLFFBQVUsU0FBVUMsR0FDM0J4c0IsRUFBTXlzQixTQUFXRCxDQUNuQixFQUFXZixFQUEwQnpyQixFQUFsQzRyQixFQUNMLENBZ0hBLE9BM0thLFNBQVVudUIsRUFBVUMsR0FDakMsR0FBMEIsbUJBQWZBLEdBQTRDLE9BQWZBLEVBQ3RDLE1BQU0sSUFBSXNFLFVBQVUsa0VBQW9FdEUsR0FHMUZELEVBQVNOLFVBQVlSLE9BQU9nQixPQUFPRCxHQUFjQSxFQUFXUCxVQUFXLENBQ3JFUyxZQUFhLENBQ1hpQyxNQUFPcEMsRUFDUHNSLFlBQVksRUFDWnNjLFVBQVUsRUFDVkQsY0FBYyxLQUdkMXRCLElBQVlmLE9BQU8rdkIsZUFBaUIvdkIsT0FBTyt2QixlQUFlanZCLEVBQVVDLEdBQWNELEVBQVNJLFVBQVlILEVBQzdHLENBV0VpdkIsQ0FBU2pCLEVBQWdCQyxHQW9DekJWLEVBQVlTLEVBQWdCLENBQUMsQ0FDM0J4dUIsSUFBSywwQkFDTDJDLE1BQU8sV0FDTCxJQUFJK3NCLEVBQWE3dkIsVUFBVUMsT0FBUyxRQUFzQm9ELElBQWpCckQsVUFBVSxJQUFtQkEsVUFBVSxHQUVoRlEsS0FBSzJ1Qix3QkFBMEIsR0FFM0JVLEdBQ0ZydkIsS0FBSyt1QixrQkFBa0IvdUIsS0FBS3l1Qix3QkFBeUJ6dUIsS0FBSzB1Qix1QkFFOUQsR0FDQyxDQUNEL3VCLElBQUssb0JBQ0wyQyxNQUFPLFdBTVAsR0FDQyxDQUNEM0MsSUFBSyxTQUNMMkMsTUFBTyxXQUlMLE9BQU9nUSxFQUhRdFMsS0FBS2lRLE1BQU1xQyxVQUdWLENBQ2RnZCxnQkFBaUJ0dkIsS0FBSzR1QixpQkFDdEI1dEIsSUFBS2hCLEtBQUtndkIsU0FFZCxHQUNDLENBQ0RydkIsSUFBSyxvQkFDTDJDLE1BQU8sU0FBMkJpdEIsRUFBWUMsR0FDNUMsSUFBSUMsRUFBU3p2QixLQUFLaVEsTUFDZHlmLEVBQWVELEVBQU9DLGFBQ3RCQyxFQUFZRixFQUFPRSxVQUNuQkMsRUFBd0JILEVBQU9JLGlCQUMvQkEsT0FBNkNodEIsSUFBMUIrc0IsRUFBc0MsR0FBS0EsRUFDOURFLEVBQW1CTCxFQUFPTSxVQUMxQkEsT0FBaUNsdEIsSUFBckJpdEIsRUFBaUMsR0FBS0EsRUFHbERFLEVBNUxWLFNBQStCcFMsR0FZN0IsSUFYQSxJQUFJOFIsRUFBZTlSLEVBQUs4UixhQUNwQkMsRUFBWS9SLEVBQUsrUixVQUNqQkUsRUFBbUJqUyxFQUFLaVMsaUJBRXhCTCxFQUFZNVIsRUFBSzRSLFVBRWpCUSxFQUFpQixHQUVqQkMsRUFBa0IsS0FDbEJDLEVBQWlCLEtBRVpDLEVBUlF2UyxFQUFLMlIsV0FRUVksR0FBVVgsRUFBV1csSUFDcENULEVBQWFTLEdBT0ksT0FBbkJELElBQ1RGLEVBQWUzdEIsS0FBSzR0QixFQUFpQkMsR0FFckNELEVBQWtCQyxFQUFpQixPQVBuQ0EsRUFBaUJDLEVBQ08sT0FBcEJGLElBQ0ZBLEVBQWtCRSxJQVd4QixHQUF1QixPQUFuQkQsRUFBeUIsQ0FHM0IsSUFGQSxJQUFJRSxFQUFxQjNpQixLQUFLNGlCLElBQUk1aUIsS0FBSzZpQixJQUFJSixFQUFnQkQsRUFBa0JKLEVBQW1CLEdBQUlGLEVBQVksR0FFdkdZLEVBQVVMLEVBQWlCLEVBQUdLLEdBQVdILElBQzNDVixFQUFhYSxHQURrREEsSUFFbEVMLEVBQWlCSyxFQU1yQlAsRUFBZTN0QixLQUFLNHRCLEVBQWlCQyxFQUN2QyxDQUlBLEdBQUlGLEVBQWV2d0IsT0FDakIsS0FBT3V3QixFQUFlLEdBQUtBLEVBQWUsR0FBSyxFQUFJSCxHQUFvQkcsRUFBZSxHQUFLLEdBQUcsQ0FDNUYsSUFBSVEsRUFBVVIsRUFBZSxHQUFLLEVBRWxDLEdBQUtOLEVBQWFjLEdBR2hCLE1BRkFSLEVBQWUsR0FBS1EsQ0FJeEIsQ0FHRixPQUFPUixDQUNULENBa0kyQlMsQ0FBc0IsQ0FDekNmLGFBQWNBLEVBQ2RDLFVBQVdBLEVBQ1hFLGlCQUFrQkEsRUFDbEJOLFdBQVk5aEIsS0FBSzZpQixJQUFJLEVBQUdmLEVBQWFRLEdBQ3JDUCxVQUFXL2hCLEtBQUs0aUIsSUFBSVYsRUFBWSxFQUFHSCxFQUFZTyxNQUs3Qy92QixLQUFLMnVCLHdCQUF3Qmx2QixTQUFXdXdCLEVBQWV2d0IsUUFBVU8sS0FBSzJ1Qix3QkFBd0IrQixNQUFLLFNBQVVDLEVBQWExcEIsR0FDNUgsT0FBTytvQixFQUFlL29CLEtBQVcwcEIsQ0FDbkMsT0FDRTN3QixLQUFLMnVCLHdCQUEwQnFCLEVBQy9CaHdCLEtBQUs0d0Isb0JBQW9CWixHQUU3QixHQUNDLENBQ0Ryd0IsSUFBSyxzQkFDTDJDLE1BQU8sU0FBNkIwdEIsR0EyQ2xDLElBMUNBLElBQUkzSyxFQUFTcmxCLEtBR1Q2d0IsRUFBZ0I3d0IsS0FBS2lRLE1BQU00Z0IsZUFBaUI3d0IsS0FBS2lRLE1BQU02Z0IsYUFFdkRDLEVBQVEsU0FBZXh4QixHQUN6QixJQUFJZ3dCLEVBQWFTLEVBQWV6d0IsR0FDNUJpd0IsRUFBWVEsRUFBZXp3QixFQUFJLEdBQy9CZ0UsRUFBVXN0QixFQUFjdEIsRUFBWUMsR0FDekIsTUFBWGpzQixHQUNGQSxFQUFRNEIsTUFBSyxXQUdYLE1BdE9ZeVksRUFzT08sQ0FDakJvVCx1QkFBd0IzTCxFQUFPb0osd0JBQy9Cd0Msc0JBQXVCNUwsRUFBT3FKLHVCQUM5QmEsV0FBWUEsRUFDWkMsVUFBV0EsSUF2T0RELFdBRE0zUixFQUFLcVQsdUJBRWpCclQsRUFBSzRSLFVBSFE1UixFQUFLb1Qsd0JBME9wQixDQUVGLEdBQXVCLE1BQW5CM0wsRUFBTzZKLFNBQ1QsT0FLNkMsbUJBQXBDN0osRUFBTzZKLFNBQVNnQyxnQkFDekI3TCxFQUFPNkosU0FBU2dDLGdCQUFnQjNCLEdBQVksSUFLTSxtQkFBdkNsSyxFQUFPNkosU0FBU2lDLG9CQUN6QjlMLEVBQU82SixTQUFTaUMsb0JBQW9CLEdBRXRDOUwsRUFBTzZKLFNBQVNrQyxjQUVwQixDQTlQWixJQUF3QnhULENBK1BkLEdBRUosRUFFU3JlLEVBQUksRUFBR0EsRUFBSXl3QixFQUFldndCLE9BQVFGLEdBQUssRUFDOUN3eEIsRUFBTXh4QixFQUVWLEtBRUs0dUIsQ0FDVCxDQXBKcUIsQ0FvSm5CLEVBQUFrRCxlQUVGLDBOQ2pSSUMsRUFBWUMsT0FBT0MsT0FDbkIsU0FBa0JsdkIsR0FDZCxNQUF3QixpQkFBVkEsR0FBc0JBLEdBQVVBLENBQ2xELEVBVUosU0FBU212QixFQUFlQyxFQUFXQyxHQUMvQixHQUFJRCxFQUFVanlCLFNBQVdreUIsRUFBV2x5QixPQUNoQyxPQUFPLEVBRVgsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUlteUIsRUFBVWp5QixPQUFRRixJQUNsQyxNQWRTZ3RCLEVBY0ltRixFQUFVbnlCLE9BZFBpdEIsRUFjV21GLEVBQVdweUIsS0FWdEMreEIsRUFBVS9FLElBQVUrRSxFQUFVOUUsSUFXMUIsT0FBTyxFQWZuQixJQUFpQkQsRUFBT0MsRUFrQnBCLE9BQU8sQ0FDWCxDQXlCQSxRQXZCQSxTQUFvQm9GLEVBQVVDLEdBRTFCLElBQUlDLE9BRFksSUFBWkQsSUFBc0JBLEVBQVVKLEdBRXBDLElBQ0lNLEVBREFDLEVBQVcsR0FFWEMsR0FBYSxFQWVqQixPQWRBLFdBRUksSUFEQSxJQUFJQyxFQUFVLEdBQ0w5WixFQUFLLEVBQUdBLEVBQUs1WSxVQUFVQyxPQUFRMlksSUFDcEM4WixFQUFROVosR0FBTTVZLFVBQVU0WSxHQUU1QixPQUFJNlosR0FBY0gsSUFBYTl4QixNQUFRNnhCLEVBQVFLLEVBQVNGLEtBR3hERCxFQUFhSCxFQUFTN3hCLE1BQU1DLEtBQU1reUIsR0FDbENELEdBQWEsRUFDYkgsRUFBVzl4QixLQUNYZ3lCLEVBQVdFLEdBTEFILENBT2YsQ0FFSiwwQkNwQ0lJLEVBRGlELGlCQUFoQkMsYUFBdUQsbUJBQXBCQSxZQUFZRCxJQUNoRCxXQUNsQyxPQUFPQyxZQUFZRCxLQUNyQixFQUFJLFdBQ0YsT0FBT25yQixLQUFLbXJCLEtBQ2QsRUFDQSxTQUFTRSxFQUFjQyxHQUNyQkMscUJBQXFCRCxFQUFVRSxHQUNqQyxDQUNBLFNBQVNDLEVBQWUxeEIsRUFBVTJ4QixHQUNoQyxJQUFJQyxFQUFRUixJQVVSRyxFQUFZLENBQ2RFLEdBQUlJLHVCQVROLFNBQVNDLElBQ0hWLElBQVFRLEdBQVNELEVBQ25CM3hCLEVBQVNqQixLQUFLLE1BRWR3eUIsRUFBVUUsR0FBS0ksc0JBQXNCQyxFQUV6QyxLQUtBLE9BQU9QLENBQ1QsQ0FFQSxJQUFJUSxHQUFRLEVBRVosU0FBU0MsRUFBaUJDLEdBS3hCLFFBSm9CLElBQWhCQSxJQUNGQSxHQUFjLElBR0YsSUFBVkYsR0FBZUUsRUFBYSxDQUM5QixJQUFJQyxFQUFNMXhCLFNBQVNxUCxjQUFjLE9BQzdCcUUsRUFBUWdlLEVBQUloZSxNQUNoQkEsRUFBTUcsTUFBUSxPQUNkSCxFQUFNSSxPQUFTLE9BQ2ZKLEVBQU1pZSxTQUFXLFNBQ2pCM3hCLFNBQVNxQyxLQUFLdXZCLFlBQVlGLEdBQzFCSCxFQUFPRyxFQUFJRyxZQUFjSCxFQUFJSSxZQUM3Qjl4QixTQUFTcUMsS0FBSzB2QixZQUFZTCxFQUM1QixDQUVBLE9BQU9ILENBQ1QsQ0FDQSxJQUFJUyxFQUFrQixLQU90QixTQUFTQyxFQUFpQlIsR0FLeEIsUUFKb0IsSUFBaEJBLElBQ0ZBLEdBQWMsR0FHUSxPQUFwQk8sR0FBNEJQLEVBQWEsQ0FDM0MsSUFBSVMsRUFBV2x5QixTQUFTcVAsY0FBYyxPQUNsQzhpQixFQUFhRCxFQUFTeGUsTUFDMUJ5ZSxFQUFXdGUsTUFBUSxPQUNuQnNlLEVBQVdyZSxPQUFTLE9BQ3BCcWUsRUFBV1IsU0FBVyxTQUN0QlEsRUFBV0MsVUFBWSxNQUN2QixJQUFJQyxFQUFXcnlCLFNBQVNxUCxjQUFjLE9BQ2xDaWpCLEVBQWFELEVBQVMzZSxNQW1CMUIsT0FsQkE0ZSxFQUFXemUsTUFBUSxRQUNuQnllLEVBQVd4ZSxPQUFTLFFBQ3BCb2UsRUFBU04sWUFBWVMsR0FDckJyeUIsU0FBU3FDLEtBQUt1dkIsWUFBWU0sR0FFdEJBLEVBQVNLLFdBQWEsRUFDeEJQLEVBQWtCLHVCQUVsQkUsRUFBU0ssV0FBYSxFQUdwQlAsRUFEMEIsSUFBeEJFLEVBQVNLLFdBQ08sV0FFQSxzQkFJdEJ2eUIsU0FBU3FDLEtBQUswdkIsWUFBWUcsR0FDbkJGLENBQ1QsQ0FFQSxPQUFPQSxDQUNULENBRUEsSUFBSVEsRUFBaUMsSUFFakNDLEVBQWlCLFNBQXdCcFcsR0FDM0MsSUFBSXFXLEVBQWNyVyxFQUFLcVcsWUFHdkIsT0FGV3JXLEVBQUtoYixLQUNEZ2IsRUFBS3NXLFNBQ0YsSUFBTUQsQ0FDMUIsRUFnQkEsU0FBU0UsRUFBb0JyUyxHQUMzQixJQUFJc1MsRUFFQUMsRUFBa0J2UyxFQUFNdVMsZ0JBQ3hCQyxFQUErQnhTLEVBQU13Uyw2QkFDckNDLEVBQWtDelMsRUFBTXlTLGdDQUN4Q0MsRUFBaUIxUyxFQUFNMFMsZUFDdkJDLEVBQTBCM1MsRUFBTTJTLHdCQUNoQ0MsRUFBeUI1UyxFQUFNNFMsdUJBQy9CQyxFQUFpQzdTLEVBQU02UywrQkFDdkNDLEVBQThCOVMsRUFBTThTLDRCQUNwQ0MsRUFBZS9TLEVBQU0rUyxhQUNyQkMsRUFBZWhULEVBQU1nVCxhQUNyQkMsRUFBNEJqVCxFQUFNaVQsMEJBQ2xDQyxFQUErQmxULEVBQU1rVCw2QkFDckNDLEVBQW9CblQsRUFBTW1ULGtCQUMxQkMsRUFBd0NwVCxFQUFNb1Qsc0NBQzlDQyxFQUFnQnJULEVBQU1xVCxjQUMxQixPQUFPZixFQUFzQixTQUFVaEcsR0FNckMsU0FBU2dILEVBQUtubEIsR0FDWixJQUFJeE4sRUE0SkosT0ExSkFBLEVBQVEyckIsRUFBZXR1QixLQUFLRSxLQUFNaVEsSUFBVWpRLE1BQ3RDcTFCLGVBQWlCSixFQUFrQnh5QixFQUFNd04sT0FBTyxPQUF1QnhOLElBQzdFQSxFQUFNNnlCLDJCQUE2QixLQUNuQzd5QixFQUFNOHlCLGVBQVksRUFDbEI5eUIsRUFBTTZELE1BQVEsQ0FDWmdvQixVQUFVLE9BQXVCN3JCLEdBQ2pDK3lCLGFBQWEsRUFDYkMsMEJBQTJCLFVBQzNCM0IsV0FBcUQsaUJBQWxDcnhCLEVBQU13TixNQUFNeWxCLGtCQUFpQ2p6QixFQUFNd04sTUFBTXlsQixrQkFBb0IsRUFDaEd4UyxVQUFtRCxpQkFBakN6Z0IsRUFBTXdOLE1BQU0wbEIsaUJBQWdDbHpCLEVBQU13TixNQUFNMGxCLGlCQUFtQixFQUM3RkMsMEJBQTBCLEVBQzFCQyx3QkFBeUIsV0FFM0JwekIsRUFBTXF6QiwwQkFBdUIsRUFDN0JyekIsRUFBTXF6QixxQkFBdUIsR0FBVyxTQUFVQyxFQUEwQkMsRUFBeUJDLEVBQXVCQyxFQUFzQkMsRUFBeUJDLEVBQXdCQyxFQUFzQkMsR0FDdk4sT0FBTzd6QixFQUFNd04sTUFBTXFmLGdCQUFnQixDQUNqQ3lHLHlCQUEwQkEsRUFDMUJDLHdCQUF5QkEsRUFDekJDLHNCQUF1QkEsRUFDdkJDLHFCQUFzQkEsRUFDdEJDLHdCQUF5QkEsRUFDekJDLHVCQUF3QkEsRUFDeEJDLHFCQUFzQkEsRUFDdEJDLG9CQUFxQkEsR0FFekIsSUFDQTd6QixFQUFNOHpCLG1CQUFnQixFQUN0Qjl6QixFQUFNOHpCLGNBQWdCLEdBQVcsU0FBVXpDLEVBQVk1USxFQUFXdVMsRUFBMkJJLEVBQXlCRCxHQUNwSCxPQUFPbnpCLEVBQU13TixNQUFNdW1CLFNBQVMsQ0FDMUJmLDBCQUEyQkEsRUFDM0IzQixXQUFZQSxFQUNaNVEsVUFBV0EsRUFDWDJTLHdCQUF5QkEsRUFDekJELHlCQUEwQkEsR0FFOUIsSUFDQW56QixFQUFNZzBCLG1CQUFnQixFQUV0QmgwQixFQUFNZzBCLGNBQWdCLFNBQVV2QyxFQUFVRCxHQUN4QyxJQVFJaGYsRUFSQTZSLEVBQWNya0IsRUFBTXdOLE1BQ3BCeW1CLEVBQWM1UCxFQUFZNFAsWUFDMUIvQyxFQUFZN00sRUFBWTZNLFVBQ3hCZ0QsRUFBWTdQLEVBQVk2UCxVQUV4QkMsRUFBaUJuMEIsRUFBTTB1QixtQkFBbUIrRCxHQUF5Q3dCLEVBQWF4QixHQUF5Q3ZCLEVBQVd1QixHQUF5Q3lCLEdBRTdMaDNCLEVBQU11MEIsRUFBVyxJQUFNRCxFQUczQixHQUFJMkMsRUFBZS8yQixlQUFlRixHQUNoQ3NWLEVBQVEyaEIsRUFBZWozQixPQUNsQixDQUNMLElBQUlrM0IsRUFBVXhDLEVBQWdCNXhCLEVBQU13TixNQUFPZ2tCLEVBQWF4eEIsRUFBTTR5QixnQkFFMUR5QixFQUFzQixRQUFkbkQsRUFDWmlELEVBQWVqM0IsR0FBT3NWLEVBQVEsQ0FDNUIyQixTQUFVLFdBQ1ZTLEtBQU15ZixPQUFRajBCLEVBQVlnMEIsRUFDMUJwYyxNQUFPcWMsRUFBUUQsT0FBVWgwQixFQUN6QnVVLElBQUswZCxFQUFhcnlCLEVBQU13TixNQUFPaWtCLEVBQVV6eEIsRUFBTTR5QixnQkFDL0NoZ0IsT0FBUXdmLEVBQWFweUIsRUFBTXdOLE1BQU9pa0IsRUFBVXp4QixFQUFNNHlCLGdCQUNsRGpnQixNQUFPb2YsRUFBZS94QixFQUFNd04sTUFBT2drQixFQUFheHhCLEVBQU00eUIsZ0JBRTFELENBRUEsT0FBT3BnQixDQUNULEVBRUF4UyxFQUFNMHVCLHdCQUFxQixFQUMzQjF1QixFQUFNMHVCLG1CQUFxQixHQUFXLFNBQVVsdEIsRUFBR2lKLEVBQUk2cEIsR0FDckQsTUFBTyxDQUFDLENBQ1YsSUFFQXQwQixFQUFNdTBCLFVBQVksU0FBVTUxQixHQUMxQixJQUFJNjFCLEVBQXVCNzFCLEVBQU1tVixjQUM3QjJnQixFQUFlRCxFQUFxQkMsYUFDcEM3RCxFQUFjNEQsRUFBcUI1RCxZQUNuQ1MsRUFBYW1ELEVBQXFCbkQsV0FDbEM1USxFQUFZK1QsRUFBcUIvVCxVQUNqQ2lVLEVBQWVGLEVBQXFCRSxhQUNwQ0MsRUFBY0gsRUFBcUJHLFlBRXZDMzBCLEVBQU0yaUIsVUFBUyxTQUFVZixHQUN2QixHQUFJQSxFQUFVeVAsYUFBZUEsR0FBY3pQLEVBQVVuQixZQUFjQSxFQUlqRSxPQUFPLEtBR1QsSUFBSXlRLEVBQVlseEIsRUFBTXdOLE1BQU0wakIsVUFLeEIwRCxFQUF1QnZELEVBRTNCLEdBQWtCLFFBQWRILEVBQ0YsT0FBUUgsS0FDTixJQUFLLFdBQ0g2RCxHQUF3QnZELEVBQ3hCLE1BRUYsSUFBSyxzQkFDSHVELEVBQXVCRCxFQUFjL0QsRUFBY1MsRUFNekR1RCxFQUF1QjVwQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlnSCxFQUFzQkQsRUFBYy9ELElBQ2hGLElBQUlpRSxFQUFzQjdwQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUluTixFQUFXaVUsRUFBZUQsSUFDekUsTUFBTyxDQUNMMUIsYUFBYSxFQUNiQywwQkFBMkJwUixFQUFVeVAsV0FBYUEsRUFBYSxVQUFZLFdBQzNFQSxXQUFZdUQsRUFDWm5VLFVBQVdvVSxFQUNYekIsd0JBQXlCeFIsRUFBVW5CLFVBQVlBLEVBQVksVUFBWSxXQUN2RTBTLDBCQUEwQixFQUU5QixHQUFHbnpCLEVBQU04MEIsMkJBQ1gsRUFFQTkwQixFQUFNKzBCLGdCQUFrQixTQUFVeDJCLEdBQ2hDLElBQUl5MkIsRUFBV2gxQixFQUFNd04sTUFBTXduQixTQUMzQmgxQixFQUFNOHlCLFVBQVl2MEIsRUFFTSxtQkFBYnkyQixFQUNUQSxFQUFTejJCLEdBQ1ksTUFBWnkyQixHQUF3QyxpQkFBYkEsR0FBeUJBLEVBQVM1M0IsZUFBZSxhQUNyRjQzQixFQUFTcDJCLFFBQVVMLEVBRXZCLEVBRUF5QixFQUFNODBCLDJCQUE2QixXQUNRLE9BQXJDOTBCLEVBQU02eUIsNEJBQ1JqRCxFQUFjNXZCLEVBQU02eUIsNEJBR3RCN3lCLEVBQU02eUIsMkJBQTZCN0MsRUFBZWh3QixFQUFNaTFCLGtCQUFtQjNELEVBQzdFLEVBRUF0eEIsRUFBTWkxQixrQkFBb0IsV0FDeEJqMUIsRUFBTTZ5QiwyQkFBNkIsS0FFbkM3eUIsRUFBTTJpQixTQUFTLENBQ2JvUSxhQUFhLElBQ1osV0FHRC95QixFQUFNMHVCLG9CQUFvQixFQUM1QixHQUNGLEVBRU8xdUIsQ0FDVCxFQW5LQSxPQUFlMnlCLEVBQU1oSCxHQXFLckJnSCxFQUFLaFIseUJBQTJCLFNBQWtDaUYsRUFBV2hGLEdBRzNFLE9BRkFzVCxFQUFvQnRPLEVBQVdoRixHQUMvQjhRLEVBQWM5TCxHQUNQLElBQ1QsRUFFQSxJQUFJL0UsRUFBUzhRLEVBQUt4MUIsVUFxVGxCLE9BblRBMGtCLEVBQU9zVCxTQUFXLFNBQWtCalIsR0FDbEMsSUFBSW1OLEVBQWFuTixFQUFNbU4sV0FDbkI1USxFQUFZeUQsRUFBTXpELGVBRUhyZ0IsSUFBZml4QixJQUNGQSxFQUFhcm1CLEtBQUs2aUIsSUFBSSxFQUFHd0QsU0FHVGp4QixJQUFkcWdCLElBQ0ZBLEVBQVl6VixLQUFLNmlCLElBQUksRUFBR3BOLElBRzFCbGpCLEtBQUtvbEIsVUFBUyxTQUFVZixHQVN0QixZQVJtQnhoQixJQUFmaXhCLElBQ0ZBLEVBQWF6UCxFQUFVeVAsaUJBR1BqeEIsSUFBZHFnQixJQUNGQSxFQUFZbUIsRUFBVW5CLFdBR3BCbUIsRUFBVXlQLGFBQWVBLEdBQWN6UCxFQUFVbkIsWUFBY0EsRUFDMUQsS0FHRixDQUNMdVMsMEJBQTJCcFIsRUFBVXlQLFdBQWFBLEVBQWEsVUFBWSxXQUMzRUEsV0FBWUEsRUFDWjVRLFVBQVdBLEVBQ1gwUywwQkFBMEIsRUFDMUJDLHdCQUF5QnhSLEVBQVVuQixVQUFZQSxFQUFZLFVBQVksV0FFM0UsR0FBR2xqQixLQUFLdTNCLDJCQUNWLEVBRUFqVCxFQUFPdVQsYUFBZSxTQUFzQjFLLEdBQzFDLElBQUkySyxFQUFjM0ssRUFBTTRLLE1BQ3BCQSxPQUF3QixJQUFoQkQsRUFBeUIsT0FBU0EsRUFDMUM3RCxFQUFjOUcsRUFBTThHLFlBQ3BCQyxFQUFXL0csRUFBTStHLFNBQ2pCOEQsRUFBZWg0QixLQUFLaVEsTUFDcEJnb0IsRUFBY0QsRUFBYUMsWUFDM0I1aUIsRUFBUzJpQixFQUFhM2lCLE9BQ3RCNmlCLEVBQVdGLEVBQWFFLFNBQ3hCOWlCLEVBQVE0aUIsRUFBYTVpQixNQUNyQnFZLEVBQWN6dEIsS0FBS3NHLE1BQ25Cd3RCLEVBQWFyRyxFQUFZcUcsV0FDekI1USxFQUFZdUssRUFBWXZLLFVBQ3hCaVYsRUFBZ0JwRixTQUVBbHdCLElBQWhCb3hCLElBQ0ZBLEVBQWN4bUIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJNEQsRUFBYWdFLEVBQWMsVUFHL0NwMUIsSUFBYnF4QixJQUNGQSxFQUFXem1CLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSTZELEVBQVVnRSxFQUFXLEtBR3ZELElBQUlFLEVBQXVCM0QsRUFBd0J6MEIsS0FBS2lRLE1BQU9qUSxLQUFLcTFCLGdCQUtoRWdELEVBSnNCM0QsRUFBdUIxMEIsS0FBS2lRLE1BQU9qUSxLQUFLcTFCLGdCQUlkamdCLEVBQVEraUIsRUFBZ0IsRUFDeEVHLEVBQXdCRixFQUF1Qi9pQixFQUFTOGlCLEVBQWdCLEVBQzVFbjRCLEtBQUs0M0IsU0FBUyxDQUNaOUQsZ0JBQTRCanhCLElBQWhCb3hCLEVBQTRCVSxFQUErQjMwQixLQUFLaVEsTUFBT2drQixFQUFhOEQsRUFBT2pFLEVBQVk5ekIsS0FBS3ExQixlQUFnQmlELEdBQXlCeEUsRUFDaks1USxlQUF3QnJnQixJQUFicXhCLEVBQXlCVSxFQUE0QjUwQixLQUFLaVEsTUFBT2lrQixFQUFVNkQsRUFBTzdVLEVBQVdsakIsS0FBS3ExQixlQUFnQmdELEdBQTJCblYsR0FFNUosRUFFQW9CLEVBQU9DLGtCQUFvQixXQUN6QixJQUFJZ1UsRUFBZXY0QixLQUFLaVEsTUFDcEJ5bEIsRUFBb0I2QyxFQUFhN0Msa0JBQ2pDQyxFQUFtQjRDLEVBQWE1QyxpQkFFcEMsR0FBc0IsTUFBbEIzMUIsS0FBS3UxQixVQUFtQixDQUMxQixJQUFJa0MsRUFBV3ozQixLQUFLdTFCLFVBRWEsaUJBQXRCRyxJQUNUK0IsRUFBUzNELFdBQWE0QixHQUdRLGlCQUFyQkMsSUFDVDhCLEVBQVN2VSxVQUFZeVMsRUFFekIsQ0FFQTMxQixLQUFLdzRCLHFCQUNQLEVBRUFsVSxFQUFPRyxtQkFBcUIsV0FDMUIsSUFBSWtQLEVBQVkzekIsS0FBS2lRLE1BQU0wakIsVUFDdkI4RSxFQUFlejRCLEtBQUtzRyxNQUNwQnd0QixFQUFhMkUsRUFBYTNFLFdBQzFCNVEsRUFBWXVWLEVBQWF2VixVQUc3QixHQUYrQnVWLEVBQWE3QywwQkFFTSxNQUFsQjUxQixLQUFLdTFCLFVBQW1CLENBSXRELElBQUlrQyxFQUFXejNCLEtBQUt1MUIsVUFFcEIsR0FBa0IsUUFBZDVCLEVBQ0YsT0FBUUgsS0FDTixJQUFLLFdBQ0hpRSxFQUFTM0QsWUFBY0EsRUFDdkIsTUFFRixJQUFLLHFCQUNIMkQsRUFBUzNELFdBQWFBLEVBQ3RCLE1BRUYsUUFDRSxJQUFJVCxFQUFjb0UsRUFBU3BFLFlBQ3ZCK0QsRUFBY0ssRUFBU0wsWUFDM0JLLEVBQVMzRCxXQUFhc0QsRUFBYy9ELEVBQWNTLE9BSXREMkQsRUFBUzNELFdBQWFybUIsS0FBSzZpQixJQUFJLEVBQUd3RCxHQUdwQzJELEVBQVN2VSxVQUFZelYsS0FBSzZpQixJQUFJLEVBQUdwTixFQUNuQyxDQUVBbGpCLEtBQUt3NEIscUJBQ1AsRUFFQWxVLEVBQU9NLHFCQUF1QixXQUNZLE9BQXBDNWtCLEtBQUtzMUIsNEJBQ1BqRCxFQUFjcnlCLEtBQUtzMUIsMkJBRXZCLEVBRUFoUixFQUFPdUMsT0FBUyxXQUNkLElBQUk2UixFQUFlMTRCLEtBQUtpUSxNQUNwQnFDLEVBQVdvbUIsRUFBYXBtQixTQUN4QnFFLEVBQVkraEIsRUFBYS9oQixVQUN6QnNoQixFQUFjUyxFQUFhVCxZQUMzQnRFLEVBQVkrRSxFQUFhL0UsVUFDekJ0ZSxFQUFTcWpCLEVBQWFyakIsT0FDdEJzakIsRUFBV0QsRUFBYUMsU0FDeEJDLEVBQW1CRixFQUFhRSxpQkFDaENDLEVBQWVILEVBQWFHLGFBQzVCQyxFQUFXSixFQUFhSSxTQUN4QkMsRUFBdUJMLEVBQWFNLFFBQ3BDQSxPQUFtQyxJQUF6QkQsRUFBa0MvRSxFQUFpQitFLEVBQzdERSxFQUFtQlAsRUFBYU8saUJBQ2hDQyxFQUFlUixFQUFhUSxhQUM1QmhCLEVBQVdRLEVBQWFSLFNBQ3hCampCLEVBQVF5akIsRUFBYXpqQixNQUNyQmtrQixFQUFpQlQsRUFBYVMsZUFDOUIvakIsRUFBUXNqQixFQUFhdGpCLE1BQ3JCb2dCLEVBQWN4MUIsS0FBS3NHLE1BQU1rdkIsWUFFekI0RCxFQUF3QnA1QixLQUFLcTVCLDhCQUM3QkMsRUFBbUJGLEVBQXNCLEdBQ3pDRyxFQUFrQkgsRUFBc0IsR0FFeENJLEVBQXdCeDVCLEtBQUt5NUIsNEJBQzdCQyxFQUFnQkYsRUFBc0IsR0FDdENHLEVBQWVILEVBQXNCLEdBRXJDSSxFQUFRLEdBRVosR0FBSTNCLEVBQWMsR0FBS0MsRUFDckIsSUFBSyxJQUFJMkIsRUFBWUgsRUFBZUcsR0FBYUYsRUFBY0UsSUFDN0QsSUFBSyxJQUFJQyxFQUFlUixFQUFrQlEsR0FBZ0JQLEVBQWlCTyxJQUN6RUYsRUFBTXYzQixNQUFLLElBQUF1TyxlQUFjMEIsRUFBVSxDQUNqQzJoQixZQUFhNkYsRUFDYmwzQixLQUFNazJCLEVBQ050RCxZQUFhMkQsRUFBaUIzRCxPQUFjM3lCLEVBQzVDbEQsSUFBS3E1QixFQUFRLENBQ1gvRSxZQUFhNkYsRUFDYmwzQixLQUFNazJCLEVBQ041RSxTQUFVMkYsSUFFWjNGLFNBQVUyRixFQUNWNWtCLE1BQU9qVixLQUFLeTJCLGNBQWNvRCxFQUFXQyxNQVE3QyxJQUFJMUIsRUFBdUIzRCxFQUF3QnowQixLQUFLaVEsTUFBT2pRLEtBQUtxMUIsZ0JBQ2hFMEUsRUFBc0JyRixFQUF1QjEwQixLQUFLaVEsTUFBT2pRLEtBQUtxMUIsZ0JBQ2xFLE9BQU8sSUFBQXprQixlQUFjcW9CLEdBQW9CQyxHQUFnQixNQUFPLENBQzlEdmlCLFVBQVdBLEVBQ1g2ZixTQUFVeDJCLEtBQUtnM0IsVUFDZmgyQixJQUFLaEIsS0FBS3czQixnQkFDVnZpQixPQUFPLE9BQVMsQ0FDZDJCLFNBQVUsV0FDVnZCLE9BQVFBLEVBQ1JELE1BQU9BLEVBQ1A4ZCxTQUFVLE9BQ1Y4Ryx3QkFBeUIsUUFDekJDLFdBQVksWUFDWnRHLFVBQVdBLEdBQ1YxZSxLQUNGLElBQUFyRSxlQUFjZ29CLEdBQW9CQyxHQUFnQixNQUFPLENBQzFEdm1CLFNBQVVzbkIsRUFDVjU0QixJQUFLMjNCLEVBQ0wxakIsTUFBTyxDQUNMSSxPQUFRK2lCLEVBQ1JyaEIsY0FBZXllLEVBQWMsWUFBUzN5QixFQUN0Q3VTLE1BQU8ya0IsS0FHYixFQUVBelYsRUFBT2tVLG9CQUFzQixXQUMzQixJQUFJMEIsRUFBZWw2QixLQUFLaVEsTUFDcEJnb0IsRUFBY2lDLEVBQWFqQyxZQUMzQjNJLEVBQWtCNEssRUFBYTVLLGdCQUMvQmtILEVBQVcwRCxFQUFhMUQsU0FDeEIwQixFQUFXZ0MsRUFBYWhDLFNBRTVCLEdBQStCLG1CQUFwQjVJLEdBQ0wySSxFQUFjLEdBQUtDLEVBQVcsRUFBRyxDQUNuQyxJQUFJaUMsRUFBeUJuNkIsS0FBS3E1Qiw4QkFDOUJlLEVBQTRCRCxFQUF1QixHQUNuREUsRUFBMkJGLEVBQXVCLEdBQ2xERyxFQUEyQkgsRUFBdUIsR0FDbERJLEVBQTBCSixFQUF1QixHQUVqREssRUFBeUJ4NkIsS0FBS3k1Qiw0QkFDOUJnQixFQUF5QkQsRUFBdUIsR0FDaERFLEVBQXdCRixFQUF1QixHQUMvQ0csRUFBd0JILEVBQXVCLEdBQy9DSSxFQUF1QkosRUFBdUIsR0FFbER4NkIsS0FBSzgxQixxQkFBcUJzRSxFQUEyQkMsRUFBMEJJLEVBQXdCQyxFQUF1QkosRUFBMEJDLEVBQXlCSSxFQUF1QkMsRUFDMU0sQ0FHRixHQUF3QixtQkFBYnBFLEVBQXlCLENBQ2xDLElBQUlxRSxFQUFlNzZCLEtBQUtzRyxNQUNwQncwQixFQUE2QkQsRUFBYXBGLDBCQUMxQ3NGLEVBQWNGLEVBQWEvRyxXQUMzQmtILEVBQWFILEVBQWEzWCxVQUMxQitYLEVBQTRCSixFQUFhakYseUJBQ3pDc0YsRUFBMkJMLEVBQWFoRix3QkFFNUM3MUIsS0FBS3UyQixjQUFjd0UsRUFBYUMsRUFBWUYsRUFBNEJJLEVBQTBCRCxFQUNwRyxDQUNGLEVBTUEzVyxFQUFPK1UsNEJBQThCLFdBQ25DLElBQUk4QixFQUFlbjdCLEtBQUtpUSxNQUNwQmdvQixFQUFja0QsRUFBYWxELFlBQzNCbUQsRUFBc0JELEVBQWFDLG9CQUNuQ0MsRUFBdUJGLEVBQWFFLHFCQUNwQ0MsRUFBZ0JILEVBQWFHLGNBQzdCcEQsRUFBV2lELEVBQWFqRCxTQUN4QnFELEVBQWV2N0IsS0FBS3NHLE1BQ3BCbXZCLEVBQTRCOEYsRUFBYTlGLDBCQUN6Q0QsRUFBYytGLEVBQWEvRixZQUMzQjFCLEVBQWF5SCxFQUFhekgsV0FDMUIwSCxFQUF3QkosR0FBdUJDLEdBQXdCQyxHQUFpQixFQUU1RixHQUFvQixJQUFoQnJELEdBQWtDLElBQWJDLEVBQ3ZCLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUduQixJQUFJM0ksRUFBYStFLEVBQTZCdDBCLEtBQUtpUSxNQUFPNmpCLEVBQVk5ekIsS0FBS3ExQixnQkFDdkU3RixFQUFZK0UsRUFBZ0N2MEIsS0FBS2lRLE1BQU9zZixFQUFZdUUsRUFBWTl6QixLQUFLcTFCLGdCQUdyRm9HLEVBQW9CakcsR0FBNkMsYUFBOUJDLEVBQWdGLEVBQXJDaG9CLEtBQUs2aUIsSUFBSSxFQUFHa0wsR0FDMUZFLEVBQW1CbEcsR0FBNkMsWUFBOUJDLEVBQStFLEVBQXJDaG9CLEtBQUs2aUIsSUFBSSxFQUFHa0wsR0FDNUYsTUFBTyxDQUFDL3RCLEtBQUs2aUIsSUFBSSxFQUFHZixFQUFha00sR0FBbUJodUIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJNEgsRUFBYyxFQUFHekksRUFBWWtNLElBQW1Cbk0sRUFBWUMsRUFDdkksRUFFQWxMLEVBQU9tViwwQkFBNEIsV0FDakMsSUFBSWtDLEVBQWUzN0IsS0FBS2lRLE1BQ3BCZ29CLEVBQWMwRCxFQUFhMUQsWUFDM0JxRCxFQUFnQkssRUFBYUwsY0FDN0JNLEVBQW1CRCxFQUFhQyxpQkFDaENDLEVBQW9CRixFQUFhRSxrQkFDakMzRCxFQUFXeUQsRUFBYXpELFNBQ3hCNEQsRUFBZTk3QixLQUFLc0csTUFDcEJrdkIsRUFBY3NHLEVBQWF0RyxZQUMzQkssRUFBMEJpRyxFQUFhakcsd0JBQ3ZDM1MsRUFBWTRZLEVBQWE1WSxVQUN6QnNZLEVBQXdCSSxHQUFvQkMsR0FBcUJQLEdBQWlCLEVBRXRGLEdBQW9CLElBQWhCckQsR0FBa0MsSUFBYkMsRUFDdkIsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBR25CLElBQUkzSSxFQUFhd0YsRUFBMEIvMEIsS0FBS2lRLE1BQU9pVCxFQUFXbGpCLEtBQUtxMUIsZ0JBQ25FN0YsRUFBWXdGLEVBQTZCaDFCLEtBQUtpUSxNQUFPc2YsRUFBWXJNLEVBQVdsakIsS0FBS3ExQixnQkFHakZvRyxFQUFvQmpHLEdBQTJDLGFBQTVCSyxFQUE4RSxFQUFyQ3BvQixLQUFLNmlCLElBQUksRUFBR2tMLEdBQ3hGRSxFQUFtQmxHLEdBQTJDLFlBQTVCSyxFQUE2RSxFQUFyQ3BvQixLQUFLNmlCLElBQUksRUFBR2tMLEdBQzFGLE1BQU8sQ0FBQy90QixLQUFLNmlCLElBQUksRUFBR2YsRUFBYWtNLEdBQW1CaHVCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSTZILEVBQVcsRUFBRzFJLEVBQVlrTSxJQUFtQm5NLEVBQVlDLEVBQ3BJLEVBRU80RixDQUNULENBbGU2QixDQWtlM0IsRUFBQS9ELGdCQUF1Qm5LLGFBQWUsQ0FDdEN5TSxVQUFXLE1BQ1htRixjQUFVajJCLEVBQ1ZzMkIsZ0JBQWdCLEdBQ2YvRSxDQUNMLENBRUEsSUFBSXVELEVBQXNCLFNBQTZCb0UsRUFBT0MsR0FDN0NELEVBQU16cEIsU0FDTHlwQixFQUFNcEksVUFDVG9JLEVBQU0xbUIsT0FDQTBtQixFQUFNbEQsYUFDTmtELEVBQU03QyxhQUNFNkMsRUFBTVYscUJBQ2JVLEVBQU1ULGNBQ0ZTLEVBQU1GLGtCQUNsQkUsRUFBTTNtQixNQUNING1CLEVBQU0xTixRQThDdkIsRUFJSW1HLEVBQTBCLFNBQWlDN1csRUFBTWtFLEdBQ25FLElBQUlvVyxFQUFXdGEsRUFBS3NhLFNBQ2hCK0QsRUFBaUJuYSxFQUFNbWEsZUFDdkJDLEVBQXFCcGEsRUFBTW9hLG1CQUMzQkMsRUFBdUJyYSxFQUFNcWEscUJBQzdCQyxFQUEwQixFQU85QixHQUpJRCxHQUF3QmpFLElBQzFCaUUsRUFBdUJqRSxFQUFXLEdBR2hDaUUsR0FBd0IsRUFBRyxDQUM3QixJQUFJRSxFQUFlSixFQUFlRSxHQUNsQ0MsRUFBMEJDLEVBQWFDLE9BQVNELEVBQWF2SixJQUMvRCxDQUlBLE9BQU9zSixHQUZrQmxFLEVBQVdpRSxFQUF1QixHQUNMRCxDQUV4RCxFQUVJeEgsRUFBeUIsU0FBZ0MvTixFQUFPd0csR0FDbEUsSUFBSThLLEVBQWN0UixFQUFNc1IsWUFDcEJzRSxFQUFvQnBQLEVBQU1vUCxrQkFDMUJDLEVBQXVCclAsRUFBTXFQLHFCQUM3QkMsRUFBMEJ0UCxFQUFNc1Asd0JBQ2hDTCxFQUEwQixFQU85QixHQUpJSyxHQUEyQnhFLElBQzdCd0UsRUFBMEJ4RSxFQUFjLEdBR3RDd0UsR0FBMkIsRUFBRyxDQUNoQyxJQUFJSixFQUFlRSxFQUFrQkUsR0FDckNMLEVBQTBCQyxFQUFhQyxPQUFTRCxFQUFhdkosSUFDL0QsQ0FJQSxPQUFPc0osR0FGa0JuRSxFQUFjd0UsRUFBMEIsR0FDWEQsQ0FFeEQsRUFFSUUsRUFBa0IsU0FBeUJDLEVBQVUxc0IsRUFBT2hKLEVBQU8yMUIsR0FDckUsSUFBSUMsRUFBaUJDLEVBQVVDLEVBWS9CLEdBVmlCLFdBQWJKLEdBQ0ZFLEVBQWtCRCxFQUFjTCxrQkFDaENPLEVBQVc3c0IsRUFBTXltQixZQUNqQnFHLEVBQW9CSCxFQUFjSCwwQkFFbENJLEVBQWtCRCxFQUFjWCxlQUNoQ2EsRUFBVzdzQixFQUFNMG1CLFVBQ2pCb0csRUFBb0JILEVBQWNULHNCQUdoQ2wxQixFQUFRODFCLEVBQW1CLENBQzdCLElBQUlULEVBQVMsRUFFYixHQUFJUyxHQUFxQixFQUFHLENBQzFCLElBQUlWLEVBQWVRLEVBQWdCRSxHQUNuQ1QsRUFBU0QsRUFBYUMsT0FBU0QsRUFBYXZKLElBQzlDLENBRUEsSUFBSyxJQUFJdnpCLEVBQUl3OUIsRUFBb0IsRUFBR3g5QixHQUFLMEgsRUFBTzFILElBQUssQ0FDbkQsSUFBSXV6QixFQUFPZ0ssRUFBU3Y5QixHQUNwQnM5QixFQUFnQnQ5QixHQUFLLENBQ25CKzhCLE9BQVFBLEVBQ1J4SixLQUFNQSxHQUVSd0osR0FBVXhKLENBQ1osQ0FFaUIsV0FBYjZKLEVBQ0ZDLEVBQWNILHdCQUEwQngxQixFQUV4QzIxQixFQUFjVCxxQkFBdUJsMUIsQ0FFekMsQ0FFQSxPQUFPNDFCLEVBQWdCNTFCLEVBQ3pCLEVBRUkrMUIsRUFBa0IsU0FBeUJMLEVBQVUxc0IsRUFBTzJzQixFQUFlTixHQUM3RSxJQUFJTyxFQUFpQkUsRUFZckIsTUFWaUIsV0FBYkosR0FDRkUsRUFBa0JELEVBQWNMLGtCQUNoQ1EsRUFBb0JILEVBQWNILDBCQUVsQ0ksRUFBa0JELEVBQWNYLGVBQ2hDYyxFQUFvQkgsRUFBY1QsdUJBR1BZLEVBQW9CLEVBQUlGLEVBQWdCRSxHQUFtQlQsT0FBUyxJQUVuRUEsRUFFckJXLEVBQTRCTixFQUFVMXNCLEVBQU8yc0IsRUFBZUcsRUFBbUIsRUFBR1QsR0FLbEZZLEVBQWlDUCxFQUFVMXNCLEVBQU8yc0IsRUFBZW52QixLQUFLNmlCLElBQUksRUFBR3lNLEdBQW9CVCxFQUU1RyxFQUVJVyxFQUE4QixTQUFxQ04sRUFBVTFzQixFQUFPMnNCLEVBQWVPLEVBQU1DLEVBQUtkLEdBQ2hILEtBQU9jLEdBQU9ELEdBQU0sQ0FDbEIsSUFBSUUsRUFBU0QsRUFBTTN2QixLQUFLNnZCLE9BQU9ILEVBQU9DLEdBQU8sR0FDekNHLEVBQWdCYixFQUFnQkMsRUFBVTFzQixFQUFPb3RCLEVBQVFULEdBQWVOLE9BRTVFLEdBQUlpQixJQUFrQmpCLEVBQ3BCLE9BQU9lLEVBQ0VFLEVBQWdCakIsRUFDekJjLEVBQU1DLEVBQVMsRUFDTkUsRUFBZ0JqQixJQUN6QmEsRUFBT0UsRUFBUyxFQUVwQixDQUVBLE9BQUlELEVBQU0sRUFDREEsRUFBTSxFQUVOLENBRVgsRUFFSUYsRUFBbUMsU0FBMENQLEVBQVUxc0IsRUFBTzJzQixFQUFlMzFCLEVBQU9xMUIsR0FJdEgsSUFIQSxJQUFJM00sRUFBeUIsV0FBYmdOLEVBQXdCMXNCLEVBQU1nb0IsWUFBY2hvQixFQUFNaW9CLFNBQzlEc0YsRUFBVyxFQUVSdjJCLEVBQVEwb0IsR0FBYStNLEVBQWdCQyxFQUFVMXNCLEVBQU9oSixFQUFPMjFCLEdBQWVOLE9BQVNBLEdBQzFGcjFCLEdBQVN1MkIsRUFDVEEsR0FBWSxFQUdkLE9BQU9QLEVBQTRCTixFQUFVMXNCLEVBQU8yc0IsRUFBZW52QixLQUFLNGlCLElBQUlwcEIsRUFBTzBvQixFQUFZLEdBQUlsaUIsS0FBSzZ2QixNQUFNcjJCLEVBQVEsR0FBSXExQixFQUM1SCxFQUVJbUIsRUFBZ0MsU0FBdUNkLEVBQVUxc0IsRUFBT2hKLEVBQU84d0IsRUFBTzJGLEVBQWNkLEVBQWV6RSxHQUNySSxJQUFJckYsRUFBb0IsV0FBYjZKLEVBQXdCMXNCLEVBQU1tRixNQUFRbkYsRUFBTW9GLE9BQ25EZ25CLEVBQWVLLEVBQWdCQyxFQUFVMXNCLEVBQU9oSixFQUFPMjFCLEdBR3ZEZSxFQUFrQyxXQUFiaEIsRUFBd0JqSSxFQUF1QnprQixFQUFPMnNCLEdBQWlCbkksRUFBd0J4a0IsRUFBTzJzQixHQUMzSGdCLEVBQVlud0IsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJc04sRUFBcUI3SyxFQUFNdUosRUFBYUMsU0FDekV1QixFQUFZcHdCLEtBQUs2aUIsSUFBSSxFQUFHK0wsRUFBYUMsT0FBU3hKLEVBQU9xRixFQUFnQmtFLEVBQWF2SixNQVV0RixPQVJjLFVBQVZpRixJQUVBQSxFQURFMkYsR0FBZ0JHLEVBQVkvSyxHQUFRNEssR0FBZ0JFLEVBQVk5SyxFQUMxRCxPQUVBLFVBSUppRixHQUNOLElBQUssUUFDSCxPQUFPNkYsRUFFVCxJQUFLLE1BQ0gsT0FBT0MsRUFFVCxJQUFLLFNBQ0gsT0FBT3B3QixLQUFLcXdCLE1BQU1ELEdBQWFELEVBQVlDLEdBQWEsR0FHMUQsUUFDRSxPQUFJSCxHQUFnQkcsR0FBYUgsR0FBZ0JFLEVBQ3hDRixFQUNFRyxFQUFZRCxHQUlaRixFQUFlRyxFQURqQkEsRUFJQUQsRUFJZixFQUVJRyxFQUFnQzVKLEVBQW9CLENBQ3RERSxnQkFBaUIsU0FBeUJwa0IsRUFBT2hKLEVBQU8yMUIsR0FDdEQsT0FBT0YsRUFBZ0IsU0FBVXpzQixFQUFPaEosRUFBTzIxQixHQUFlTixNQUNoRSxFQUNBaEksNkJBQThCLFNBQXNDcmtCLEVBQU82akIsRUFBWThJLEdBQ3JGLE9BQU9JLEVBQWdCLFNBQVUvc0IsRUFBTzJzQixFQUFlOUksRUFDekQsRUFDQVMsZ0NBQWlDLFNBQXlDdGtCLEVBQU9zZixFQUFZdUUsRUFBWThJLEdBUXZHLElBUEEsSUFBSTNFLEVBQWNob0IsRUFBTWdvQixZQUNwQjdpQixFQUFRbkYsRUFBTW1GLE1BQ2RpbkIsRUFBZUssRUFBZ0IsU0FBVXpzQixFQUFPc2YsRUFBWXFOLEdBQzVEZ0IsRUFBWTlKLEVBQWExZSxFQUN6QmtuQixFQUFTRCxFQUFhQyxPQUFTRCxFQUFhdkosS0FDNUN0RCxFQUFZRCxFQUVUQyxFQUFZeUksRUFBYyxHQUFLcUUsRUFBU3NCLEdBQzdDcE8sSUFDQThNLEdBQVVJLEVBQWdCLFNBQVV6c0IsRUFBT3VmLEVBQVdvTixHQUFlOUosS0FHdkUsT0FBT3RELENBQ1QsRUFDQWdGLGVBQWdCLFNBQXdCdmtCLEVBQU9oSixFQUFPMjFCLEdBQ3BELE9BQU9BLEVBQWNMLGtCQUFrQnQxQixHQUFPNnJCLElBQ2hELEVBQ0EyQix3QkFBeUJBLEVBQ3pCQyx1QkFBd0JBLEVBQ3hCQywrQkFBZ0MsU0FBd0Mxa0IsRUFBT2hKLEVBQU84d0IsRUFBTzJGLEVBQWNkLEVBQWV6RSxHQUN4SCxPQUFPc0YsRUFBOEIsU0FBVXh0QixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEVBQ25HLEVBQ0F2RCw0QkFBNkIsU0FBcUMza0IsRUFBT2hKLEVBQU84d0IsRUFBTzJGLEVBQWNkLEVBQWV6RSxHQUNsSCxPQUFPc0YsRUFBOEIsTUFBT3h0QixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEVBQ2hHLEVBQ0FyRCxhQUFjLFNBQXNCN2tCLEVBQU9oSixFQUFPMjFCLEdBQ2hELE9BQU9GLEVBQWdCLE1BQU96c0IsRUFBT2hKLEVBQU8yMUIsR0FBZU4sTUFDN0QsRUFDQXpILGFBQWMsU0FBc0I1a0IsRUFBT2hKLEVBQU8yMUIsR0FDaEQsT0FBT0EsRUFBY1gsZUFBZWgxQixHQUFPNnJCLElBQzdDLEVBQ0FpQywwQkFBMkIsU0FBbUM5a0IsRUFBT2lULEVBQVcwWixHQUM5RSxPQUFPSSxFQUFnQixNQUFPL3NCLEVBQU8yc0IsRUFBZTFaLEVBQ3RELEVBQ0E4Uiw2QkFBOEIsU0FBc0Mva0IsRUFBT3NmLEVBQVlyTSxFQUFXMFosR0FRaEcsSUFQQSxJQUFJMUUsRUFBV2pvQixFQUFNaW9CLFNBQ2pCN2lCLEVBQVNwRixFQUFNb0YsT0FDZmduQixFQUFlSyxFQUFnQixNQUFPenNCLEVBQU9zZixFQUFZcU4sR0FDekRnQixFQUFZMWEsRUFBWTdOLEVBQ3hCaW5CLEVBQVNELEVBQWFDLE9BQVNELEVBQWF2SixLQUM1Q3RELEVBQVlELEVBRVRDLEVBQVkwSSxFQUFXLEdBQUtvRSxFQUFTc0IsR0FDMUNwTyxJQUNBOE0sR0FBVUksRUFBZ0IsTUFBT3pzQixFQUFPdWYsRUFBV29OLEdBQWU5SixLQUdwRSxPQUFPdEQsQ0FDVCxFQUNBeUYsa0JBQW1CLFNBQTJCaGxCLEVBQU9xZSxHQUNuRCxJQUFJeU4sRUFBUTlyQixFQUdSMnNCLEVBQWdCLENBQ2xCTCxrQkFBbUIsQ0FBQyxFQUNwQkMscUJBSnlCVCxFQUFNUyxzQkF0UEgsR0EyUDVCTixtQkFKdUJILEVBQU1HLG9CQXZQRCxHQTRQNUJPLHlCQUEwQixFQUMxQk4sc0JBQXVCLEVBQ3ZCRixlQUFnQixDQUFDLEdBa0RuQixPQS9DQTNOLEVBQVMwUCxzQkFBd0IsU0FBVS9KLEVBQWFnSyxRQUM1QixJQUF0QkEsSUFDRkEsR0FBb0IsR0FHdEIzUCxFQUFTNFAsa0JBQWtCLENBQ3pCakssWUFBYUEsRUFDYmdLLGtCQUFtQkEsR0FFdkIsRUFFQTNQLEVBQVM2UCxtQkFBcUIsU0FBVWpLLEVBQVUrSixRQUN0QixJQUF0QkEsSUFDRkEsR0FBb0IsR0FHdEIzUCxFQUFTNFAsa0JBQWtCLENBQ3pCaEssU0FBVUEsRUFDVitKLGtCQUFtQkEsR0FFdkIsRUFFQTNQLEVBQVM0UCxrQkFBb0IsU0FBVWxDLEdBQ3JDLElBQUkvSCxFQUFjK0gsRUFBTS9ILFlBQ3BCQyxFQUFXOEgsRUFBTTlILFNBQ2pCa0ssRUFBd0JwQyxFQUFNaUMsa0JBQzlCQSxPQUE4QyxJQUExQkcsR0FBMENBLEVBRXZDLGlCQUFoQm5LLElBQ1QySSxFQUFjSCx3QkFBMEJodkIsS0FBSzRpQixJQUFJdU0sRUFBY0gsd0JBQXlCeEksRUFBYyxJQUdoRixpQkFBYkMsSUFDVDBJLEVBQWNULHFCQUF1QjF1QixLQUFLNGlCLElBQUl1TSxFQUFjVCxxQkFBc0JqSSxFQUFXLElBTy9GNUYsRUFBUzZDLG9CQUFvQixHQUV6QjhNLEdBQ0YzUCxFQUFTOEMsYUFFYixFQUVPd0wsQ0FDVCxFQUNBMUgsdUNBQXVDLEVBQ3ZDQyxjQUFlLFNBQXVCa0osR0FDbEJBLEVBQU0zSCxZQUNSMkgsRUFBTTFILFNBU3hCLElBR0UySCxFQUFtQyxJQUVuQ0MsRUFBbUIsU0FBd0J0M0IsRUFBT3JFLEdBQ3BELE9BQU9xRSxDQUNULEVBY0EsU0FBU3UzQixFQUFvQjVnQixHQUMzQixJQUFJd1csRUFFQXFLLEVBQWdCN2dCLEVBQUs2Z0IsY0FDckJDLEVBQXdCOWdCLEVBQUs4Z0Isc0JBQzdCQyxFQUFjL2dCLEVBQUsrZ0IsWUFDbkJsQixFQUFnQzdmLEVBQUs2Ziw4QkFDckNtQixFQUF5QmhoQixFQUFLZ2hCLHVCQUM5QkMsRUFBNEJqaEIsRUFBS2loQiwwQkFDakM1SixFQUFvQnJYLEVBQUtxWCxrQkFDekJDLEVBQXdDdFgsRUFBS3NYLHNDQUM3Q0MsRUFBZ0J2WCxFQUFLdVgsY0FDekIsT0FBT2YsRUFBc0IsU0FBVWhHLEdBTXJDLFNBQVMwUSxFQUFLN3VCLEdBQ1osSUFBSXhOLEVBMEtKLE9BeEtBQSxFQUFRMnJCLEVBQWV0dUIsS0FBS0UsS0FBTWlRLElBQVVqUSxNQUN0Q3ExQixlQUFpQkosRUFBa0J4eUIsRUFBTXdOLE9BQU8sT0FBdUJ4TixJQUM3RUEsRUFBTTh5QixlQUFZLEVBQ2xCOXlCLEVBQU02eUIsMkJBQTZCLEtBQ25DN3lCLEVBQU02RCxNQUFRLENBQ1pnb0IsVUFBVSxPQUF1QjdyQixHQUNqQyt5QixhQUFhLEVBQ2J1SixnQkFBaUIsVUFDakJyQixhQUF5RCxpQkFBcENqN0IsRUFBTXdOLE1BQU0rdUIsb0JBQW1DdjhCLEVBQU13TixNQUFNK3VCLG9CQUFzQixFQUN0R3BKLDBCQUEwQixHQUU1Qm56QixFQUFNcXpCLDBCQUF1QixFQUM3QnJ6QixFQUFNcXpCLHFCQUF1QixHQUFXLFNBQVVtSixFQUFvQkMsRUFBbUJyUSxFQUFtQkMsR0FDMUcsT0FBT3JzQixFQUFNd04sTUFBTXFmLGdCQUFnQixDQUNqQzJQLG1CQUFvQkEsRUFDcEJDLGtCQUFtQkEsRUFDbkJyUSxrQkFBbUJBLEVBQ25CQyxpQkFBa0JBLEdBRXRCLElBQ0Fyc0IsRUFBTTh6QixtQkFBZ0IsRUFDdEI5ekIsRUFBTTh6QixjQUFnQixHQUFXLFNBQVV3SSxFQUFpQnJCLEVBQWM5SCxHQUN4RSxPQUFPbnpCLEVBQU13TixNQUFNdW1CLFNBQVMsQ0FDMUJ1SSxnQkFBaUJBLEVBQ2pCckIsYUFBY0EsRUFDZDlILHlCQUEwQkEsR0FFOUIsSUFDQW56QixFQUFNZzBCLG1CQUFnQixFQUV0QmgwQixFQUFNZzBCLGNBQWdCLFNBQVV4dkIsR0FDOUIsSUFPSWdPLEVBUEE2UixFQUFjcmtCLEVBQU13TixNQUNwQjBqQixFQUFZN00sRUFBWTZNLFVBQ3hCbUosRUFBV2hXLEVBQVlnVyxTQUN2QnFDLEVBQVNyWSxFQUFZcVksT0FFckJ2SSxFQUFpQm4wQixFQUFNMHVCLG1CQUFtQitELEdBQXlDNEgsRUFBVTVILEdBQXlDaUssRUFBUWpLLEdBQXlDdkIsR0FJM0wsR0FBSWlELEVBQWUvMkIsZUFBZW9ILEdBQ2hDZ08sRUFBUTJoQixFQUFlM3ZCLE9BQ2xCLENBQ0wsSUFBSTR2QixFQUFVNEgsRUFBY2g4QixFQUFNd04sTUFBT2hKLEVBQU94RSxFQUFNNHlCLGdCQUVsRHZDLEVBQU82TCxFQUFZbDhCLEVBQU13TixNQUFPaEosRUFBT3hFLEVBQU00eUIsZ0JBRTdDK0osRUFBNkIsZUFBZHpMLEdBQXlDLGVBQVh3TCxFQUM3Q3JJLEVBQXNCLFFBQWRuRCxFQUNSMEwsRUFBbUJELEVBQWV2SSxFQUFVLEVBQ2hERCxFQUFlM3ZCLEdBQVNnTyxFQUFRLENBQzlCMkIsU0FBVSxXQUNWUyxLQUFNeWYsT0FBUWowQixFQUFZdzhCLEVBQzFCNWtCLE1BQU9xYyxFQUFRdUksT0FBbUJ4OEIsRUFDbEN1VSxJQUFNZ29CLEVBQXlCLEVBQVZ2SSxFQUNyQnhoQixPQUFTK3BCLEVBQXNCLE9BQVB0TSxFQUN4QjFkLE1BQU9ncUIsRUFBZXRNLEVBQU8sT0FFakMsQ0FFQSxPQUFPN2QsQ0FDVCxFQUVBeFMsRUFBTTB1Qix3QkFBcUIsRUFDM0IxdUIsRUFBTTB1QixtQkFBcUIsR0FBVyxTQUFVbHRCLEVBQUdpSixFQUFJNnBCLEdBQ3JELE1BQU8sQ0FBQyxDQUNWLElBRUF0MEIsRUFBTTY4QixvQkFBc0IsU0FBVWwrQixHQUNwQyxJQUFJNjFCLEVBQXVCNzFCLEVBQU1tVixjQUM3QjhjLEVBQWM0RCxFQUFxQjVELFlBQ25DUyxFQUFhbUQsRUFBcUJuRCxXQUNsQ3NELEVBQWNILEVBQXFCRyxZQUV2QzMwQixFQUFNMmlCLFVBQVMsU0FBVWYsR0FDdkIsR0FBSUEsRUFBVXFaLGVBQWlCNUosRUFJN0IsT0FBTyxLQUdULElBQUlILEVBQVlseEIsRUFBTXdOLE1BQU0wakIsVUFDeEIrSixFQUFlNUosRUFFbkIsR0FBa0IsUUFBZEgsRUFLRixPQUFRSCxLQUNOLElBQUssV0FDSGtLLEdBQWdCNUosRUFDaEIsTUFFRixJQUFLLHNCQUNINEosRUFBZXRHLEVBQWMvRCxFQUFjUyxFQU9qRCxPQURBNEosRUFBZWp3QixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlxTixFQUFjdEcsRUFBYy9ELElBQ3pELENBQ0xtQyxhQUFhLEVBQ2J1SixnQkFBaUIxYSxFQUFVcVosYUFBZTVKLEVBQWEsVUFBWSxXQUNuRTRKLGFBQWNBLEVBQ2Q5SCwwQkFBMEIsRUFFOUIsR0FBR256QixFQUFNODBCLDJCQUNYLEVBRUE5MEIsRUFBTTg4QixrQkFBb0IsU0FBVW4rQixHQUNsQyxJQUFJbytCLEVBQXdCcCtCLEVBQU1tVixjQUM5QjJnQixFQUFlc0ksRUFBc0J0SSxhQUNyQ0MsRUFBZXFJLEVBQXNCckksYUFDckNqVSxFQUFZc2MsRUFBc0J0YyxVQUV0Q3pnQixFQUFNMmlCLFVBQVMsU0FBVWYsR0FDdkIsR0FBSUEsRUFBVXFaLGVBQWlCeGEsRUFJN0IsT0FBTyxLQUlULElBQUl3YSxFQUFlandCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSW5OLEVBQVdpVSxFQUFlRCxJQUNsRSxNQUFPLENBQ0wxQixhQUFhLEVBQ2J1SixnQkFBaUIxYSxFQUFVcVosYUFBZUEsRUFBZSxVQUFZLFdBQ3JFQSxhQUFjQSxFQUNkOUgsMEJBQTBCLEVBRTlCLEdBQUduekIsRUFBTTgwQiwyQkFDWCxFQUVBOTBCLEVBQU0rMEIsZ0JBQWtCLFNBQVV4MkIsR0FDaEMsSUFBSXkyQixFQUFXaDFCLEVBQU13TixNQUFNd25CLFNBQzNCaDFCLEVBQU04eUIsVUFBWXYwQixFQUVNLG1CQUFieTJCLEVBQ1RBLEVBQVN6MkIsR0FDWSxNQUFaeTJCLEdBQXdDLGlCQUFiQSxHQUF5QkEsRUFBUzUzQixlQUFlLGFBQ3JGNDNCLEVBQVNwMkIsUUFBVUwsRUFFdkIsRUFFQXlCLEVBQU04MEIsMkJBQTZCLFdBQ1EsT0FBckM5MEIsRUFBTTZ5Qiw0QkFDUmpELEVBQWM1dkIsRUFBTTZ5Qiw0QkFHdEI3eUIsRUFBTTZ5QiwyQkFBNkI3QyxFQUFlaHdCLEVBQU1pMUIsa0JBQW1CNEcsRUFDN0UsRUFFQTc3QixFQUFNaTFCLGtCQUFvQixXQUN4QmoxQixFQUFNNnlCLDJCQUE2QixLQUVuQzd5QixFQUFNMmlCLFNBQVMsQ0FDYm9RLGFBQWEsSUFDWixXQUdEL3lCLEVBQU0wdUIsb0JBQW9CLEVBQUcsS0FDL0IsR0FDRixFQUVPMXVCLENBQ1QsRUFqTEEsT0FBZXE4QixFQUFNMVEsR0FtTHJCMFEsRUFBSzFhLHlCQUEyQixTQUFrQ2lGLEVBQVdoRixHQUczRSxPQUZBb2IsRUFBc0JwVyxFQUFXaEYsR0FDakM4USxFQUFjOUwsR0FDUCxJQUNULEVBRUEsSUFBSS9FLEVBQVN3YSxFQUFLbC9CLFVBd09sQixPQXRPQTBrQixFQUFPc1QsU0FBVyxTQUFrQjhGLEdBQ2xDQSxFQUFlandCLEtBQUs2aUIsSUFBSSxFQUFHb04sR0FDM0IxOUIsS0FBS29sQixVQUFTLFNBQVVmLEdBQ3RCLE9BQUlBLEVBQVVxWixlQUFpQkEsRUFDdEIsS0FHRixDQUNMcUIsZ0JBQWlCMWEsRUFBVXFaLGFBQWVBLEVBQWUsVUFBWSxXQUNyRUEsYUFBY0EsRUFDZDlILDBCQUEwQixFQUU5QixHQUFHNTFCLEtBQUt1M0IsMkJBQ1YsRUFFQWpULEVBQU91VCxhQUFlLFNBQXNCNXdCLEVBQU84d0IsUUFDbkMsSUFBVkEsSUFDRkEsRUFBUSxRQUdWLElBQUlDLEVBQWVoNEIsS0FBS2lRLE1BQ3BCMGYsRUFBWXFJLEVBQWFySSxVQUN6QndQLEVBQVNuSCxFQUFhbUgsT0FDdEJ6QixFQUFlMTlCLEtBQUtzRyxNQUFNbzNCLGFBQzlCejJCLEVBQVF3RyxLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlwcEIsRUFBTzBvQixFQUFZLElBSWhELElBQUl3SSxFQUFnQixFQUVwQixHQUFJbjRCLEtBQUt1MUIsVUFBVyxDQUNsQixJQUFJa0MsRUFBV3ozQixLQUFLdTFCLFVBR2xCNEMsRUFEYSxhQUFYZ0gsRUFDYzFILEVBQVNMLFlBQWNLLEVBQVNwRSxZQUFjTixJQUFxQixFQUVuRTBFLEVBQVNOLGFBQWVNLEVBQVNQLGFBQWVuRSxJQUFxQixDQUV6RixDQUVBL3lCLEtBQUs0M0IsU0FBUzZGLEVBQThCejlCLEtBQUtpUSxNQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBYzE5QixLQUFLcTFCLGVBQWdCOEMsR0FDM0csRUFFQTdULEVBQU9DLGtCQUFvQixXQUN6QixJQUFJZ1UsRUFBZXY0QixLQUFLaVEsTUFDcEIwakIsRUFBWTRFLEVBQWE1RSxVQUN6QnFMLEVBQXNCekcsRUFBYXlHLG9CQUNuQ0csRUFBUzVHLEVBQWE0RyxPQUUxQixHQUFtQyxpQkFBeEJILEdBQXNELE1BQWxCaC9CLEtBQUt1MUIsVUFBbUIsQ0FDckUsSUFBSWtDLEVBQVd6M0IsS0FBS3UxQixVQUVGLGVBQWQ1QixHQUF5QyxlQUFYd0wsRUFDaEMxSCxFQUFTM0QsV0FBYWtMLEVBRXRCdkgsRUFBU3ZVLFVBQVk4YixDQUV6QixDQUVBaC9CLEtBQUt3NEIscUJBQ1AsRUFFQWxVLEVBQU9HLG1CQUFxQixXQUMxQixJQUFJaVUsRUFBZTE0QixLQUFLaVEsTUFDcEIwakIsRUFBWStFLEVBQWEvRSxVQUN6QndMLEVBQVN6RyxFQUFheUcsT0FDdEIxUixFQUFjenRCLEtBQUtzRyxNQUNuQm8zQixFQUFlalEsRUFBWWlRLGFBRy9CLEdBRitCalEsRUFBWW1JLDBCQUVPLE1BQWxCNTFCLEtBQUt1MUIsVUFBbUIsQ0FDdEQsSUFBSWtDLEVBQVd6M0IsS0FBS3UxQixVQUVwQixHQUFrQixlQUFkNUIsR0FBeUMsZUFBWHdMLEVBQ2hDLEdBQWtCLFFBQWR4TCxFQUlGLE9BQVFILEtBQ04sSUFBSyxXQUNIaUUsRUFBUzNELFlBQWM0SixFQUN2QixNQUVGLElBQUsscUJBQ0hqRyxFQUFTM0QsV0FBYTRKLEVBQ3RCLE1BRUYsUUFDRSxJQUFJckssRUFBY29FLEVBQVNwRSxZQUN2QitELEVBQWNLLEVBQVNMLFlBQzNCSyxFQUFTM0QsV0FBYXNELEVBQWMvRCxFQUFjcUssT0FJdERqRyxFQUFTM0QsV0FBYTRKLE9BR3hCakcsRUFBU3ZVLFVBQVl3YSxDQUV6QixDQUVBMTlCLEtBQUt3NEIscUJBQ1AsRUFFQWxVLEVBQU9NLHFCQUF1QixXQUNZLE9BQXBDNWtCLEtBQUtzMUIsNEJBQ1BqRCxFQUFjcnlCLEtBQUtzMUIsMkJBRXZCLEVBRUFoUixFQUFPdUMsT0FBUyxXQUNkLElBQUlxVCxFQUFlbDZCLEtBQUtpUSxNQUNwQnFDLEVBQVc0bkIsRUFBYTVuQixTQUN4QnFFLEVBQVl1akIsRUFBYXZqQixVQUN6QmdkLEVBQVl1RyxFQUFhdkcsVUFDekJ0ZSxFQUFTNmtCLEVBQWE3a0IsT0FDdEJzakIsRUFBV3VCLEVBQWF2QixTQUN4QkMsRUFBbUJzQixFQUFhdEIsaUJBQ2hDQyxFQUFlcUIsRUFBYXJCLGFBQzVCbEosRUFBWXVLLEVBQWF2SyxVQUN6Qm1KLEVBQVdvQixFQUFhcEIsU0FDeEI0RyxFQUF1QnhGLEVBQWFsQixRQUNwQ0EsT0FBbUMsSUFBekIwRyxFQUFrQ25CLEVBQW1CbUIsRUFDL0RQLEVBQVNqRixFQUFhaUYsT0FDdEJsRyxFQUFtQmlCLEVBQWFqQixpQkFDaENDLEVBQWVnQixFQUFhaEIsYUFDNUJqa0IsRUFBUWlsQixFQUFhamxCLE1BQ3JCa2tCLEVBQWlCZSxFQUFhZixlQUM5Qi9qQixFQUFROGtCLEVBQWE5a0IsTUFDckJvZ0IsRUFBY3gxQixLQUFLc0csTUFBTWt2QixZQUV6QjRKLEVBQTZCLGVBQWR6TCxHQUF5QyxlQUFYd0wsRUFDN0MzSSxFQUFXNEksRUFBZXAvQixLQUFLcy9CLG9CQUFzQnQvQixLQUFLdS9CLGtCQUUxREksRUFBd0IzL0IsS0FBSzQvQixvQkFDN0JyUSxFQUFhb1EsRUFBc0IsR0FDbkNuUSxFQUFZbVEsRUFBc0IsR0FFbEMvRixFQUFRLEdBRVosR0FBSWpLLEVBQVksRUFDZCxJQUFLLElBQUlRLEVBQVNaLEVBQVlZLEdBQVVYLEVBQVdXLElBQ2pEeUosRUFBTXYzQixNQUFLLElBQUF1TyxlQUFjMEIsRUFBVSxDQUNqQzFQLEtBQU1rMkIsRUFDTm41QixJQUFLcTVCLEVBQVE3SSxFQUFRMkksR0FDckI3eEIsTUFBT2twQixFQUNQcUYsWUFBYTJELEVBQWlCM0QsT0FBYzN5QixFQUM1Q29TLE1BQU9qVixLQUFLeTJCLGNBQWN0RyxNQU9oQyxJQUFJd04sRUFBcUJlLEVBQXNCMStCLEtBQUtpUSxNQUFPalEsS0FBS3ExQixnQkFDaEUsT0FBTyxJQUFBemtCLGVBQWNxb0IsR0FBb0JDLEdBQWdCLE1BQU8sQ0FDOUR2aUIsVUFBV0EsRUFDWDZmLFNBQVVBLEVBQ1Z4MUIsSUFBS2hCLEtBQUt3M0IsZ0JBQ1Z2aUIsT0FBTyxPQUFTLENBQ2QyQixTQUFVLFdBQ1Z2QixPQUFRQSxFQUNSRCxNQUFPQSxFQUNQOGQsU0FBVSxPQUNWOEcsd0JBQXlCLFFBQ3pCQyxXQUFZLFlBQ1p0RyxVQUFXQSxHQUNWMWUsS0FDRixJQUFBckUsZUFBY2dvQixHQUFvQkMsR0FBZ0IsTUFBTyxDQUMxRHZtQixTQUFVc25CLEVBQ1Y1NEIsSUFBSzIzQixFQUNMMWpCLE1BQU8sQ0FDTEksT0FBUStwQixFQUFlLE9BQVN6QixFQUNoQzVtQixjQUFleWUsRUFBYyxZQUFTM3lCLEVBQ3RDdVMsTUFBT2dxQixFQUFlekIsRUFBcUIsVUFHakQsRUFFQXJaLEVBQU9rVSxvQkFBc0IsV0FDM0IsR0FBMEMsbUJBQS9CeDRCLEtBQUtpUSxNQUFNcWYsaUJBQ0p0dkIsS0FBS2lRLE1BQU0wZixVQUVYLEVBQUcsQ0FDakIsSUFBSWtRLEVBQXlCNy9CLEtBQUs0L0Isb0JBQzlCRSxFQUFzQkQsRUFBdUIsR0FDN0NFLEVBQXFCRixFQUF1QixHQUM1Q0csRUFBcUJILEVBQXVCLEdBQzVDSSxFQUFvQkosRUFBdUIsR0FFL0M3L0IsS0FBSzgxQixxQkFBcUJnSyxFQUFxQkMsRUFBb0JDLEVBQW9CQyxFQUN6RixDQUdGLEdBQW1DLG1CQUF4QmpnQyxLQUFLaVEsTUFBTXVtQixTQUF5QixDQUM3QyxJQUFJaUMsRUFBZXo0QixLQUFLc0csTUFDcEI0NUIsRUFBbUJ6SCxFQUFhc0csZ0JBQ2hDb0IsRUFBZ0IxSCxFQUFhaUYsYUFDN0J6QyxFQUE0QnhDLEVBQWE3Qyx5QkFFN0M1MUIsS0FBS3UyQixjQUFjMkosRUFBa0JDLEVBQWVsRixFQUN0RCxDQUNGLEVBTUEzVyxFQUFPc2Isa0JBQW9CLFdBQ3pCLElBQUl6RSxFQUFlbjdCLEtBQUtpUSxNQUNwQjBmLEVBQVl3TCxFQUFheEwsVUFDekIyTCxFQUFnQkgsRUFBYUcsY0FDN0JULEVBQWU3NkIsS0FBS3NHLE1BQ3BCa3ZCLEVBQWNxRixFQUFhckYsWUFDM0J1SixFQUFrQmxFLEVBQWFrRSxnQkFDL0JyQixFQUFlN0MsRUFBYTZDLGFBRWhDLEdBQWtCLElBQWQvTixFQUNGLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUduQixJQUFJSixFQUFhcVAsRUFBdUI1K0IsS0FBS2lRLE1BQU95dEIsRUFBYzE5QixLQUFLcTFCLGdCQUNuRTdGLEVBQVlxUCxFQUEwQjcrQixLQUFLaVEsTUFBT3NmLEVBQVltTyxFQUFjMTlCLEtBQUtxMUIsZ0JBR2pGb0csRUFBb0JqRyxHQUFtQyxhQUFwQnVKLEVBQThELEVBQTdCdHhCLEtBQUs2aUIsSUFBSSxFQUFHZ0wsR0FDaEZJLEVBQW1CbEcsR0FBbUMsWUFBcEJ1SixFQUE2RCxFQUE3QnR4QixLQUFLNmlCLElBQUksRUFBR2dMLEdBQ2xGLE1BQU8sQ0FBQzd0QixLQUFLNmlCLElBQUksRUFBR2YsRUFBYWtNLEdBQW1CaHVCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSVYsRUFBWSxFQUFHSCxFQUFZa00sSUFBbUJuTSxFQUFZQyxFQUNySSxFQUVPc1AsQ0FDVCxDQW5hNkIsQ0FtYTNCLEVBQUF6TixlQUFnQitDLEVBQU9sTixhQUFlLENBQ3RDeU0sVUFBVyxNQUNYbUYsY0FBVWoyQixFQUNWczhCLE9BQVEsV0FDUjdELGNBQWUsRUFDZm5DLGdCQUFnQixHQUNmL0UsQ0FDTCxDQU1BLElBQUlxTCxFQUF3QixTQUE2QjNkLEVBQU82RSxHQUMvQzdFLEVBQU14UCxTQUNMd1AsRUFBTTZSLFVBQ1Q3UixFQUFNek0sT0FDTnlNLEVBQU1xZCxPQUNBcmQsRUFBTStXLGFBQ04vVyxFQUFNb1gsYUFDYnBYLEVBQU0xTSxNQUNIdVIsRUFBTTJILFFBb0R2QixFQUlJOFIsRUFBb0IsU0FBeUJud0IsRUFBT2hKLEVBQU8yMUIsR0FDN0QsSUFDSUUsRUFETzdzQixFQUNTNnNCLFNBQ2hCRCxFQUFrQkQsRUFBY0MsZ0JBQ2hDRSxFQUFvQkgsRUFBY0csa0JBRXRDLEdBQUk5MUIsRUFBUTgxQixFQUFtQixDQUM3QixJQUFJVCxFQUFTLEVBRWIsR0FBSVMsR0FBcUIsRUFBRyxDQUMxQixJQUFJVixFQUFlUSxFQUFnQkUsR0FDbkNULEVBQVNELEVBQWFDLE9BQVNELEVBQWF2SixJQUM5QyxDQUVBLElBQUssSUFBSXZ6QixFQUFJdzlCLEVBQW9CLEVBQUd4OUIsR0FBSzBILEVBQU8xSCxJQUFLLENBQ25ELElBQUl1ekIsRUFBT2dLLEVBQVN2OUIsR0FDcEJzOUIsRUFBZ0J0OUIsR0FBSyxDQUNuQis4QixPQUFRQSxFQUNSeEosS0FBTUEsR0FFUndKLEdBQVV4SixDQUNaLENBRUE4SixFQUFjRyxrQkFBb0I5MUIsQ0FDcEMsQ0FFQSxPQUFPNDFCLEVBQWdCNTFCLEVBQ3pCLEVBa0JJbzVCLEVBQWdDLFNBQXFDcHdCLEVBQU8yc0IsRUFBZU8sRUFBTUMsRUFBS2QsR0FDeEcsS0FBT2MsR0FBT0QsR0FBTSxDQUNsQixJQUFJRSxFQUFTRCxFQUFNM3ZCLEtBQUs2dkIsT0FBT0gsRUFBT0MsR0FBTyxHQUN6Q0csRUFBZ0I2QyxFQUFrQm53QixFQUFPb3RCLEVBQVFULEdBQWVOLE9BRXBFLEdBQUlpQixJQUFrQmpCLEVBQ3BCLE9BQU9lLEVBQ0VFLEVBQWdCakIsRUFDekJjLEVBQU1DLEVBQVMsRUFDTkUsRUFBZ0JqQixJQUN6QmEsRUFBT0UsRUFBUyxFQUVwQixDQUVBLE9BQUlELEVBQU0sRUFDREEsRUFBTSxFQUVOLENBRVgsRUFjSXNCLEVBQXdCLFNBQStCNWMsRUFBTzZFLEdBQ2hFLElBQUlnSixFQUFZN04sRUFBTTZOLFVBQ2xCa04sRUFBa0JsVyxFQUFNa1csZ0JBQ3hCeUQsRUFBb0IzWixFQUFNMlosa0JBQzFCdkQsRUFBb0JwVyxFQUFNb1csa0JBQzFCd0QsRUFBMkIsRUFPL0IsR0FKSXhELEdBQXFCcE4sSUFDdkJvTixFQUFvQnBOLEVBQVksR0FHOUJvTixHQUFxQixFQUFHLENBQzFCLElBQUlWLEVBQWVRLEVBQWdCRSxHQUNuQ3dELEVBQTJCbEUsRUFBYUMsT0FBU0QsRUFBYXZKLElBQ2hFLENBSUEsT0FBT3lOLEdBRmtCNVEsRUFBWW9OLEVBQW9CLEdBQ0h1RCxDQUV4RCxFQUVJRSxFQUFnQ2hDLEVBQW9CLENBQ3REQyxjQUFlLFNBQXVCeHVCLEVBQU9oSixFQUFPMjFCLEdBQ2xELE9BQU93RCxFQUFrQm53QixFQUFPaEosRUFBTzIxQixHQUFlTixNQUN4RCxFQUNBcUMsWUFBYSxTQUFxQjF1QixFQUFPaEosRUFBTzIxQixHQUM5QyxPQUFPQSxFQUFjQyxnQkFBZ0I1MUIsR0FBTzZyQixJQUM5QyxFQUNBNEwsc0JBQXVCQSxFQUN2QmpCLDhCQUErQixTQUF1Q3h0QixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEdBQ3RILElBQUl4RSxFQUFZMWpCLEVBQU0wakIsVUFDbEJ0ZSxFQUFTcEYsRUFBTW9GLE9BQ2Y4cEIsRUFBU2x2QixFQUFNa3ZCLE9BQ2YvcEIsRUFBUW5GLEVBQU1tRixNQUdkMGQsRUFENkIsZUFBZGEsR0FBeUMsZUFBWHdMLEVBQ3ZCL3BCLEVBQVFDLEVBQzlCZ25CLEVBQWUrRCxFQUFrQm53QixFQUFPaEosRUFBTzIxQixHQUcvQ2UsRUFBcUJlLEVBQXNCenVCLEVBQU8yc0IsR0FDbERnQixFQUFZbndCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSXNOLEVBQXFCN0ssRUFBTXVKLEVBQWFDLFNBQ3pFdUIsRUFBWXB3QixLQUFLNmlCLElBQUksRUFBRytMLEVBQWFDLE9BQVN4SixFQUFPdUosRUFBYXZKLEtBQU9xRixHQVU3RSxPQVJjLFVBQVZKLElBRUFBLEVBREUyRixHQUFnQkcsRUFBWS9LLEdBQVE0SyxHQUFnQkUsRUFBWTlLLEVBQzFELE9BRUEsVUFJSmlGLEdBQ04sSUFBSyxRQUNILE9BQU82RixFQUVULElBQUssTUFDSCxPQUFPQyxFQUVULElBQUssU0FDSCxPQUFPcHdCLEtBQUtxd0IsTUFBTUQsR0FBYUQsRUFBWUMsR0FBYSxHQUcxRCxRQUNFLE9BQUlILEdBQWdCRyxHQUFhSCxHQUFnQkUsRUFDeENGLEVBQ0VBLEVBQWVHLEVBQ2pCQSxFQUVBRCxFQUlmLEVBQ0FnQix1QkFBd0IsU0FBZ0MzdUIsRUFBT3FzQixFQUFRTSxHQUNyRSxPQTdIb0IsU0FBeUIzc0IsRUFBTzJzQixFQUFlTixHQUNyRSxJQUFJTyxFQUFrQkQsRUFBY0MsZ0JBQ2hDRSxFQUFvQkgsRUFBY0csa0JBR3RDLE9BRjZCQSxFQUFvQixFQUFJRixFQUFnQkUsR0FBbUJULE9BQVMsSUFFbkVBLEVBRXJCK0QsRUFBOEJwd0IsRUFBTzJzQixFQUFlRyxFQUFtQixFQUFHVCxHQThCNUMsU0FBMENyc0IsRUFBTzJzQixFQUFlMzFCLEVBQU9xMUIsR0FJOUcsSUFIQSxJQUFJM00sRUFBWTFmLEVBQU0wZixVQUNsQjZOLEVBQVcsRUFFUnYyQixFQUFRMG9CLEdBQWF5USxFQUFrQm53QixFQUFPaEosRUFBTzIxQixHQUFlTixPQUFTQSxHQUNsRnIxQixHQUFTdTJCLEVBQ1RBLEdBQVksRUFHZCxPQUFPNkMsRUFBOEJwd0IsRUFBTzJzQixFQUFlbnZCLEtBQUs0aUIsSUFBSXBwQixFQUFPMG9CLEVBQVksR0FBSWxpQixLQUFLNnZCLE1BQU1yMkIsRUFBUSxHQUFJcTFCLEVBQ3BILENBbkNXbUUsQ0FBbUN4d0IsRUFBTzJzQixFQUFlbnZCLEtBQUs2aUIsSUFBSSxFQUFHeU0sR0FBb0JULEVBRXBHLENBK0dXb0UsQ0FBa0J6d0IsRUFBTzJzQixFQUFlTixFQUNqRCxFQUNBdUMsMEJBQTJCLFNBQW1DNXVCLEVBQU9zZixFQUFZbU8sRUFBY2QsR0FjN0YsSUFiQSxJQUFJakosRUFBWTFqQixFQUFNMGpCLFVBQ2xCdGUsRUFBU3BGLEVBQU1vRixPQUNmc2EsRUFBWTFmLEVBQU0wZixVQUNsQndQLEVBQVNsdkIsRUFBTWt2QixPQUNmL3BCLEVBQVFuRixFQUFNbUYsTUFHZDBkLEVBRDZCLGVBQWRhLEdBQXlDLGVBQVh3TCxFQUN2Qi9wQixFQUFRQyxFQUM5QmduQixFQUFlK0QsRUFBa0Jud0IsRUFBT3NmLEVBQVlxTixHQUNwRGdCLEVBQVlGLEVBQWU1SyxFQUMzQndKLEVBQVNELEVBQWFDLE9BQVNELEVBQWF2SixLQUM1Q3RELEVBQVlELEVBRVRDLEVBQVlHLEVBQVksR0FBSzJNLEVBQVNzQixHQUMzQ3BPLElBQ0E4TSxHQUFVOEQsRUFBa0Jud0IsRUFBT3VmLEVBQVdvTixHQUFlOUosS0FHL0QsT0FBT3RELENBQ1QsRUFDQXlGLGtCQUFtQixTQUEyQmhsQixFQUFPcWUsR0FDbkQsSUFFSXNPLEVBQWdCLENBQ2xCQyxnQkFBaUIsQ0FBQyxFQUNsQnlELGtCQUpVcndCLEVBQ2tCcXdCLG1CQXJMRSxHQXlMOUJ2RCxtQkFBb0IsR0FvQnRCLE9BakJBek8sRUFBUzRDLGdCQUFrQixTQUFVanFCLEVBQU9nM0IsUUFDaEIsSUFBdEJBLElBQ0ZBLEdBQW9CLEdBR3RCckIsRUFBY0csa0JBQW9CdHZCLEtBQUs0aUIsSUFBSXVNLEVBQWNHLGtCQUFtQjkxQixFQUFRLEdBS3BGcW5CLEVBQVM2QyxvQkFBb0IsR0FFekI4TSxHQUNGM1AsRUFBUzhDLGFBRWIsRUFFT3dMLENBQ1QsRUFDQTFILHVDQUF1QyxFQUN2Q0MsY0FBZSxTQUF1QjRHLEdBQ3JCQSxFQUFNZSxRQU92QixJQUdFNkQsRUFBNkJ4TSxFQUFvQixDQUNuREUsZ0JBQWlCLFNBQXlCelcsRUFBTTNXLEdBRTlDLE9BQU9BLEVBRFcyVyxFQUFLOFksV0FFekIsRUFDQWxDLGVBQWdCLFNBQXdCMVMsRUFBTzdhLEdBRTdDLE9BRGtCNmEsRUFBTTRVLFdBRTFCLEVBQ0E1QixhQUFjLFNBQXNCbk8sRUFBTzFmLEdBRXpDLE9BQU9BLEVBRFMwZixFQUFNZ1EsU0FFeEIsRUFDQTlCLGFBQWMsU0FBc0IxSCxFQUFPbG1CLEdBRXpDLE9BRGdCa21CLEVBQU13SixTQUV4QixFQUNBbEMsd0JBQXlCLFNBQWlDc0gsR0FDeEQsSUFBSTdELEVBQVc2RCxFQUFNN0QsU0FFckIsT0FEZ0I2RCxFQUFNcEYsVUFDSHVCLENBQ3JCLEVBQ0F4RCx1QkFBd0IsU0FBZ0NzSCxHQUN0RCxJQUFJL0QsRUFBYytELEVBQU0vRCxZQUV4QixPQURrQitELEVBQU10RixZQUNIdUIsQ0FDdkIsRUFDQXRELCtCQUFnQyxTQUF3QzBKLEVBQU9wSyxFQUFhOEQsRUFBT2pFLEVBQVk4SSxFQUFlekUsR0FDNUgsSUFBSUYsRUFBY29HLEVBQU1wRyxZQUNwQnZCLEVBQWMySCxFQUFNM0gsWUFDcEJ0aEIsRUFBUWlwQixFQUFNanBCLE1BQ2R3ckIsRUFBbUJuekIsS0FBSzZpQixJQUFJLEVBQUcySCxFQUFjdkIsRUFBY3RoQixHQUMzRHdvQixFQUFZbndCLEtBQUs0aUIsSUFBSXVRLEVBQWtCM00sRUFBY3lDLEdBQ3JEbUgsRUFBWXB3QixLQUFLNmlCLElBQUksRUFBRzJELEVBQWN5QyxFQUFjdGhCLEVBQVEraUIsRUFBZ0J6QixHQVVoRixPQVJjLFVBQVZxQixJQUVBQSxFQURFakUsR0FBYytKLEVBQVl6b0IsR0FBUzBlLEdBQWM4SixFQUFZeG9CLEVBQ3ZELE9BRUEsVUFJSjJpQixHQUNOLElBQUssUUFDSCxPQUFPNkYsRUFFVCxJQUFLLE1BQ0gsT0FBT0MsRUFFVCxJQUFLLFNBR0gsSUFBSWdELEVBQWVwekIsS0FBS3F3QixNQUFNRCxHQUFhRCxFQUFZQyxHQUFhLEdBRXBFLE9BQUlnRCxFQUFlcHpCLEtBQUtxekIsS0FBSzFyQixFQUFRLEdBQzVCLEVBQ0V5ckIsRUFBZUQsRUFBbUJuekIsS0FBSzZ2QixNQUFNbG9CLEVBQVEsR0FDdkR3ckIsRUFFQUMsRUFJWCxRQUNFLE9BQUkvTSxHQUFjK0osR0FBYS9KLEdBQWM4SixFQUNwQzlKLEVBQ0UrSixFQUFZRCxHQUlaOUosRUFBYStKLEVBRGZBLEVBSUFELEVBSWYsRUFDQWhKLDRCQUE2QixTQUFxQ21NLEVBQU83TSxFQUFVNkQsRUFBTzdVLEVBQVcwWixFQUFlekUsR0FDbEgsSUFBSXhCLEVBQVlvSyxFQUFNcEssVUFDbEJ0aEIsRUFBUzByQixFQUFNMXJCLE9BQ2Y2aUIsRUFBVzZJLEVBQU03SSxTQUNqQjhJLEVBQWdCdnpCLEtBQUs2aUIsSUFBSSxFQUFHNEgsRUFBV3ZCLEVBQVl0aEIsR0FDbkR1b0IsRUFBWW53QixLQUFLNGlCLElBQUkyUSxFQUFlOU0sRUFBV3lDLEdBQy9Da0gsRUFBWXB3QixLQUFLNmlCLElBQUksRUFBRzRELEVBQVd5QyxFQUFZdGhCLEVBQVM4aUIsRUFBZ0J4QixHQVU1RSxPQVJjLFVBQVZvQixJQUVBQSxFQURFN1UsR0FBYTJhLEVBQVl4b0IsR0FBVTZOLEdBQWEwYSxFQUFZdm9CLEVBQ3RELE9BRUEsVUFJSjBpQixHQUNOLElBQUssUUFDSCxPQUFPNkYsRUFFVCxJQUFLLE1BQ0gsT0FBT0MsRUFFVCxJQUFLLFNBR0gsSUFBSWdELEVBQWVwekIsS0FBS3F3QixNQUFNRCxHQUFhRCxFQUFZQyxHQUFhLEdBRXBFLE9BQUlnRCxFQUFlcHpCLEtBQUtxekIsS0FBS3pyQixFQUFTLEdBQzdCLEVBQ0V3ckIsRUFBZUcsRUFBZ0J2ekIsS0FBSzZ2QixNQUFNam9CLEVBQVMsR0FDckQyckIsRUFFQUgsRUFJWCxRQUNFLE9BQUkzZCxHQUFhMmEsR0FBYTNhLEdBQWEwYSxFQUNsQzFhLEVBQ0UyYSxFQUFZRCxHQUlaMWEsRUFBWTJhLEVBRGRBLEVBSUFELEVBSWYsRUFDQXRKLDZCQUE4QixTQUFzQzJNLEVBQU9uTixHQUN6RSxJQUFJNEMsRUFBY3VLLEVBQU12SyxZQUNwQnVCLEVBQWNnSixFQUFNaEosWUFDeEIsT0FBT3hxQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk0SCxFQUFjLEVBQUd4cUIsS0FBSzZ2QixNQUFNeEosRUFBYTRDLElBQ3ZFLEVBQ0FuQyxnQ0FBaUMsU0FBeUMyTSxFQUFRM1IsRUFBWXVFLEdBQzVGLElBQUk0QyxFQUFjd0ssRUFBT3hLLFlBQ3JCdUIsRUFBY2lKLEVBQU9qSixZQUNyQjdpQixFQUFROHJCLEVBQU85ckIsTUFDZmlDLEVBQU9rWSxFQUFhbUgsRUFDcEJ5SyxFQUFvQjF6QixLQUFLcXpCLE1BQU0xckIsRUFBUTBlLEVBQWF6YyxHQUFRcWYsR0FDaEUsT0FBT2pwQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk0SCxFQUFjLEVBQUcxSSxFQUFhNFIsRUFBb0IsR0FFaEYsRUFDQXBNLDBCQUEyQixTQUFtQ3FNLEVBQVFsZSxHQUNwRSxJQUFJeVQsRUFBWXlLLEVBQU96SyxVQUNuQnVCLEVBQVdrSixFQUFPbEosU0FDdEIsT0FBT3pxQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk2SCxFQUFXLEVBQUd6cUIsS0FBSzZ2QixNQUFNcGEsRUFBWXlULElBQ25FLEVBQ0EzQiw2QkFBOEIsU0FBc0NxTSxFQUFROVIsRUFBWXJNLEdBQ3RGLElBQUl5VCxFQUFZMEssRUFBTzFLLFVBQ25CdUIsRUFBV21KLEVBQU9uSixTQUNsQjdpQixFQUFTZ3NCLEVBQU9oc0IsT0FDaEIrQixFQUFNbVksRUFBYW9ILEVBQ25CMkssRUFBaUI3ekIsS0FBS3F6QixNQUFNenJCLEVBQVM2TixFQUFZOUwsR0FBT3VmLEdBQzVELE9BQU9scEIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJNkgsRUFBVyxFQUFHM0ksRUFBYStSLEVBQWlCLEdBRTFFLEVBQ0FyTSxrQkFBbUIsU0FBMkJobEIsR0FDOUMsRUFDQWlsQix1Q0FBdUMsRUFDdkNDLGNBQWUsU0FBdUJvTSxHQUNsQkEsRUFBTzdLLFlBQ1Q2SyxFQUFPNUssU0FXekIsSUFHRTZLLEVBQTZCaEQsRUFBb0IsQ0FDbkRDLGNBQWUsU0FBdUI3Z0IsRUFBTTNXLEdBRTFDLE9BQU9BLEVBRFEyVyxFQUFLa2YsUUFFdEIsRUFDQTZCLFlBQWEsU0FBcUI3YyxFQUFPN2EsR0FFdkMsT0FEZTZhLEVBQU1nYixRQUV2QixFQUNBNEIsc0JBQXVCLFNBQStCL1gsR0FDcEQsSUFBSWdKLEVBQVloSixFQUFNZ0osVUFFdEIsT0FEZWhKLEVBQU1tVyxTQUNIbk4sQ0FDcEIsRUFDQThOLDhCQUErQixTQUF1Q3RRLEVBQU9sbUIsRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEdBQ3RILElBQUl4RSxFQUFZeEcsRUFBTXdHLFVBQ2xCdGUsRUFBUzhYLEVBQU05WCxPQUNmc2EsRUFBWXhDLEVBQU13QyxVQUNsQm1OLEVBQVczUCxFQUFNMlAsU0FDakJxQyxFQUFTaFMsRUFBTWdTLE9BQ2YvcEIsRUFBUStYLEVBQU0vWCxNQUdkMGQsRUFENkIsZUFBZGEsR0FBeUMsZUFBWHdMLEVBQ3ZCL3BCLEVBQVFDLEVBQzlCb3NCLEVBQWlCaDBCLEtBQUs2aUIsSUFBSSxFQUFHWCxFQUFZbU4sRUFBV2hLLEdBQ3BEOEssRUFBWW53QixLQUFLNGlCLElBQUlvUixFQUFnQng2QixFQUFRNjFCLEdBQzdDZSxFQUFZcHdCLEtBQUs2aUIsSUFBSSxFQUFHcnBCLEVBQVE2MUIsRUFBV2hLLEVBQU9nSyxFQUFXM0UsR0FVakUsT0FSYyxVQUFWSixJQUVBQSxFQURFMkYsR0FBZ0JHLEVBQVkvSyxHQUFRNEssR0FBZ0JFLEVBQVk5SyxFQUMxRCxPQUVBLFVBSUppRixHQUNOLElBQUssUUFDSCxPQUFPNkYsRUFFVCxJQUFLLE1BQ0gsT0FBT0MsRUFFVCxJQUFLLFNBSUQsSUFBSWdELEVBQWVwekIsS0FBS3F3QixNQUFNRCxHQUFhRCxFQUFZQyxHQUFhLEdBRXBFLE9BQUlnRCxFQUFlcHpCLEtBQUtxekIsS0FBS2hPLEVBQU8sR0FDM0IsRUFDRStOLEVBQWVZLEVBQWlCaDBCLEtBQUs2dkIsTUFBTXhLLEVBQU8sR0FDcEQyTyxFQUVBWixFQUtiLFFBQ0UsT0FBSW5ELEdBQWdCRyxHQUFhSCxHQUFnQkUsRUFDeENGLEVBQ0VBLEVBQWVHLEVBQ2pCQSxFQUVBRCxFQUlmLEVBQ0FnQix1QkFBd0IsU0FBZ0M3QyxFQUFPTyxHQUM3RCxJQUFJM00sRUFBWW9NLEVBQU1wTSxVQUNsQm1OLEVBQVdmLEVBQU1lLFNBQ3JCLE9BQU9ydkIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJVixFQUFZLEVBQUdsaUIsS0FBSzZ2QixNQUFNaEIsRUFBU1EsSUFDakUsRUFDQStCLDBCQUEyQixTQUFtQzdDLEVBQU96TSxFQUFZbU8sR0FDL0UsSUFBSS9KLEVBQVlxSSxFQUFNckksVUFDbEJ0ZSxFQUFTMm1CLEVBQU0zbUIsT0FDZnNhLEVBQVlxTSxFQUFNck0sVUFDbEJtTixFQUFXZCxFQUFNYyxTQUNqQnFDLEVBQVNuRCxFQUFNbUQsT0FDZi9wQixFQUFRNG1CLEVBQU01bUIsTUFHZGtuQixFQUFTL00sRUFBYXVOLEVBQ3RCaEssRUFGNkIsZUFBZGEsR0FBeUMsZUFBWHdMLEVBRXZCL3BCLEVBQVFDLEVBQzlCcXNCLEVBQWtCajBCLEtBQUtxekIsTUFBTWhPLEVBQU80SyxFQUFlcEIsR0FBVVEsR0FDakUsT0FBT3J2QixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlWLEVBQVksRUFBR0osRUFBYW1TLEVBQWtCLEdBRTVFLEVBQ0F6TSxrQkFBbUIsU0FBMkJobEIsR0FDOUMsRUFDQWlsQix1Q0FBdUMsRUFDdkNDLGNBQWUsU0FBdUJrSixHQUNyQkEsRUFBTXZCLFFBT3ZCLElBS0YsU0FBUzZFLEVBQWVsN0IsRUFBTXRFLEdBQzVCLElBQUssSUFBSXkvQixLQUFhbjdCLEVBQ3BCLEtBQU1tN0IsS0FBYXovQixHQUNqQixPQUFPLEVBSVgsSUFBSyxJQUFJMC9CLEtBQWMxL0IsRUFDckIsR0FBSXNFLEVBQUtvN0IsS0FBZ0IxL0IsRUFBSzAvQixHQUM1QixPQUFPLEVBSVgsT0FBTyxDQUNULENBRUEsSUFBSUMsRUFBWSxDQUFDLFNBQ2JDLEVBQWEsQ0FBQyxTQUlsQixTQUFTQyxFQUFTdGQsRUFBVzJFLEdBQzNCLElBQUk0WSxFQUFZdmQsRUFBVXpQLE1BQ3RCaXRCLEdBQVcsT0FBOEJ4ZCxFQUFXb2QsR0FFcERLLEVBQVk5WSxFQUFVcFUsTUFDdEJtdEIsR0FBVyxPQUE4Qi9ZLEVBQVcwWSxHQUV4RCxPQUFRSixFQUFlTSxFQUFXRSxLQUFlUixFQUFlTyxFQUFVRSxFQUM1RSxDQUtBLFNBQVNDLEVBQXNCaFosRUFBV2hELEdBQ3hDLE9BQVEyYixFQUFTaGlDLEtBQUtpUSxNQUFPb1osSUFBY3NZLEVBQWUzaEMsS0FBS3NHLE1BQU8rZixFQUN4RSxzQkN4aEVBLFFBRWUsRUFNUCxXQUNOLElBQUlpYyxFQUFRLGdCQUVSQyxFQUFVLFNBQVV0ZixFQUFNdWYsR0FDNUIsT0FBd0IsT0FBcEJ2ZixFQUFLd2YsV0FBOEJELEVBRWhDRCxFQUFRdGYsRUFBS3dmLFdBQVlELEVBQUd6ekIsT0FBTyxDQUFDa1UsSUFDN0MsRUFFSWhPLEVBQVEsU0FBVWdPLEVBQU1rRyxHQUMxQixPQUFPOVUsaUJBQWlCNE8sRUFBTSxNQUFNeWYsaUJBQWlCdlosRUFDdkQsRUFNSXdaLEVBQVMsU0FBVTFmLEdBQ3RCLE9BQU9xZixFQUFNOTNCLEtBTEMsU0FBVXlZLEdBQ3ZCLE9BQU9oTyxFQUFNZ08sRUFBTSxZQUFjaE8sRUFBTWdPLEVBQU0sY0FBZ0JoTyxFQUFNZ08sRUFBTSxhQUMzRSxDQUdtQmlRLENBQVNqUSxHQUM1QixFQWtCQSxPQWhCbUIsU0FBVUEsR0FDM0IsR0FBTUEsYUFBZ0IyZixhQUFlM2YsYUFBZ0I0ZixXQUFyRCxDQU1BLElBRkEsSUFBSUwsRUFBS0QsRUFBUXRmLEVBQUt3ZixXQUFZLElBRXpCbGpDLEVBQUksRUFBR0EsRUFBSWlqQyxFQUFHL2lDLE9BQVFGLEdBQUssRUFDbEMsR0FBSW9qQyxFQUFPSCxFQUFHampDLElBQ1osT0FBT2lqQyxFQUFHampDLEdBSWQsT0FBT2dDLFNBQVN1aEMsa0JBQW9CdmhDLFNBQVN3aEMsZUFWN0MsQ0FXRixDQUdGLE9BNUNzQixpQkFBWCxPQUFXLHFMQ0Z0QixpQkFDQSxhQUVBLGFBcUZBLFVBNURBLFNBQWdCLFNBQ2R6d0IsRUFBUSxXQUNScUUsRUFBUyxZQUNUYSxFQUFPLFVBQ1B3ckIsRUFBYSxnQkFDYkMsRUFBWSxlQUNaLElBQUFsZ0IsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQW1nQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxRQUFBQSxPQUFPLElBQUcsR0FBSyxFQUNmLElBQUFDLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFDLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFDLG9CQUFBQSxPQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQUMsa0JBQUFBLE9BQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBQyxVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxZQUFBQSxPQUFXLElBQUcsS0FBRSxFQUNoQixJQUFBNUwsTUFBQUEsT0FBSyxJQUFHLFdBQVEsRUFDaEIsSUFBQWpGLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2Zoc0IsRUFBSSxPQUVKLE9BQ0Usa0NBQ0U5RixJQUFLaWlDLEVBQ0x0c0IsV0FBVyxhQUFTLENBQ2xCLFVBQU9pdEIsVUFDUCxVQUFPOVEsR0FDUCxVQUFPaUYsU0FFTCxFQUFDLFVBQU9tTCxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxXQUFZQSxFQUNwQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsYUFBY0EsRUFDdEIsRUFBQyxVQUFPQyxxQkFBc0JBLEVBQzlCLEVBQUMsVUFBT0MsbUJBQW9CQSxFQUM1QixFQUFDLFVBQU9JLFlBQWFWLEdBQVdRLEVBQVk1NkIsU0FBUyxRQUNyRCxFQUFDLFVBQU8rNkIsYUFBY1gsR0FBV1EsRUFBWTU2QixTQUFTLFlBRXhENE4sSUFFRm9NLFNBQVVBLEVBQ1YyZ0IsVUFBV0EsRUFDWDU4QixLQUFNQSxFQUNOaTlCLEtBQUssU0FDTHZzQixRQUFTQSxFQUNUd3JCLGNBQWVBLEdBRU0saUJBQWIxd0IsR0FDUjlLLE1BQU00QixRQUFRa0osSUFDZEEsRUFBUzdTLE9BQ1AsK0JBQUtrWCxVQUFXLFVBQU9xdEIsU0FBVTF4QixHQUMvQixFQUtWLDBMQ3RGQSxjQUFTLDJFQUFBSCxPQUFPLDJLQ0FoQixpQkFDQSxhQUVBLGFBY0EsVUFOQSxTQUFxQixTQUFFRyxFQUFRLFdBQUUsSUFBQTR3QixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUFFdnNCLEVBQVMsWUFDMUQsT0FDRSwrQkFBS0EsV0FBVyxhQUFTLENBQUMsVUFBT3N0QixhQUFXLEtBQUcsRUFBQyxVQUFPZixVQUFXQSxFQUFRLEdBQUd2c0IsS0FBY3JFLEVBRS9GLCtMQ2ZBLGFBQVMsZ0ZBQUFILE9BQU8sZ3ZCQ0FoQixpQkFDQSxhQUVBLGFBcUZBLFVBM0RBLFNBQW9CLFNBQ2R3WSxFQUFTLEtBQ2JyWSxFQUFRLFdBQ1JxRSxFQUFTLFlBQ1RtYyxFQUFJLE9BQ0ptUSxFQUFZLGVBQ1osSUFBQUMsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsUUFBQUEsT0FBTyxJQUFHLEdBQUssRUFDZixJQUFBSSxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBSCxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxvQkFBQUEsT0FBbUIsSUFBRyxHQUFLLEVBQzNCLElBQUFDLGtCQUFBQSxPQUFpQixJQUFHLEdBQUssRUFDekIsSUFBQTFnQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBNGdCLFlBQUFBLE9BQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUE1TCxNQUFBQSxPQUFLLElBQUcsV0FBUSxFQUNiOW5CLEVBQUssSUFqQlUscU1BdUJsQixZQUp5QixJQUFkMGEsSUFDVEEsRUFBWSxLQUlaLHdCQUFDQSxFQUFTLEdBQ1IzcEIsSUFBS2lpQyxFQUFZLGNBQ0wsY0FDWnRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixVQUNQLFVBQU85USxHQUNQLFVBQU9pRixTQUVMLEVBQUMsVUFBT21MLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFdBQVlBLEVBQ3BCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPdmdCLFVBQVdBLEVBQ25CLEVBQUMsVUFBT3dnQixhQUFjQSxFQUN0QixFQUFDLFVBQU9DLHFCQUFzQkEsRUFDOUIsRUFBQyxVQUFPQyxtQkFBb0JBLEVBQzVCLEVBQUMsVUFBT0ksWUFBYVYsR0FBV1EsRUFBWTU2QixTQUFTLFFBQ3JELEVBQUMsVUFBTys2QixhQUFjWCxHQUFXUSxFQUFZNTZCLFNBQVMsWUFFeEQ0TixLQUVFMUcsR0FFaUIsaUJBQWJxQyxHQUNSOUssTUFBTTRCLFFBQVFrSixJQUNkQSxFQUFTN1MsT0FDUCwrQkFBS2tYLFVBQVcsVUFBT3F0QixTQUFVMXhCLEdBQy9CLEVBS1YsNExDdEZBLGNBQVMsK0VBQUFILE9BQU8sK3lCQ0FoQixpQkFDQSxhQUVBLFVBR0EsYUEwREEsVUEzQ0EsU0FBa0IsT0FDaEJqTyxFQUFLLFFBQ0w4USxFQUFRLFdBQ1JrdkIsRUFBVyxjQUNYQyxFQUFPLFVBQ1BwaEIsRUFBUSxXQUNSOEosRUFBSSxPQUNKbFcsRUFBUyxZQUNUeXRCLEVBQWEsZ0JBQ2IsSUFBQXRSLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2YsSUFBQTRRLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBRVhXLEdBQWUsSUFBQS9nQyxjQUNuQixTQUFDckIsR0FDeUIsbUJBQWIrUyxHQUNUQSxFQUFVL1MsRUFBRTNDLE9BQTRCNmtDLFFBRTVDLEdBQ0EsQ0FBQ252QixJQUdILE9BQ0Usd0JBQUMsRUFBQXN2QixNQUFLLENBQUNoaUMsTUFBTzRCLEdBQ1osK0NBQ2MsV0FDWmxELElBQUssU0FBQ3VqQyxHQUNBQSxJQUNGQSxFQUFTSCxjQUFnQkEsRUFFN0IsRUFDQUQsUUFBU0EsRUFDVHBoQixTQUFVQSxFQUNWcE0sV0FBVyxhQUFTLENBQUMsVUFBTzZ0QixTQUFVN3RCLEVBQVcsVUFBT21jLEtBQ3hEOWQsU0FBVXF2QixFQUNWSCxZQUFhQSxFQUNiclgsS0FBTUEsRUFDTi9sQixLQUFLLFdBQ0w0OEIsVUFBV0EsSUFJbkIsNExDOURBLGFBQVMsNkVBQUF2eEIsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxVQUNBLGFBK0NBLFVBbkNBLFNBQXFCLE9BQ25Cc3lCLEVBQU0sU0FDTnhCLEVBQVksZUFDWnlCLEVBQVEsV0FDUkMsRUFBYSxnQkFDYixJQUFBaFIsVUFBQUEsT0FBUyxJQUFHLGFBQVUsRUFDdEIsSUFBQWlSLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBRWpCLE9BQ0UsK0JBQ0U1akMsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9rdUIsWUFBYSxVQUFPbFIsTUFFL0M4USxFQUFPOTVCLEtBQUksU0FBQ3dNLEdBU1gsT0FDRSx3QkFBQyxFQUFBMnRCLFlBQVcsQ0FDVm5sQyxJQUFLd1gsRUFBTXhYLElBQ1h3WCxNQUFPQSxFQUNQNHRCLFdBQVk1dEIsRUFBTXhYLE9BQVFnbEMsYUFBYSxFQUFiQSxFQUFlaGxDLEtBQ3pDNlgsUUFiaUIsV0FDZm90QixHQUFhenRCLEVBQU14WCxPQUFRZ2xDLGFBQWEsRUFBYkEsRUFBZWhsQyxLQUM1QytrQyxFQUFTLE1BRVRBLEVBQVN2dEIsRUFFYixHQVVGLElBR04sK0xDakRBLGNBQVMsZ0ZBQUFoRixPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBcUNBLFVBMUJBLFNBQXFCLFNBQ25CZ0YsRUFBSyxRQUNMOHJCLEVBQVksZUFDWixJQUFBOEIsV0FBQUEsT0FBVSxJQUFHLEdBQUssRUFDbEIsSUFBQWpTLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2Z0YixFQUFPLFVBRVAsT0FDRSxrQ0FDRXhXLElBQUtpaUMsRUFDTHRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT3F1QixZQUNQLFVBQU9sUyxTQUVMLEVBQUMsVUFBT21TLFVBQVdGLE9BRXJCLGNBQ1UsZUFDWnZ0QixRQUFTQSxFQUNUdkMsTUFBTyxDQUFFK0IsZ0JBQWlCRyxFQUFNK3RCLFVBRS9CL3RCLEVBQU1qVCxPQUFTLGdDQUFNeVMsVUFBVyxVQUFPd3VCLFFBQVMsaUJBQVVodUIsRUFBTWpULE1BQUssV0FHNUUsK0xDdENBLGNBQVMsZ0ZBQUFpTyxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLFVBQ0EsYUFpQkEsU0FBU2l6QixFQUFrQixTQUN6Qnp1QixFQUFTLFlBQ1RyRSxFQUFRLFdBQ1Iyd0IsRUFBWSxlQUNab0MsRUFBTSxTQUNOQyxFQUFNLFNBQ04sSUFBQUMsWUFBQUEsT0FBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQUMsYUFBQUEsT0FBWSxJQUFHLEtBQUUsRUFDakIsSUFBQUMsUUFBQUEsT0FBTyxJQUFHLGFBQU8sRUFBQyxFQUNsQixJQUFBcEMsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQXFDLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUF0QyxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBdUMsV0FBQUEsT0FBVSxJQUFHLE9BQUksRUFFakIsT0FDRSx3QkFBQyxFQUFBQyxNQUFLLENBQ0ozQyxhQUFjQSxFQUNkcUMsT0FBUUEsRUFDUkcsUUFBU0EsRUFDVEMsVUFBV0EsRUFDWHRDLFNBQVVBLEVBQ1Z1QyxXQUFZQSxHQUVaLCtCQUFLaHZCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixPQUN2QzB1QixHQUFVLDhCQUFJMXVCLFVBQVcsVUFBT2t2QixhQUFjUixHQUNqRCwrQkFDRTF1QixXQUFXLGFBQVMsQ0FDbEIsVUFBT212QixtQkFDTCxFQUFDLFVBQU96QyxXQUFZQSxFQUFTLE1BR2hDL3dCLEdBRUgsK0JBQUtxRSxVQUFXLFVBQU9vdkIsdUJBQ3JCLCtCQUFLcHZCLFVBQVcsVUFBT3F2QixjQUFlVCxHQUN0QywrQkFBSzV1QixVQUFXLFVBQU9xdkIsY0FBZVIsS0FLaEQsQ0FFQUosRUFBa0JhLFlBQWMsb0JBRWhDLFVBQWViLHFNQ2pFZixjQUFTLHNGQUFBanpCLE9BQU8sNEtDQWhCLGlCQUNBLGFBRUEsVUFFQSxhQUNBLGFBQ0EsVUEyREEsVUE3Q0EsU0FBZ0IsT0FDZGt6QixFQUFNLFNBQ05hLEVBQU0sU0FDTkMsRUFBSSxPQUNKeHZCLEVBQVMsWUFDVDFCLEVBQUssUUFDTCxJQUFBbXhCLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CWCxFQUFPLFVBQ1BuekIsRUFBUSxXQUNSLElBQUEwUixjQUFBQSxPQUFhLElBQUcsR0FBSyxFQUVyQixPQUNFLHdCQUFDLEVBQUEwRCxjQUFhLENBQ1ozRCxHQUFJb2lCLEVBQ0ozNEIsUUFBUyxJQUNUMmEsV0FBWSxDQUNWaE8sTUFBTyxVQUFPa3NCLFlBQ2RDLFlBQWEsVUFBT0Msa0JBQ3BCQyxVQUFXLFVBQU9DLGdCQUNsQjFoQixLQUFNLFVBQU8yaEIsV0FDYkMsV0FBWSxVQUFPQyxpQkFDbkJDLFNBQVUsVUFBT0MsZ0JBRW5COWlCLGNBQWVBLEdBRWYsK0JBQUtyTixXQUFXLGFBQVMsQ0FBQyxVQUFPb3dCLE9BQVFwd0IsSUFBYTFCLE1BQU9BLEdBQzNELCtCQUFLMEIsVUFBVyxVQUFPcXdCLGVBQ3JCLCtCQUFLcndCLFVBQVcsVUFBT3N3QixzQkFDbkJiLEdBQ0EsK0JBQUt6dkIsVUFBVyxVQUFPdXdCLDhCQUNyQiwrQkFBS3Z3QixVQUFXLFVBQU93d0Isc0JBQXVCM3ZCLFFBQVNpdUIsR0FDckQsd0JBQUMsRUFBQTJCLEtBQUksQ0FBQ0MsSUFBSyxVQUFXdlUsS0FBTSxlQUkvQnVTLEdBQVUsbUNBQU1BLElBRXJCLCtCQUFLMXVCLFVBQVcsVUFBTzJ3QixZQUFhaDFCLEtBQ2pDNHpCLEdBQVUsK0JBQUt2dkIsVUFBVyxVQUFPNHdCLGNBQWVyQixLQUs3RCwwTENoRUEsY0FBUywyRUFBQS96QixPQUFPLDhMQ0FoQixpQkFFQSxVQUNBLFVBR0EsYUFFQSxhQVNBLHFCQUEwQyxPQUN4QzJFLEVBQU8sVUFDUDB3QixFQUFVLGFBQ0RybUMsRUFBVyxVQUVwQixPQUNFLHdCQUFDLEVBQUFzbUMsT0FBTSxDQUNMMVAsTUFBTSxPQUNOaFYsU0FBVXlrQixFQUNWaHdCLFFBQVNyVyxFQUNUMnhCLEtBQUssU0FDTDBRLHFCQUFtQixHQUVuQiwrQkFBSzdzQixVQUFXLFVBQUlpdEIsV0FDakI5c0IsRUFDRCx3QkFBQyxFQUFBc3dCLEtBQUksQ0FBQy9xQixJQUFJLFdBQVdnckIsSUFBSyxhQUlsQyxndkJDcENBLGlCQUNBLFVBRUEsU0FDQSxVQTRCQSxvQkFBeUMsT0FDdkNLLEVBQWdCLG1CQUNoQjlOLEVBQUssUUFDSytOLEVBQVksV0FDdEI3d0IsRUFBTyxVQUNQOHdCLEVBQWUsa0JBQ2ZDLEVBQVksZUFDWixJQUFBQyxVQUFBQSxPQUFTLElBQUcsR0FBRUMsU0FBVSxTQUFVQyxXQUFZLFFBQVEsRUFFaEQsR0FBc0IsSUFBQXJsQyxXQUFTLEdBQTlCMmlDLEVBQU0sS0FBRTJDLEVBQVMsS0FDbEJqbkMsR0FBTSxJQUFBRixrQkFBZ0IsV0FBTSxPQUFBbW5DLEdBQVUsRUFBVixJQUs1QlQsR0FBYzVOLEdBQTBCLElBQWpCQSxFQUFNbjZCLE9BQzdCeW9DLEVBQWUsV0FBTSxPQUFBRCxHQUFXM0MsRUFBWCxFQUUzQixPQUNFLHdCQUFDLEVBQUE2QyxjQUFhLENBQ1pDLE9BQzZCLG1CQUFwQlIsRUFDTEEsRUFBZ0IsQ0FDZDl3QixRQUFPLEVBQ1Awd0IsV0FBVSxFQUNWSyxhQUFZLEVBQ1pLLGFBQVksSUFHZCx3QkFBQyxFQUFBRyxVQUFTLENBQ1J2eEIsUUFBU0EsRUFDVDB3QixXQUFZQSxFQUNaaHdCLFFBQVMwd0IsSUFJZkosVUFBV0EsRUFDWDltQyxJQUFLQSxHQUVMLHdCQUFDLEVBQUFzbkMsS0FBSSxDQUFDaEQsT0FBUUEsR0FDWDFMLEdBQ0NBLEVBQU1qdkIsS0FBSSxTQUFDbVcsR0FBUyxPQUNsQix3QkFBQyxFQUFBeW5CLFNBQVEsQ0FDUEMsU0FBVTFuQixFQUFLMFIsTUFBT3FWLGFBQVksRUFBWkEsRUFBY3JWLElBQ3BDN3lCLElBQUttaEIsRUFBSzBSLEdBQ1ZoYixRQUFTLFdBQU0sT0FsQ1AsU0FBQ3NKLEdBQ25CNm1CLEVBQWE3bUIsR0FDYm1uQixHQUFVLEVBQ1osQ0ErQjJCOW1DLENBQVkyZixFQUFaLEdBRWQ0bUIsRUFDR0EsRUFBaUIsQ0FDZjVtQixLQUFJLEVBQ0ppa0IsV0FBWWprQixFQUFLMFIsTUFBT3FWLGFBQVksRUFBWkEsRUFBY3JWLE1BRXhDMVIsRUFBSytMLEtBWE8sS0FpQjlCLHNIQzFGQSxjQUNFLDBFQUFBNGIsUUFBUSxJQU9WLGFBQ0UsbUZBQUFKLFNBQVMsNEtDVFgsaUJBQ0EsYUFHQSxhQXVFQSxVQWpEQSxTQUFtQixTQUNqQi8xQixFQUFRLFdBQ1JvMkIsRUFBTSxTQUNOMXpCLEVBQVEsV0FDUnV2QixFQUFRLFdBQ1IsSUFBQW9FLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUE1bEIsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQW1nQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRCxVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBRSxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBQyxvQkFBQUEsT0FBbUIsSUFBRyxHQUFLLEVBQzNCLElBQUFDLGtCQUFBQSxPQUFpQixJQUFHLEdBQUssRUFDekIsSUFBQU4sUUFBQUEsT0FBTyxJQUFHLEdBQUssRUFDZixJQUFBclEsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFFZixPQUNFLGlDQUNFbmMsV0FBVyxhQUFTLENBQ2xCLFVBQU96UyxNQUNQLFVBQU80dUIsU0FFTCxFQUFDLFVBQU9vUSxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPRSxVQUFXQSxFQUNuQixFQUFDLFVBQU9ELFdBQVlBLEVBQ3BCLEVBQUMsVUFBT0UsYUFBY0EsRUFDdEIsRUFBQyxVQUFPQyxxQkFBc0JBLEVBQzlCLEVBQUMsVUFBT0MsbUJBQW9CQSxRQUloQyxpQ0FDRTlzQixVQUFXLFVBQU9peUIsTUFDbEI5aEMsS0FBSyxPQUNMMHJCLEdBQUcsT0FDSGtXLE9BQVFBLEVBQ1JDLFNBQVVBLEVBQ1YzbkMsSUFBS3VqQyxFQUNMeGhCLFNBQVVBLEVBQ1YvTixTQUFVQSxJQUVYMUMsRUFHUCw2TEN6RUEsY0FBUyw4RUFBQUgsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxhQWtFQSxVQW5DQSxTQUF1QixTQUNyQndFLEVBQVMsWUFDVHJFLEVBQVEsV0FDUjJ3QixFQUFZLGVBQ1osSUFBQTlELE9BQUFBLE9BQU0sSUFBRyxXQUFRLEVBQ2pCLElBQUEySSxVQUFBQSxPQUFTLElBQUcsR0FBRUUsV0FBWSxTQUFVRCxTQUFVLFNBQVVjLE9BQVEsWUFBWSxFQUV0RUMsRUFDcUIsV0FBekJoQixFQUFVRSxXQUNOLG1CQUNBRixFQUFVRSxXQUVWZSxFQUNtQixXQUF2QmpCLEVBQVVDLFNBQXdCLGlCQUFtQkQsRUFBVUMsU0FFakUsT0FDRSwrQkFDRS9tQyxJQUFLaWlDLEVBQVksY0FDTCxpQkFDWnRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixVQUNQLFVBQU9rRixHQUNQLFVBQU9DLEdBQ1AsVUFBTzVKLFNBRUwsRUFBQyxVQUFPNkosT0FBNkIsY0FBckJsQixFQUFVZSxVQUU1Qmx5QixLQUdEckUsRUFHUCxpTUNuRUEsY0FBUyxrRkFBQUgsT0FBTyw0S0NBaEIsaUJBQ0EsYUFDQSxhQWlDQSxVQXZCQSxTQUFjLFNBQ1prMUIsRUFBRyxNQUNIaHJCLEVBQUcsTUFDSDRtQixFQUFZLGVBQ1osSUFBQW5RLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2YsSUFBQW9RLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBRWhCLE9BQ0UsK0JBQ0VsaUMsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUNsQixVQUFPc3lCLEtBQ1AsVUFBT25XLFNBQ0wsRUFBQyxVQUFPb1EsVUFBV0EsRUFBUSxLQUUvQmdHLFlBQVksWUFBVyxjQUNYLE9BQ1o3c0IsSUFBS0EsRUFDTGdyQixJQUFLQSxHQUdYLHdMQ2pDQSxjQUFTLHlFQUFBbDFCLE9BQU8sNEtDQWhCLGlCQUNBLGFBRUEsVUFDQSxhQXFFQSxVQS9DQSxTQUFvQixTQUNsQndFLEVBQVMsWUFDVHNzQixFQUFZLGVBQ1ozd0IsRUFBUSxXQUNSKzBCLEVBQUcsTUFDSGhyQixFQUFHLE1BQ0gsSUFBQXNuQixZQUFBQSxPQUFXLElBQUcsS0FBRSxFQUNoQixJQUFBbnNCLFFBQUFBLE9BQU8sSUFBRyxhQUFPLEVBQUMsRUFDbEIsSUFBQXVMLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFtZ0IsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUosUUFBQUEsT0FBTyxJQUFHLEdBQUssRUFDZixJQUFBclEsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZixJQUFBaHNCLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBRWYsT0FDRSxrQ0FDRTlGLElBQUtpaUMsRUFDTHRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixVQUNQLFVBQU85USxTQUVMLEVBQUMsVUFBT29RLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9FLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsYUFBY0EsRUFDdEIsRUFBQyxVQUFPNEYsV0FBWWhHLEdBQVdRLEVBQVk1NkIsU0FBUyxPQUNwRCxFQUFDLFVBQU8rNkIsYUFBY1gsR0FBV1EsRUFBWTU2QixTQUFTLFNBQ3RELEVBQUMsVUFBT3FnQyxjQUFlakcsR0FBV1EsRUFBWTU2QixTQUFTLFVBQ3ZELEVBQUMsVUFBTzg2QixZQUFhVixHQUFXUSxFQUFZNTZCLFNBQVMsV0FFdkQ0TixJQUVGb00sU0FBVUEsRUFDVnZMLFFBQVNBLEVBQ1QxUSxLQUFNQSxFQUNOaTlCLEtBQUssVUFFTCx3QkFBQyxFQUFBcUQsS0FBSSxDQUFDQyxJQUFLQSxFQUFLaHJCLElBQUtBLEVBQUt5VyxLQUFNQSxFQUFNb1EsU0FBVUEsSUFDL0M1d0IsRUFHUCw4TEN2RUEsY0FBUywrRUFBQUgsT0FBTywrdUJDQWhCLGlCQUVBLGFBQ0EsVUFDQSxhQTJFQSxVQWxEQSxTQUF3QixTQUNsQndZLEVBQVMsS0FDYnNZLEVBQVksZUFDWjN3QixFQUFRLFdBQ1JxRSxFQUFTLFlBQ1Qwd0IsRUFBRyxNQUNIaHJCLEVBQUcsTUFDSCxJQUFBNm1CLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFKLFFBQUFBLE9BQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQVEsWUFBQUEsT0FBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQTVnQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBK1AsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDWjdpQixFQUFLLElBZmMsbUpBcUJ0QixZQUp5QixJQUFkMGEsSUFDVEEsRUFBWSxLQUlaLHdCQUFDQSxFQUFTLEdBQ1IzcEIsSUFBS2lpQyxFQUFZLGNBQ0wsbUJBQ1p0c0IsV0FBVyxhQUFTLENBQ2xCLFVBQU9pdEIsVUFDUCxVQUFPOVEsU0FFTCxFQUFDLFVBQU9vUSxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPRSxVQUFXQSxFQUNuQixFQUFDLFVBQU92Z0IsVUFBV0EsRUFDbkIsRUFBQyxVQUFPd2dCLGFBQWNBLEVBQ3RCLEVBQUMsVUFBTzRGLFdBQVloRyxHQUFXUSxFQUFZNTZCLFNBQVMsT0FDcEQsRUFBQyxVQUFPKzZCLGFBQWNYLEdBQVdRLEVBQVk1NkIsU0FBUyxTQUN0RCxFQUFDLFVBQU9xZ0MsY0FBZWpHLEdBQVdRLEVBQVk1NkIsU0FBUyxVQUN2RCxFQUFDLFVBQU84NkIsWUFBYVYsR0FBV1EsRUFBWTU2QixTQUFTLFdBRXZENE4sS0FFRTFHLEdBRUosd0JBQUMsRUFBQW0zQixLQUFJLENBQUNDLElBQUtBLEVBQUtockIsSUFBS0EsRUFBS3lXLEtBQU1BLEVBQU1vUSxTQUFVQSxJQUMvQzV3QixFQUdQLGtNQzdFQSxhQUFTLG1GQUFBSCxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBdURBLFVBeENBLFNBQXdCLE9BQ3RCazFCLEVBQUcsTUFDSGhyQixFQUFHLE1BQ0hndEIsRUFBUSxXQUNSQyxFQUFTLFlBQ1RoM0IsRUFBUSxXQUNSMndCLEVBQVksZUFDWixJQUFBOUQsT0FBQUEsT0FBTSxJQUFHLFlBQVMsRUFDbEIsSUFBQW9LLFNBQUFBLE9BQVEsSUFBRyxTQUFNLEVBQ2pCLElBQUFDLFFBQUFBLE9BQU8sSUFBRyxVQUFPLEVBQ2pCdjBCLEVBQUssUUFFQ3cwQixFQUNKLCtCQUNFOXlCLFdBQVcsYUFBUyxDQUFDLFVBQU8reUIsTUFBTyxVQUFPdkssS0FDMUMrSixZQUFZLFlBQVcsY0FDWCxRQUNaN3NCLElBQUtBLEVBQ0xnckIsSUFBS0EsRUFDTGp5QixNQUFPaTBCLEVBQ1BoMEIsT0FBUWkwQixFQUNSQyxTQUFVQSxFQUNWQyxRQUFTQSxFQUNUdjBCLE1BQU9BLElBSVgsT0FBTzNDLEVBQ0wsK0JBQ0V0UixJQUFLaWlDLEVBQ0x0c0IsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXLFVBQU8rRixjQUU3Q0YsRUFDQW4zQixHQUFZLCtCQUFLcUUsVUFBVyxVQUFPaXpCLFNBQVV0M0IsSUFFOUMsQ0FHTix5TEN4REEsY0FBUywwRUFBQUgsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxhQXFCQSxVQVpBLFNBQWUsT0FBRXdFLEVBQVMsWUFBRXJFLEVBQVEsV0FBRWhRLEVBQUssUUFBRTJnQyxFQUFZLGVBQ3ZELE9BQ0UsaUNBQ0VqaUMsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixLQUV0Q3JVLEVBQ0FnUSxFQUdQLHlMQ3RCQSxjQUFTLDBFQUFBSCxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBb0NBLFVBMUJBLFNBQWtCLE9BQ2hCRyxFQUFRLFdBQ1JxRSxFQUFTLFlBQ1Rzc0IsRUFBWSxlQUNab0MsRUFBTSxTQUNOd0UsRUFBYSxnQkFFYixPQUNFLCtCQUFLN29DLElBQUtpaUMsRUFBY3RzQixXQUFXLGFBQVMsQ0FBQyxVQUFPaXRCLFVBQVdqdEIsTUFDM0QwdUIsR0FBVXdFLElBQ1YsK0JBQUtsekIsVUFBVyxVQUFPMHVCLFFBQ3BCQSxHQUNDLDhCQUFJMXVCLFVBQVcsVUFBT216QixZQUFhdFgsR0FBSTZTLEVBQU83UyxJQUMzQzZTLEVBQU9oeUIsTUFHWHcyQixHQUdMLGdEQUFxQnhFLGFBQU0sRUFBTkEsRUFBUTdTLEdBQUk3YixVQUFXLFVBQU9vekIsTUFDaER6M0IsR0FJVCwwS0NyQ0EsaUJBQ0EsYUFFQSxVQUVBLGFBMkNBLFVBOUJBLFNBQXNCLE9BQ3BCQSxFQUFRLFdBQ1IsSUFBQWtVLE9BQUFBLE9BQU0sSUFBRyxHQUFLLEVBQ2QsSUFBQXpELFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUF3Z0IsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUYsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQXZRLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2YsSUFBQWlGLE1BQUFBLE9BQUssSUFBRyxXQUFRLEVBQ2hCLElBQUF2Z0IsUUFBQUEsT0FBTyxJQUFHLGFBQU8sRUFBQyxFQUVsQixPQUNFLDhCQUFJYixXQUFXLGFBQVMsQ0FBQyxVQUFPcXpCLGdCQUM5Qix3QkFBQyxFQUFBdkMsT0FBTSxDQUNMandCLFFBQVNBLEVBQ1R1TCxTQUFVQSxFQUNWbWdCLFNBQVUxYyxFQUNWK2MsWUFBYUEsRUFDYkYsVUFBV0EsRUFDWHRMLE1BQU9BLEVBQ1BqRixLQUFNQSxFQUNOMFEscUJBQW1CLEVBQ25CSixVQUFRLEVBQ1JFLFVBQVEsR0FFUGh4QixHQUlULDh1QkM5Q0EsaUJBQ0EsYUFFQSxRQUNBLGFBaURBLFVBbENBLFNBQTBCLEdBQ3hCLElBQUFBLEVBQVEsV0FDSnFZLEVBQVMsS0FDYixJQUFBbkUsT0FBQUEsT0FBTSxJQUFHLEdBQUssRUFDZCxJQUFBK2MsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUYsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQXRMLE1BQUFBLE9BQUssSUFBRyxXQUFRLEVBQ2hCLElBQUFqRixLQUFBQSxPQUFJLElBQUcsV0FBUSxFQUNaN2lCLEVBQUssSUFSZ0IscUVBY3hCLFlBSnlCLElBQWQwYSxJQUNUQSxFQUFZLEtBSVosOEJBQUloVSxXQUFXLGFBQVMsQ0FBQyxVQUFPcXpCLGdCQUM5Qix3QkFBQyxFQUFBQyxXQUFVLEdBQ1RDLEdBQUl2ZixFQUNKdVksU0FBVTFjLEVBQ1YrYyxZQUFhQSxFQUNiRixVQUFXQSxFQUNYdEwsTUFBT0EsRUFDUGpGLEtBQU1BLEVBQ04wUSxxQkFBbUIsRUFDbkJKLFVBQVEsRUFDUkUsVUFBUSxHQUNKcnpCLEdBRUhxQyxHQUlULDhOQ25EQSxjQUFTLDZFQUFBSCxPQUFPLElBQ2hCLGNBQVMsaUZBQUFBLE9BQU8sSUFDaEIsY0FBUyxxRkFBQUEsT0FBTywreUJDRmhCLGlCQU9BLGFBRUEsVUFDQSxhQWlGQSxVQXJFQSxTQUFjLFdBQ1pHLEVBQVEsV0FDUjJ3QixFQUFZLGVBQ1p0c0IsRUFBUyxZQUNULElBQUEydUIsT0FBQUEsT0FBTSxJQUFHLEdBQUksRUFDYkQsRUFBTSxTQUNOYSxFQUFNLFNBQ04sSUFBQWlFLFlBQUFBLE9BQVcsSUFBRyxHQUFJLEVBRVpDLEdBQWdCLElBQUF0N0IsWUFBVyxFQUFBdTdCLGtCQUMzQjFSLEdBQVcsSUFBQTEzQixRQUE4QixNQUN6Q0QsRUFBTWlpQyxHQUFnQnRLLEVBRTVCLElBQUt5UixFQUNILE1BQU0sSUFBSUUsTUFDUixnRUFxQkosT0FsQkEsSUFBQTVoQyxrQkFBZ0IsV0FDZCxHQUFJeWhDLEdBQWVucEMsRUFBSUssUUFBUyxDQUN4QixNQUFrQkwsRUFBSUssUUFBUWtwQyx3QkFBNUIsRUFBRyxNQUFFQyxFQUFNLFNBQ2JDLEVBQ3VCLFFBQTNCTCxFQUFjckMsU0FBcUIsRUFBTTdoQyxPQUFPd2tDLFlBQWNGLEVBRWhFLEdBQUlDLEVBQWlCLEVBQUcsQ0FDdEIsSUFBTUUsRUFBTzNwQyxFQUFJSyxRQUFRdXBDLGNBQWMsTUFDakNDLEVBQWdCRixFQUFLRyxpQkFBaUIsUUFDdENDLEVBQVlKLEVBQUt6VCxhQUFldVQsRUFDaENuTyxFQUFTdU8sRUFBY3ByQyxPQUN6QjRVLGlCQUFpQncyQixFQUFjLElBQUlHLFVBQ25DLEVBQ0pMLEVBQUsxMUIsTUFBTWcyQixVQUFZLGVBQVFGLEVBQVMsZ0JBQVF6TyxFQUFNLE1BRzVELEdBQUcsQ0FBQ2dKLEVBQVE4RSxFQUFlRCxJQUV0QjdFLEVBS0gsZ0RBQ0UsK0JBQ0V0a0MsSUFBS0EsRUFDTDJWLFdBQVcsYUFBUyxDQUNsQixVQUFPdTBCLFdBQ0wsRUFBQyxVQUFPL0UsTUFBT2IsRUFBTSxHQUN2QjN1QixLQUdGLG1DQUNHMHVCLEdBQVVDLEdBQVUsOEJBQUkzdUIsVUFBVyxVQUFPMHVCLFFBQVNBLEdBQ3BELGtDQUFLL3lCLElBRU40ekIsR0FBVVosR0FDVCwrQkFDRTN1QixXQUFXLGFBQVMsQ0FDbEIsVUFBT3V2QixhQUNMLEVBQUMsVUFBTzVDLFdBQVloeEIsRUFBUSxNQUcvQjR6QixLQXhCRixJQThCWCx3MEJDekZBLGlCQU9BLGFBRUEsYUFjYSxFQUFBbUUsaUJBQW1CLFVBQU01N0IsbUJBRXBDNUwsR0E2QkYsV0FBZSxJQUFBc29DLGFBM0JmLFNBQ0UsRUFNQW5xQyxPQUxFc1IsRUFBUSxXQUNSODFCLEVBQU0sU0FDTnp4QixFQUFTLFlBQ1QsSUFBQW14QixVQUFBQSxPQUFTLElBQUcsR0FBRUUsV0FBWSxPQUFRRCxTQUFVLFVBQVUsRUFJeEQsT0FDRSwrQkFBSy9tQyxJQUFLQSxFQUFLMlYsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXanRCLEtBQ25EeXhCLEVBQ0Qsd0JBQUMsRUFBQWlDLGlCQUFpQng1QixTQUFRLENBQUN2TyxPQUFPLElBQUFvTixVQUFRLFdBQU0sT0FBQW80QixDQUFBLEdBQVcsQ0FBQ0EsS0FDMUQsK0JBQ0VueEIsV0FBVyxhQUFTLENBQ2xCLFVBQU95MEIsY0FDUCxVQUFPdEQsRUFBVUUsWUFDakIsVUFBT0YsRUFBVUMsYUFHbEJ6MUIsSUFLWCw0S0NwREEsaUJBQ0EsYUFFQSxZQWdDQSxVQXRCQSxTQUFrQixXQUNoQkEsRUFBUSxXQUNScUUsRUFBUyxZQUNUYSxFQUFPLFVBQ1AsSUFBQTZyQixVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBbUYsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFFaEIsT0FDRSw4QkFDRTd4QixXQUFXLGFBQVMsQ0FDbEIsVUFBTzAwQixlQUNMLEVBQUMsVUFBTzdrQixRQUFTZ2lCLEVBQVEsU0FDekIsRUFBQyxVQUFPbkYsV0FBWUEsRUFBUyxHQUMvQjFzQixJQUVGYSxRQUFTQSxHQUVSbEYsRUFHUCw4dUJDakNBLGlCQUNBLGFBRUEsYUFxQ0EsVUExQkEsU0FBc0IsU0FDaEJxWSxFQUFTLEtBQ2JyWSxFQUFRLFdBQ1JxRSxFQUFTLFlBQ1QsSUFBQTBzQixVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNkcHpCLEVBQUssSUFMWSwyQ0FXcEIsWUFKeUIsSUFBZDBhLElBQ1RBLEVBQVksS0FJWix3QkFBQ0EsRUFBUyxpQkFDSSxpQkFDWmhVLFdBQVcsYUFBUyxDQUNsQixVQUFPMjBCLGFBQ1AzMEIsUUFDRSxFQUFDLFVBQU8wc0IsV0FBWUEsRUFBUyxNQUU3QnB6QixHQUVIcUMsRUFHUCxrT0N0Q0EsYUFBUyx5RUFBQUgsT0FBTyxJQUNoQixjQUFTLGtGQUFBQSxPQUFPLElBQ2hCLGNBQVMsNkVBQUFBLE9BQU8sSUFDaEIsY0FBUyxpRkFBQUEsT0FBTyxnekJDSGhCLGlCQUNBLFVBQ0EsYUFFQSxhQXFFQSxVQXZEQSxTQUFlLFdBQ2JHLEVBQVEsV0FDUjJ3QixFQUFZLGVBQ1pxQyxFQUFNLFNBQ044QyxFQUFNLFNBQ04sSUFBQTdFLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFILFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFzQyxVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBRCxRQUFBQSxPQUFPLElBQUcsYUFBTyxFQUFDLEVBQ2xCLElBQUFFLFdBQUFBLE9BQVUsSUFBRyxPQUFJLEdBRWpCLElBQUEvakIsWUFBVyxTQUFVNmpCLEdBRXJCLElBQU04RixHQUFxQixJQUFBam9DLGNBQVksV0FDckNtaUMsR0FDRixHQUFHLENBQUNBLElBRUosT0FDRUgsR0FDRSwrQkFBS3RrQyxJQUFLaWlDLEdBQ1IsK0JBQ0VodUIsTUFBTyxDQUFFdTJCLE9BQVE3RixHQUNqQmh2QixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l6QixjQUNMLEVBQUMsVUFBT2xFLFdBQVlBLEVBQVMsS0FDL0IsY0FDVSxnQkFDWmx1QixRQUFTK3pCLElBRVgsK0JBQ0V0MkIsTUFBTyxDQUFFdTJCLE9BQVE3RixFQUFhLEdBQzlCaHZCLFdBQVcsYUFBUyxDQUNsQixVQUFPODBCLFlBRUwsRUFBQyxVQUFPbEksYUFBY0EsRUFDdEIsRUFBQyxVQUFPSCxVQUFXQSxPQUVyQixjQUNVLFNBRVg5d0IsR0FFRjgxQixHQUNDLCtCQUNFbnpCLE1BQU8sQ0FBRXUyQixPQUFRN0YsRUFBYSxHQUM5Qmh2QixVQUFXLFVBQU8rMEIsYUFFakJ0RCxHQU1iLHlMQ3ZFQSxjQUFTLDBFQUFBajJCLE9BQU8sNExDQWhCLGlCQUVBLFVBQ0EsVUFFQSxhQUVBLGFBSU13NUIsRUFBYyxTQUFDQyxFQUFnQkMsR0FDbkMsT0FBZ0IsR0FBVEQsRUFBY0MsQ0FDdkIsRUFFTUMsRUFBVyxTQUFDRixHQUNoQixPQUFPbitCLEtBQUs2dkIsTUFBTXNPLEVBQVMsR0FDN0IsRUFFTUcsRUFBaUIsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxLQVF4RCxFQUFBQyxPQUFTLFVBQU1iLFlBQzFCLFNBQUMsRUFBd0NucUMsT0FBdEM0cUMsRUFBTSxTQUFFNTJCLEVBQVEsV0FBRSxJQUFBK04sU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFjN0JrcEIsRUFBMEIsU0FBQ0MsR0FDL0IsZ0JBQUNqcUMsR0FDQ0EsRUFBRWlkLGtCQUVGbEssRUFBU2szQixFQUNYLENBSkEsRUFNSUMsRUFBYTNrQyxNQUFNLElBQ3RCNGtDLEtBQUssR0FDTHpoQyxLQUFJLFNBQUMxRyxFQUFHZ0QsR0FDUCxJQUFNb2xDLEdBQWdCcGxDLEVBQVEsR0FBSyxHQUNuQyxPQUNFLHdCQUFDLEVBQUF3Z0MsT0FBTSxDQUNMOW5DLElBQUtzSCxFQUNMOGIsU0FBVUEsRUFDVnVnQixVQUFRLEVBQ1JGLFVBQVEsRUFDUkosY0FBZWlKLEVBQXdCTixFQUFZQyxFQUFRUyxLQUUxREEsRUFHUCxJQUVGLE9BQ0UsK0JBQUsxMUIsVUFBVyxVQUFJMjFCLE9BQVF0ckMsSUFBS0EsRUFBS2tYLFVBQVcsRUFBRzdCLFVBdENoQyxTQUFDcFUsR0FDckIsR0FBYyxjQUFWQSxFQUFFdEMsSUFDSnNDLEVBQUVpZCxrQkFFRmxLLEVBQVM4MkIsRUFBU0YsU0FDYixHQUFJRyxFQUFlaGpDLFNBQVM5RyxFQUFFdEMsS0FBTSxDQUN6Q3NDLEVBQUVpZCxrQkFFRixJQUFNMnNCLEVBQVFVLFNBQVN0cUMsRUFBRXRDLElBQUssSUFDOUJxVixFQUFTMjJCLEVBQVlDLEVBQVFDLElBRWpDLEVBMkI4RSxjQUFjLFVBQ3hGLCtCQUFLbDFCLFVBQVcsVUFBSTYxQixTQUNqQkwsRUFDRCx3QkFBQyxFQUFBMUUsT0FBTSxDQUNMMWtCLFNBQVVBLEVBQ1Z1Z0IsVUFBUSxFQUNSRixVQUFRLEVBQ1JHLGFBQVcsRUFDWFAsY0FBZWlKLEVBQXdCSCxFQUFTRixLQUVoRCx3QkFBQyxFQUFBeEUsS0FBSSxDQUFDL3FCLElBQUksWUFBWWdyQixJQUFLLGNBS3JDLGtHQ2xGRixjQUFTLHdFQUFBMkUsTUFBTSw0S0NBZixpQkFDQSxhQUNBLFlBbUNBLFVBekJBLFNBQWlCLFNBQ2YxNUIsRUFBUSxXQUNSMndCLEVBQVksZUFDWixJQUFBTSxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBa0osUUFBQUEsT0FBTyxJQUFHLEdBQUssRUFDZixJQUFBajFCLFFBQUFBLE9BQU8sSUFBRyxhQUFPLEVBQUMsRUFFbEIsT0FDRSwrQkFDRXhXLElBQUtpaUMsRUFBWSxjQUNMLFVBQ1p0c0IsV0FBVyxhQUFTLENBQ2xCLFVBQU9pekIsY0FFTCxFQUFDLFVBQU9yRyxhQUFjQSxFQUN0QixFQUFDLFVBQU95RixPQUFReUQsT0FHcEJqMUIsUUFBU0EsR0FFUmxGLEVBR1AsMkxDbkNBLGNBQVMsNEVBQUFILE9BQU8sK3lCQ0FoQixpQkFDQSxhQUVBLGFBQ0EsVUFFQSxVQUNBLFVBQ0EsYUFDQSxVQXdDQSxVQWhDQSxTQUFxQixTQUFFd0UsRUFBUyxZQUFFelMsRUFBSyxRQUFFdEQsRUFBTyxVQUN0QzhyQyxHQUFzQixJQUFBNTlCLFlBQVcsRUFBQTY5QixlQUFjLGtCQUNqRCxHQUEyQixJQUFBaDlCLFdBQVUrOEIsR0FBcENFLEVBQVEsS0FBRUMsRUFBWSxLQUV2QkMsR0FBbUIsSUFBQXhwQyxjQUFZLFdBQ25DdXBDLEdBQ0YsR0FBRyxJQUVILE9BQ0UsK0JBQUtsMkIsVUFBV0EsR0FDZCwrQkFBS0EsVUFBVyxVQUFPMHVCLE9BQVE3dEIsUUFBU3MxQixHQUN0QywrQkFBS24yQixVQUFXLFVBQU96UyxPQUFRQSxHQUMvQix3QkFBQyxFQUFBNm9DLFdBQVUsQ0FDVHAyQixXQUFXLGFBQVMsT0FDaEIsRUFBQyxVQUFPaTJCLFVBQVdBLEVBQVEsS0FFL0J2RixJQUFLLFVBQ0xockIsSUFBS3V3QixFQUFXLFdBQWEsU0FDN0J0SixVQUFRLEVBQ1JDLGFBQVcsS0FHZHFKLEdBQ0Noc0MsRUFBUStKLEtBQUksU0FBQzJSLEdBQVcsT0FDdEIsd0JBQUMsRUFBQTB3QixPQUFNLENBQUNydEMsSUFBSzJjLEVBQU9oYSxNQUFPTSxLQUFNMFosR0FDOUJBLEVBQU9wWSxNQUZZLElBT2hDLCtMQy9DQSxhQUFTLGdGQUFBaU8sT0FBTyxnekJDQWhCLGlCQUtBLGFBRUEsYUFDQSxVQUNBLFVBNkNBLFVBcENBLFNBQWdCLFNBQUVHLEVBQVEsV0FBRXFFLEVBQVMsWUFBRS9ULEVBQUksT0FDbkMsR0FDSixJQUFBa00sWUFBVyxFQUFBNjlCLGVBRExoRSxFQUFRLFdBQUVzRSxFQUFlLGtCQUFFQyxFQUFvQix1QkFHakRDLEdBQVksSUFBQXo5QixVQUNoQixXQUFNLE9BQUF1OUIsRUFBZ0J0aUMsS0FBSSxTQUFDLEdBQWMsT0FBUCxPQUFPLElBQU81QixTQUFTbkcsRUFBS04sTUFBeEQsR0FDTixDQUFDTSxFQUFNcXFDLElBR0g5ckMsR0FBYyxJQUFBbUMsY0FBWSxXQUM5QjRwQyxFQUFxQnRxQyxFQUN2QixHQUFHLENBQUNBLEVBQU1xcUMsSUFFVixPQUNFLCtCQUNFdDJCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLGdCQUNMLEVBQUMsVUFBT3FCLFVBQVdrSSxJQUFjeEUsRUFBUSxHQUMzQ2h5QixJQUVGYSxRQUFTclcsR0FFUnduQyxHQUNDLGdDQUFNaHlCLFVBQVcsVUFBT3kyQixtQkFDdEIsd0JBQUMsRUFBQUMsU0FBUSxDQUNQMTJCLFVBQVcsVUFBTzZ0QixTQUNsQkwsUUFBU2dKLEVBQ1RyYSxLQUFLLFdBSVgsZ0NBQU1uYyxVQUFXLFVBQU96UyxPQUFRb08sR0FHdEMsMExDcERBLGNBQVMsMkVBQUFILE9BQU8sbXdDQ0FoQixjQUNBLGFBR0EsVUFDQSxVQUNBLFVBQ0EsVUFFQSxhQVNhLEVBQUFtN0IsU0FBVyxTQUN0Qmh4QixHQUVBLFlBQXdDelosSUFBaEN5WixFQUFzQmhhLEtBQ2hDLEVBd0pBLFVBdEpBLFNBQW9CLE9BQUUxQixFQUFPLFVBQUUyc0MsRUFBUSxXQUFFdjRCLEVBQVEsV0FDekMsR0FBNkMsSUFBQXJGLFlBQVUsR0FBdEQ2OUIsRUFBZ0IsS0FBRUMsRUFBc0IsS0FDekMsR0FNRixJQUFBMytCLFlBQVcsRUFBQTY5QixlQUxiaEUsRUFBUSxXQUNSK0UsRUFBYSxnQkFDYkMsRUFBUyxZQUNUVixFQUFlLGtCQUNmVyxFQUFrQixxQkFHZEMsRUFBaUJqdEMsRUFBUTh2QixNQUFLLFNBQUNwVSxHQUFXLFFBQUMsSUFBQWd4QixVQUFTaHhCLEVBQVYsSUFFMUN3eEIsRUFBZ0IsU0FBQ2x0QyxHQUNyQixJQUFNbXRDLEVBQVVMLEVBQWNuN0IsY0FBY3k3QixPQUU1QyxPQUFPRCxFQUFRdHVDLE9BQ1htQixFQUFRNFQsUUFBTyxTQUFDOEgsR0FDZCxPQUFBaXhCLEVBQ0lBLEVBQVNqeEIsRUFBUXl4QixHQUNqQnp4QixFQUFPcFksTUFBTXFPLGNBQWN4SixTQUFTZ2xDLEVBRnhDLElBSUZudEMsQ0FDTixFQUVNcXRDLEdBQWtCLElBQUF2K0IsVUFBNkMsV0FDbkUsT0FBSW0rQixFQUNLanRDLEVBQVFzdEMsUUFDYixTQUFDQyxFQUFrQ0MsR0FDakMsSUFBTUMsRUFBdUJQLEVBQWNNLEVBQVl4dEMsU0FFdkQsT0FBSXl0QyxFQUFxQjV1QyxPQUNoQixFQUFQLEtBQ0swdUMsR0FBUSxXQUNOQyxHQUFXLENBQUV4dEMsUUFBU3l0QyxTQUl4QkYsQ0FDVCxHQUNBLElBR0tMLEVBQWNsdEMsRUFFekIsR0FBRyxDQUFDaXRDLEVBQWdCanRDLEVBQVM4c0MsSUFFdkJZLEdBQXVCLElBQUE1K0IsVUFBUSxXQUNuQyxPQUFPdStCLEVBQWdCQyxRQUFPLFNBQUN6dUMsRUFBZ0I4dUMsR0FDN0MsT0FBSSxJQUFBakIsVUFBU2lCLEdBQ0o5dUMsRUFBUyxFQUVUQSxFQUFTOHVDLEVBQVczdEMsUUFBUW5CLE1BRXZDLEdBQUcsRUFDTCxHQUFHLENBQUNvdUMsRUFBZ0JJLEVBQWlCLEVBQUFYLFdBRS9Ca0IsR0FBdUIsSUFBQTkrQixVQUFRLFdBQ25DLE9BQU91OUIsRUFBZ0J6NEIsUUFBTyxTQUFDaTZCLEdBQzdCLE9BQU9SLEVBQWdCcHRCLE1BQUssU0FBQzZ0QixHQUMzQixPQUFPLElBQUFwQixVQUFTb0IsR0FDWkEsRUFBZXBzQyxRQUFVbXNDLEVBQWVuc0MsTUFDeENvc0MsRUFBZTl0QyxRQUFRaWdCLE1BQ3JCLFNBQUN2RSxHQUFXLE9BQUFBLEVBQU9oYSxRQUFVbXNDLEVBQWVuc0MsS0FBaEMsR0FFcEIsR0FDRixJQUFHN0MsTUFDTCxHQUFHLENBQUN3dEMsRUFBaUJnQixJQUVmVSxHQUF1QixJQUFBcnJDLGNBQVksV0FDdkMsR0FBS2txQyxFQVVISSxFQUFtQixJQUNuQjU0QixHQUFZQSxFQUFTLFFBWEEsQ0FDckIsSUFBTTQ1QixFQUFrQlgsRUFDckJ0akMsS0FBSSxTQUFDK2pDLEdBQ0osV0FBQXBCLFVBQVNvQixHQUFrQkEsRUFBaUJBLEVBQWU5dEMsT0FBM0QsSUFFRGl1QyxPQUVIakIsRUFBbUJnQixHQUNuQjU1QixHQUFZQSxFQUFTNDVCLEVBQWdCamtDLEtBQUksU0FBQyxHQUFjLE9BQVAsT0FBTyxLQU0xRDhpQyxHQUNGLEdBQUcsQ0FDRFEsRUFDQSxFQUFBWCxTQUNBRSxFQUNBSSxFQUNBSCxJQWdCRixPQWJBLElBQUF2c0MsWUFBVSxXQUNKc3RDLElBQXlCRixFQUMzQmIsR0FBdUIsR0FDZEQsR0FDVEMsR0FBdUIsRUFFM0IsR0FBRyxDQUNEZSxFQUNBRixFQUNBZCxFQUNBQyxJQUlBLCtCQUFLOTJCLFVBQVcsVUFBT2l0QixXQUNwQitKLEdBQWFoRixLQUFjc0YsRUFBZ0J4dUMsUUFDMUMsK0JBQ0VrWCxVQUFXLFVBQU9tNEIsbUJBQ2xCdDNCLFFBQVNtM0IsR0FFVCxnQ0FBTWg0QixVQUFXLFVBQU95MkIsbUJBQ3RCLHdCQUFDLEVBQUFDLFNBQVEsQ0FDUDEyQixVQUFXLFVBQU82dEIsU0FDbEJMLFFBQVNxSixFQUNUcEosZ0JBQ0lvSyxHQUNGQSxJQUF5QkYsRUFFM0J4YixLQUFLLFdBR1QsZ0NBQU1uYyxVQUFXLFVBQU96UyxPQUFLLGVBRzlCK3BDLEVBQWdCeHVDLE9BQ2pCd3VDLEVBQWdCdGpDLEtBQUksU0FBQzJSLEdBQ25CLFdBQUFneEIsVUFBU2h4QixHQUNQLHdCQUFDLEVBQUEwd0IsT0FBTSxDQUFDcnRDLElBQUsyYyxFQUFPaGEsTUFBT00sS0FBTTBaLEdBQzlCQSxFQUFPcFksT0FHVix3QkFBQyxFQUFBNnFDLFlBQVcsQ0FDVnB2QyxJQUFLMmMsRUFBT3BZLE1BQ1pBLE1BQU9vWSxFQUFPcFksTUFDZHRELFFBQVMwYixFQUFPMWIsU0FScEIsSUFhRiwrQkFBSytWLFVBQVcsVUFBT3E0Qiw0QkFFckIsZ0NBQU1yNEIsVUFBVyxVQUFPKzJCLGVBQWdCLFdBQUlBLEtBS3RELHlNQzVLQSxjQUFTLCtFQUFBdjdCLE9BQU8sSUFBZ0IsMEVBQUFtN0IsUUFBUSxnekJDQXhDLGlCQUNBLGFBRUEsYUFDQSxVQUNBLFVBQ0EsVUFDQSxhQUNBLGFBQ0EsVUE2Q0EsVUF2Q0EsU0FBZ0IsT0FBRTMyQixFQUFTLFlBQ25CLEdBQXNDLElBQUE3SCxZQUFXLEVBQUE2OUIsZUFBL0NlLEVBQWEsZ0JBQUV1QixFQUFnQixtQkFFakNDLEdBQTRCLElBQUE1ckMsY0FDaEMsU0FBQ2hCLEdBQ0Myc0MsRUFBaUIzc0MsRUFDbkIsR0FDQSxDQUFDb3JDLElBR0d5QixHQUFnQyxJQUFBN3JDLGNBQVksV0FDaEQyckMsRUFBaUIsR0FDbkIsR0FBRyxJQUVILE9BQ0UsK0JBQUt0NEIsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXanRCLEtBQzFDLCtCQUFLQSxVQUFXLFVBQU95NEIscUJBQ3JCLHdCQUFDLEVBQUFoSSxLQUFJLENBQUNDLElBQUssYUFFYix3QkFBQyxFQUFBZ0ksVUFBUyxDQUNSL3NDLE1BQU9vckMsRUFDUHhKLFlBQVksb0JBQ1psdkIsU0FBVWs2QixFQUNWNUwsVUFBUSxJQUVWLHdCQUFDLEVBQUF5SixXQUFVLENBQ1RwMkIsVUFBVyxVQUFPMjRCLFlBQ2xCakksSUFBSyxVQUNMaHJCLElBQUksUUFDSjdFLFFBQVMyM0IsRUFDVHBzQixVQUFXMnFCLEVBQ1hwSyxVQUFRLEVBQ1JGLFVBQVEsRUFDUkcsYUFBVyxJQUluQiwwTENwREEsY0FBUywyRUFBQXB4QixPQUFPLGd6QkNBaEIsaUJBQ0EsYUFFQSxhQUNBLGFBRUEsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUErSUEsVUExSEEsU0FBZ0IsYUFDZHdFLEVBQVMsWUFDVHNCLEVBQVksZUFDWjhLLEVBQVEsV0FDUixJQUFBNGxCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCL25DLEVBQU8sVUFDUHNqQyxFQUFXLGNBQ1hoZ0MsRUFBSyxRQUNMeXBDLEVBQVMsWUFDVGpCLEVBQWlCLG9CQUNqQixJQUFBNkMsbUJBQUFBLE9BQWtCLElBQUcsR0FBSyxFQUMxQixJQUFBemMsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZixJQUFBMGMsbUJBQUFBLE9BQWtCLElBQUcsR0FBSyxFQUMxQixJQUFBQyxXQUFBQSxPQUFVLElBQUcsR0FBSyxFQUNsQnI2QixFQUFLLFFBQ0xKLEVBQVEsV0FDUnU0QixFQUFRLFdBRUYsR0FBeUIsSUFBQTU5QixZQUFVLEdBQWxDKy9CLEVBQU0sS0FBRUMsRUFBWSxLQUVyQjN1QyxHQUFNLElBQUFGLGtCQUFnQixXQUFNLE9BQUE2dUMsR0FBYSxFQUFiLElBQzVCQyxHQUFhLElBQUEzdUMsVUFFYjR1QyxHQUFXLElBQUF2c0MsY0FBWSxXQUN0QnNzQyxFQUFXdnVDLFNBR2hCdXVDLEVBQVd2dUMsUUFBUXl1QyxlQUFlLENBQUVDLFNBQVUsU0FBVUMsTUFBTyxXQUNqRSxHQUFHLEtBRUgsSUFBQXRuQyxrQkFBZ0IsV0FDZCxHQUFLa25DLEVBQVd2dUMsU0FBWXF1QyxHQUFXSCxFQUF2QyxDQUlBLElBQUlVLEVBQUssSUFBSUMsZUFBZUwsR0FHNUIsT0FGQUksRUFBR0UsUUFBUVAsRUFBV3Z1QyxTQUVmLFdBQ0w0dUMsRUFBR0csYUFDSEgsRUFBSyxJQUNQLEVBQ0YsR0FBRyxDQUFDUCxFQUFRSCxFQUFvQk0sSUFFaEMsSUFBTVEsR0FBbUIsSUFBQS9zQyxjQUFZLFdBQ25DcXNDLEdBQ0YsR0FBRyxJQUVHdEwsR0FBZSxJQUFBL2dDLGNBQVksU0FBQzhtQixHQUMzQnVlLEdBQVVnSCxHQUFhLEdBRTVCMzZCLEdBQVlBLEVBQVNvVixFQUN2QixHQUFHLElBRUgsT0FDRSx3QkFBQyxFQUFBa21CLHNCQUFxQixDQUNwQnI0QixhQUFjQSxFQUNkMHdCLFNBQVVBLEVBQ1YvbkMsUUFBU0EsRUFDVG9VLFNBQVVxdkIsRUFDVnNKLFVBQVdBLEVBQ1hqQixrQkFBbUJBLEdBRW5CLCtCQUFLMXJDLElBQUtBLEdBQ1BrRCxFQUFRLHdCQUFDLEVBQUFvZ0MsTUFBSyxDQUFDaGlDLE1BQU80QixJQUFZLEtBQ25DLCtCQUNFeVMsV0FBVyxhQUFTLENBQ2xCLFVBQU9pdEIsZ0JBRUwsRUFBQyxVQUFPN2dCLFVBQVdBLEtBRXJCLFVBQU8rUCxHQUNQbmMsSUFFRjFCLE1BQU8sQ0FBRUcsTUFBSyxJQUVkLCtCQUNFdUIsV0FBVyxhQUFTLENBQUMsVUFBTzB1QixRQUFNLEtBQUksRUFBQyxVQUFPN2UsUUFBU2twQixFQUFNLEtBQzdEbDRCLFFBQVM2NEIsR0FFVCx3QkFBQyxFQUFBRSxTQUFRLENBQ1ByTSxZQUFhQSxFQUNic0wsbUJBQW9CQSxFQUNwQmdCLGlCQUFrQmQsSUFFcEIsd0JBQUMsRUFBQTNDLFdBQVUsQ0FDVHAyQixXQUFXLGFBQVMsQ0FDbEIsVUFBTzg1QixpQkFDTCxFQUFDLFVBQU83RCxVQUFXOEMsRUFBTSxLQUU3QnJJLElBQUssVUFDTGhyQixJQUFLcXpCLEVBQVMsV0FBYSxTQUMzQnBNLFVBQVEsRUFDUkMsYUFBVyxLQUdkbU0sR0FDQywrQkFBSy80QixVQUFXLFVBQU9xdEIsUUFBU2hqQyxJQUFLNHVDLEdBQ2YsSUFBbkJodkMsRUFBUW5CLE9BQ1AsK0JBQUtrWCxVQUFXLFVBQU9xNEIsV0FBUyx3QkFFaEMsZ0RBQ0dTLEdBQ0MsK0JBQUs5NEIsVUFBVyxVQUFPKzVCLGlCQUNyQix3QkFBQyxFQUFBQyxPQUFNLE9BR1gsd0JBQUMsRUFBQUMsV0FBVSxDQUNUaHdDLFFBQVNBLEVBQ1Qyc0MsU0FBVUEsRUFDVnY0QixTQUFVcXZCLFFBVTlCLHkrQkN6SkEsaUJBU0EsVUF1Qk13TSxFQUFtQyxDQUN2Q2xJLFVBQVUsRUFDVmdGLFdBQVcsRUFDWGpCLG1CQUFtQixFQUNuQk8sZ0JBQWlCLEdBQ2pCQyxxQkFBc0IsU0FBQzVxQyxHQUF1QixFQUM5Q29yQyxjQUFlLEdBQ2Z1QixpQkFBa0IsU0FBQzNzQyxHQUFtQixFQUN0Q3NyQyxtQkFBb0IsU0FBQ3hqQixHQUEwQixHQUczQ3VpQixHQUFnQixJQUFBbCtCLGVBQWtDb2lDLEdBeUYvQyxFQUFBbEUsY0FBQUEsRUFBZSxFQUFBMkQsc0JBdkZNLFNBQUMsT0FDN0JoK0IsRUFBUSxXQUNSMkYsRUFBWSxlQUNaLElBQUEwd0IsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQWdGLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFqQixrQkFBQUEsT0FBaUIsSUFBRyxHQUFJLEVBQ3hCOXJDLEVBQU8sVUFDUG9VLEVBQVEsV0FFRixHQUF3QyxJQUFBclMsVUFDNUNrdUMsRUFBYTVELGlCQURSQSxFQUFlLEtBQUVXLEVBQWtCLEtBR3BDLEdBQW9DLElBQUFqckMsVUFDeENrdUMsRUFBYW5ELGVBRFJBLEVBQWEsS0FBRXVCLEVBQWdCLEtBSWhDL0IsR0FBdUIsSUFBQTVwQyxjQUMzQixTQUFDZ1osR0FDQyxJQUFJdzBCLEVBRUZBLEVBREVuSSxFQUN1QnNFLEVBQWdCdmMsTUFDdkMsU0FBQyxHQUFjLE9BQVAsVUFBaUJwVSxFQUFPaGEsS0FBakIsSUFFYjJxQyxFQUFnQno0QixRQUFPLFNBQUMsR0FBYyxPQUFQLFVBQWlCOEgsRUFBT2hhLEtBQWpCLElBQ3RDLEVBQUQsS0FBSzJxQyxHQUFpQixHQUFGLENBQUUzd0IsSUFBTSxHQUVOLENBQUNBLEdBRTVCc3hCLEVBQW1Ca0QsR0FFbkI5N0IsR0FBWUEsRUFBUzg3QixFQUF1Qm5tQyxLQUFJLFNBQUMsR0FBYyxPQUFQLE9BQU8sSUFDakUsR0FDQSxDQUFDc2lDLEVBQWlCVyxLQUdwQixJQUFBMXNDLFlBQVUsV0FDUixHQUFJK1csRUFBYyxDQUNoQixJQUFNLEVBQWdCelEsTUFBTTRCLFFBQVE2TyxHQUNoQ0EsRUFDQSxDQUFDQSxHQUVENjRCLEVBQXlCLEdBQ3pCLEVBQWNyeEMsU0FTaEJxeEMsRUFSbUJsd0MsRUFBUXN0QyxRQUFPLFNBQUN4akMsRUFBS29XLEdBQ3RDLE9BQUksSUFBQXdzQixVQUFTeHNCLEdBQ0osRUFBUCxLQUFXcFcsR0FBSyxHQUFGLENBQUVvVyxJQUFJLEdBRWIsRUFBUCxLQUFXcFcsR0FBSyxHQUFHb1csRUFBS2xnQixTQUFPLEVBRW5DLEdBQUcsSUFFaUM0VCxRQUFPLFNBQUM4SCxHQUMxQyxTQUFjdlQsU0FBU3VULEVBQU9oYSxNQUE5QixLQUdKc3JDLEVBQW1Ca0QsR0FFdkIsR0FBRyxDQUFDNzRCLEVBQWNyWCxJQUVsQixJQUFNMnBCLEdBQW1DLElBQUE3YSxVQUN2QyxXQUFNLE9BQ0ppNUIsU0FBUSxFQUNSZ0YsVUFBUyxFQUNUakIsa0JBQWlCLEVBQ2pCTyxnQkFBZSxFQUNmQyxxQkFBb0IsRUFDcEJRLGNBQWEsRUFDYnVCLGlCQUFnQixFQUNoQnJCLG1CQUFrQixFQVJkLEdBVU4sQ0FDRUQsRUFDQVYsRUFDQVcsRUFDQVYsRUFDQVEsRUFDQXVCLElBSUosT0FDRSx3QkFBQ3RDLEVBQWM5N0IsU0FBUSxDQUFDdk8sTUFBT2lvQixHQUM1QmpZLEVBR1AsNnlCQ2xJQSxpQkFFQSxhQUNBLFVBQ0EsVUFDQSxhQTRGQSxVQXBGQSxTQUFrQixPQUNoQjR4QixFQUFXLGNBQ1hzTCxFQUFrQixxQkFDbEJnQixFQUFnQixtQkFFVixHQUNKLElBQUExaEMsWUFBVyxFQUFBNjlCLGVBRExNLEVBQWUsa0JBQUV0RSxFQUFRLFdBQUV1RSxFQUFvQix1QkFHakQ2RCxHQUFpQixJQUFBenRDLGNBQVksU0FBQ2xDLEdBQ2xDQSxFQUFNOGQsaUJBQ1IsR0FBRyxJQUVHOHhCLEdBQWlCLElBQUExdEMsY0FDckIsU0FBQ2xDLEVBQXNDa0IsR0FDckMsR0FBSUEsRUFBTyxDQUNULElBQU1nYSxFQUFTMndCLEVBQWdCcHNCLE1BQUssU0FBQ3ZFLEdBQVcsT0FBQUEsRUFBT2hhLFFBQVVBLENBQWpCLElBRTVDZ2EsR0FDRjR3QixFQUFxQjV3QixHQUd6QmxiLEVBQU04ZCxpQkFDUixHQUNBLENBQUMrdEIsSUFHR2dFLEdBQW9CLElBQUF2aEMsVUFDeEIsaUJBQU0sT0FDSixnQ0FDRWlILFdBQVcsYUFBUyxDQUNsQixVQUFPdXRCLGtCQUNMLEVBQUMsVUFBTzFkLFFBQVNncUIsRUFBZ0IsTUFHcEN0TSxFQVBDLEdBVU4sQ0FBQ0EsRUFBYXNNLElBR1ZVLEdBQWEsSUFBQXhoQyxVQUNqQixXQUNFLE9BQUN1OUIsRUFBZ0J4dEMsT0FHZixnREFDR3d0QyxFQUFnQnRpQyxLQUFJLFNBQUMsT0FBRXpHLEVBQUssUUFBRTVCLEVBQUssUUFBTyxPQUN6QyxnQ0FDRTNDLElBQUsyQyxFQUNMcVUsVUFBVyxVQUFPdzZCLFdBQ2xCMzVCLFFBQVN1NUIsR0FFVCx3QkFBQyxFQUFBSyxJQUFHLENBQUN6eEMsSUFBSzJDLEVBQU9BLE1BQU9BLEVBQU8rdUMsVUFBUSxFQUFDNUwsUUFBU3VMLEdBQzlDOXNDLEdBUG9DLEtBSnJCLENBQTFCLEdBaUJGLENBQUMrb0MsRUFBaUJnRSxJQUdkSyxFQUFhckUsRUFBZ0J4dEMsT0FDakMsZ0NBQ0VrWCxVQUFXLFVBQU9zMkIsaUJBQ2xCLFVBQUcvSSxFQUFXLGFBQUsrSSxFQUFnQnh0QyxPQUFNLE1BQ3pDLEVBZUosT0FWSWtwQyxFQUNRNkcsRUFBcUIwQixFQUFhSSxFQUVqQ3JFLEVBQWdCeHRDLE9BR3pCLGdDQUFNa1gsVUFBVyxVQUFPODNCLGdCQUFpQnhCLEVBQWdCLEdBQUcvb0MsT0FIMUIsQ0FReEMsNExDL0ZBLGFBQVMsNkVBQUFpTyxPQUFPLDRMQ0FoQixjQUFTLDJFQUFBQSxPQUFPLHFoQ0NBaEIsaUJBQ0EsYUFDQSxVQUNBLGFBRUEsYUFDQSxhQUVBLFVBRUEsYUF1TUEsVUFoS0EsU0FBZSxPQUNiby9CLEVBQU8sVUFDUEMsRUFBVSxhQUNWQyxFQUFVLGFBQ1ZDLEVBQVEsV0FDUkMsRUFBVSxhQUNWQyxFQUFJLE9BQ0pDLEVBQU8sVUFDUCxJQUFBQyxTQUFBQSxPQUFRLElBQUcsSUFBQUMsWUFBWUMsVUFBUyxFQUNoQ0MsRUFBVyxjQUNYL04sRUFBVyxjQUNYLElBQUF2TixVQUFBQSxPQUFTLElBQUcsSUFBQW9iLFlBQVlHLFdBQVUsRUFDbEMsSUFBQUMsYUFBQUEsT0FBWSxJQUFHLElBQUFKLFlBQVlLLGNBQWEsRUFDeENDLEVBQWlCLG9CQUNqQkMsRUFBVSxhQUNWQyxFQUFVLGFBQ1YsSUFBQUMsZUFBQUEsT0FBYyxJQUFHLEdBQUssRUFDdEIsSUFBQUMsaUJBQUFBLE9BQWdCLElBQUcsR0FBSSxFQUN2Qjk3QixFQUFTLFlBRUgsR0FBNEIsSUFBQWhVLFVBQVMsR0FBcEN1Z0IsRUFBUyxLQUFFd3ZCLEVBQVksS0FFeEJDLEdBQVksSUFBQXJ2QyxjQUNoQixTQUFDLE9BQUVWLEVBQUksT0FBRXFFLEVBQUssUUFBRWdPLEVBQUssUUFDYjI5QixFQUFNaHdDLEVBQUtxRSxHQUNqQixPQUNFLCtCQUFLZ08sTUFBSyxPQUFPQSxHQUFLLENBQUVtQyxJQUFLbkMsRUFBTW1DLE9BQ2pDLHdCQUFDLFVBQVEsQ0FDUHhVLEtBQU1nd0MsRUFDTnJCLFFBQVNBLEVBQ1RFLFdBQVlBLEVBQ1pDLFNBQVVBLEVBQ1YvYSxVQUFXQSxFQUNYNlIsWUFBWThKLGFBQVUsRUFBVkEsRUFBYU0sRUFBSXBnQixPQUlyQyxHQUNBLENBQUMrZSxFQUFTZSxFQUFZWixFQUFVL2EsRUFBVzhhLElBR3ZDb0IsR0FBbUIsSUFBQXZ2QyxjQUN2QixTQUFDLE9BQUVvNkIsRUFBWSxlQUNiZ1YsRUFBYWhWLEVBQ2YsR0FDQSxJQUdJb1YsR0FBVyxJQUFBeHZDLGNBQVksV0FDdkIrdUMsR0FJQWIsRUFBVy94QyxTQUFXOHlDLElBSXRCZixFQUFXL3hDLE9BQVNxeUMsRUFBV0YsR0FJL0JDLEdBQVdGLElBQ2JFLEVBQVFELEVBQU8sR0FDZkQsRUFBV0MsRUFBTyxJQUV0QixHQUFHLENBQ0RTLEVBQ0FiLEVBQVcveEMsT0FDWDh5QyxFQUNBVCxFQUNBRixFQUNBQyxFQUNBRixJQUdJamlCLEdBQWUsSUFBQXBzQixjQUNuQixTQUFDMkQsR0FDQyxPQUFJb3JDLEdBSUdwckMsRUFBUXVxQyxFQUFXL3hDLE9BQVMsRUFBQXN5QyxZQUFZZ0IsWUFDakQsR0FDQSxDQUFDdkIsRUFBVy94QyxPQUFRNHlDLElBR3RCLE9BQ0UsZ0RBQ0dJLEVBQ0MsK0JBQUs5N0IsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXanRCLEtBQzFDLCtCQUFLQSxVQUFXLFVBQU9qUSxPQUNyQix3QkFBQyxVQUFXLENBQ1Y2cUMsUUFBU0EsRUFDVHJ1QixVQUFXQSxFQUNYaXZCLGFBQWNBLElBRWJqTyxJQUFnQnNOLEVBQVcveEMsT0FDNUIsK0JBQ0VrWCxVQUFXLFVBQU9xOEIscUJBQ2xCLzlCLE1BQU8sQ0FBRUksT0FBUTQ4QixJQUVoQi9OLEdBR0gsd0JBQUMsVUFBYyxDQUNieFUsYUFBY0EsRUFDZEMsVUFBVzZoQixFQUFXL3hDLE9BQ3RCb3hCLGNBQWVpaUIsSUFFZCxTQUFDLE9BQUV4akIsRUFBZSxrQkFBRXR1QixFQUFHLE1BQU8sT0FDN0Isd0JBQUMsRUFBQXdnQyxjQUFhLENBQ1p4Z0MsSUFBS0EsRUFDTHFVLE9BQVE0OEIsRUFDUjc4QixNQUFNLE9BQ04wbkIsU0FBVW5HLEVBQ1ZoSCxVQUFXNmhCLEVBQVcveEMsT0FDdEJxNUIsU0FBVTBZLEVBQ1ZoYixTQUFVcWMsRUFDVnZqQixnQkFBaUJBLEVBQ2pCM1ksVUFBVyxVQUFPczhCLG9CQUVqQk4sRUFaMEIsTUFvQnZDLCtCQUNFaDhCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLFVBQ1AsVUFBT3FQLG1CQUNQdDhCLElBRUYxQixNQUFPLENBQUVJLE9BQVE0OEIsSUFFakIsd0JBQUMsVUFBVyxDQUNWVixRQUFTQSxFQUNUcnVCLFVBQVdBLEVBQ1hzdkIsZUFBZ0JBLEVBQ2hCTCxhQUFjQSxJQUVmWCxFQUFXN21DLEtBQUksU0FBQ2lvQyxFQUFLM3JDLEdBQVUsT0FDOUIsd0JBQUMsVUFBUSxDQUNQdEgsSUFBS3NILEVBQ0xyRSxLQUFNZ3dDLEVBQ05yQixRQUFTQSxFQUNURSxXQUFZQSxFQUNaQyxTQUFVQSxFQUNWL2EsVUFBV0EsRUFDWDZSLFlBQVk4SixhQUFVLEVBQVZBLEVBQWFNLGFBQUcsRUFBSEEsRUFBS3BnQixNQVJGLEtBZTFDLDBLQy9NQSxpQkFDQSxhQUVBLGFBR0EsYUFrQ0EsVUF6QkEsU0FBcUIsV0FDbkIrZSxFQUFPLFVBQ1BydUIsRUFBUyxZQUNUc3ZCLEVBQWMsaUJBQ2RMLEVBQVksZUFFWixPQUNFLCtCQUNFeDdCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLGdCQUNMLEVBQUMsVUFBT3NQLGdCQUFpQmh3QixFQUFTLFNBQ2xDLEVBQUMsVUFBT3N2QixnQkFBaUJBLEVBQWMsS0FFM0N2OUIsTUFBTyxDQUFFSSxPQUFRODhCLElBRWhCWixFQUFRNW1DLEtBQUksU0FBQ3dvQyxFQUFRbGYsR0FBZ0IsT0FDcEMsd0JBQUMsVUFBZSxDQUNkdDBCLElBQUssMEJBQW1CczBCLEdBQ3hCa2YsT0FBUUEsR0FIMEIsSUFRNUMsbWhDQ3RDQSxpQkFDQSxhQUVBLFVBQ0EsYUFDQSxhQUNBLFVBR0EsYUFrRUEsVUE1REEsU0FBeUIsU0FBRUEsRUFBTSxTQUU3QkMsRUFPRUQsRUFBTSxPQU5SRSxFQU1FRixFQUFNLFNBTFJHLEVBS0VILEVBQU0sT0FKUkksRUFJRUosRUFBTSxpQkFIUkssRUFHRUwsRUFBTSxNQUZSLzlCLEVBRUUrOUIsRUFBTSxNQURSeDhCLEVBQ0V3OEIsRUFBTSxVQUVKLEdBQTRCLElBQUF4d0MsV0FDaEMsV0FBTSxPQUFBNHdDLEdBQW9CLEVBQUFFLFVBQVVDLElBQTlCLElBRERDLEVBQVMsS0FBRUMsRUFBWSxLQUl4QkMsR0FBbUIsSUFBQXZ3QyxjQUFZLFdBQ25DLElBQUtnd0MsRUFDSCxPQUFPRixFQUFPTyxHQUVoQixJQUFNRyxFQUNKSCxJQUFjLEVBQUFGLFVBQVVDLEtBQU8sRUFBQUQsVUFBVU0sSUFBTSxFQUFBTixVQUFVQyxLQUMzREUsRUFBYUUsR0FDYlYsRUFBT1UsRUFDVCxHQUFHLENBQUNWLEVBQVFPLEVBQVdMLElBRWpCVSxFQUNKWixHQUFVQyxFQUNOLENBQ0U3N0IsUUFBU3E4QixHQUVYLENBQUMsRUFTUCxPQUNFLG1DQUNNRyxFQUFTLENBQ2JyOUIsV0FBVyxhQUFTLENBQ2xCLFVBQU9zOUIsZ0JBQ1B0OUIsUUFFRSxFQUFDLFVBQU91OUIsaUJBQWtCYixHQUFZQyxFQUN0QyxFQUFDLFVBQU9ELFVBQVdBLE9BR3ZCcCtCLE1BQU8sQ0FBRUcsTUFBSyxLQUVibytCLEVBQ0FILEVBQ0Msd0JBQUMsRUFBQWpNLEtBQUksQ0FBQy9xQixJQUFLLGNBQWV5VyxLQUFLLFFBQVF1VSxJQXJCdkNzTSxJQUFjLEVBQUFGLFVBQVVDLEtBQ25CLFVBRUYsWUFtQkQsS0FHViw4eUJDekVBLGlCQUNBLGFBRUEsYUFHQSxhQWdEQSxVQXJDQSxTQUFrQixTQUNoQjl3QyxFQUFJLE9BQ0oydUMsRUFBTyxVQUNQRSxFQUFVLGFBQ1ZDLEVBQVEsV0FDUi9hLEVBQVMsWUFDVDZSLEVBQVEsV0FFRjJMLEdBQWlCLElBQUE3d0MsY0FBWSxXQUM3Qm11QyxHQUE4QixpQkFBVDd1QyxHQUN2QjZ1QyxFQUFXN3VDLEVBRWYsR0FBRyxDQUFDQSxFQUFNNnVDLElBRVYsT0FDRSwrQkFDRTk2QixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixnQkFFTCxFQUFDLFVBQU84TixVQUFXQSxFQUNuQixFQUFDLFVBQU9sckIsUUFBU2dpQixPQUdyQmh4QixRQUFTMjhCLEdBRVI1QyxFQUFRNW1DLEtBQUksU0FBQ3dvQyxFQUFRbGYsR0FBZ0IsT0FDcEMsd0JBQUMsVUFBWSxDQUNYdDBCLElBQUsseUJBQWtCczBCLEdBQ3ZCblQsS0FBTWxlLEVBQ051d0MsT0FBUUEsRUFDUnhjLFVBQVdBLEdBTHVCLElBVTVDLDBLQ3BEQSxpQkFDQSxhQUlBLGFBcUJBLFVBYkEsU0FBc0IsT0FBRTdWLEVBQUksT0FBRXF5QixFQUFNLFNBQUV4YyxFQUFTLFlBQ3ZDL3pCLEVBQXVCLGlCQUFUa2UsRUFBb0JBLEVBQU9BLEVBQUtxeUIsRUFBT2lCLFdBRTNELE9BQ0UsK0JBQ0V6OUIsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXdVAsRUFBT3g4QixZQUM5QzFCLE1BQU8sQ0FBRUksT0FBUXNoQixFQUFXdmhCLE1BQU8rOUIsYUFBTSxFQUFOQSxFQUFRLzlCLFFBRTFDKzlCLEVBQU90c0IsT0FBU3NzQixFQUFPdHNCLE9BQU9qa0IsR0FBUUEsRUFHN0MseUxDeEJBLGNBQVMsMEVBQUF1UCxPQUFPLGd6QkNBaEIsaUJBQ0EsYUFFQSxhQUNBLFVBQ0EsYUFpREEsVUFwQ0EsU0FBYSxTQUNYRyxFQUFRLFdBRVIrK0IsR0FEUyxZQUNELFlBQ1IvdUMsRUFBSyxRQUNMbWpDLEVBQU8sVUFDUDFpQixFQUFRLFdBQ1JzeEIsRUFBUSxXQUNSN2hCLEVBQUUsS0FFSXJ4QixHQUFjLElBQUFtQyxjQUNsQixTQUFDbEMsR0FDeUIsbUJBQWJpekMsR0FDVEEsRUFBUzdoQixHQUVZLG1CQUFaaVQsR0FDVEEsRUFBUXJrQyxFQUFPa0IsRUFFbkIsR0FDQSxDQUFDbWpDLEVBQVM0TyxJQUdaLE9BQ0UsK0JBQ0UxOUIsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixXQUFTLEtBQUksRUFBQyxVQUFPN2dCLFVBQVdBLEVBQVEsTUFFcEUsZ0NBQU1wTSxVQUFXLFVBQU9xdEIsU0FBVTF4QixHQUNqQysrQixHQUNDLGdDQUFNMTZCLFVBQVcsVUFBTzI5QixZQUFhOThCLFFBQVNyVyxHQUM1Qyx3QkFBQyxFQUFBaW1DLEtBQUksQ0FBQ0MsSUFBSyxVQUFhaHJCLElBQUksUUFBUXlXLEtBQUssV0FLbkQsdUxDcERBLGNBQVMsd0VBQUEzZ0IsT0FBTyw0Z0NDQWhCLGlCQUNBLGFBQ0EsVUFDQSxVQUVBLFVBQ0EsVUFHQSxhQTRJQSxVQXhIQSxTQUFtQixXQUNqQndFLEVBQVMsWUFDVDNCLEVBQVEsV0FDUmt2QixFQUFXLGNBQ1g1aEMsRUFBSyxRQUNMdXFCLEVBQUksT0FDSjBuQixFQUFPLFVBQ1BoUSxFQUFRLFdBQ1IsSUFBQXpSLEtBQUFBLE9BQUksSUFBRyxVQUFPLEVBQ2QsSUFBQWhzQixLQUFBQSxPQUFJLElBQUcsU0FBTSxFQUNiLElBQUE0OEIsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQUosU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQWtSLFdBQUFBLE9BQVUsSUFBRyxHQUFLLEVBQ2xCQyxFQUFTLFlBQ1QxeEIsRUFBUSxXQUNSLElBQUEyeEIsV0FBQUEsT0FBVSxJQUFHLEtBQUUsRUFFVCxHQUFrQixJQUFBL3hDLFVBQWlCLElBQWxDMFEsRUFBSSxLQUFFQyxFQUFPLEtBQ2QsR0FBa0IsSUFBQTNRLFlBQWpCZ3lDLEVBQUksS0FBRUMsRUFBTyxNQUVwQixJQUFBMXpDLFlBQVUsV0FDUixHQUFJb0IsRUFBTyxDQUNULElBQU11eUMsRUFBVXZ5QyxFQUFNcUksS0FBSSxTQUFDbXFDLEdBQVEsT0FBR3RpQixJQUFJLFVBQVV0dUIsTUFBTzR3QyxFQUF4QixJQUNuQ0YsRUFBUUMsR0FFWixHQUFHLENBQUN2eUMsRUFBT3N5QyxJQUVYLElBQU1HLEdBQW1CLElBQUF6eEMsY0FDdkIsU0FBQ3JCLEdBQ0MsSUFBTUssRUFBU0wsRUFBRTNDLE9BQTRCZ0QsTUFFN0NnUixFQUFRaFIsRUFDVixHQUNBLENBQUNnUixJQUdHMGhDLEdBQWtCLElBQUExeEMsY0FDdEIsU0FBQ2t2QixHQUNDLElBQU15aUIsRUFBY04sRUFBS25nQyxRQUFPLFNBQUNzZ0MsR0FBUSxPQUFBQSxFQUFJdGlCLEtBQU9BLENBQVgsSUFFekMsR0FEQW9pQixFQUFRSyxHQUNKamdDLEVBQVUsQ0FDWixJQUFNNi9CLEVBQVVJLEVBQVl0cUMsS0FBSSxTQUFDbXFDLEdBQVEsT0FBQUEsRUFBSTV3QyxLQUFKLElBQ3pDOFEsRUFBUzYvQixHQUViLEdBQ0EsQ0FBQ0YsRUFBTUMsSUFHSE0sR0FBZSxJQUFBNXhDLGNBQVksV0FDL0IsSUFBTTZ4QyxFQUFjOWhDLEVBQUsyNkIsT0FDckJpSCxFQUFjLEVBQUgsR0FBT04sR0FBSSxHQUUxQixHQUFJUSxFQUFZMTFDLE9BQVMsRUFBRyxDQUMxQixJQUFNcTFDLEVBQU0sQ0FBRXRpQixJQUFJLFVBQVV0dUIsTUFBT2l4QyxHQUNuQ0YsRUFBYyxFQUFILEtBQU9OLEdBQU0sR0FBRixDQUFFRyxJQUFHLEdBTTdCLEdBSEFGLEVBQVFLLEdBQ1IzaEMsRUFBUSxJQUVKMEIsRUFBVSxDQUNaLElBQU02L0IsRUFBVUksRUFBWXRxQyxLQUFJLFNBQUNtcUMsR0FBUSxPQUFBQSxFQUFJNXdDLEtBQUosSUFDekM4USxFQUFTNi9CLEdBRWIsR0FBRyxDQUFDRixFQUFNdGhDLEVBQU11aEMsRUFBU3RoQyxJQUVuQjhoQyxHQUFnQixJQUFBOXhDLGNBQ3BCLFNBQUNyQixHQUNnQixVQUFYQSxFQUFFcWIsTUFBK0IsZ0JBQVhyYixFQUFFcWIsT0FDMUJyYixFQUFFd1UsaUJBQ0Z5K0IsSUFFSixHQUNBLENBQUNBLElBR0dsMEMsR0FBTSxJQUFBRixrQkFBZ0IsV0FBTSxPQUFBbzBDLEdBQUEsSUFFNUJHLEVBQ0osd0JBQUMsRUFBQXZqQyxLQUFJLENBQUNsUixRQUFTOHpDLEVBQVloaUMsZ0JBQWdCLEVBQU1ELGNBQWMsR0FDN0QsK0NBQ2MsUUFDWnpSLElBQUt1akMsRUFDTDV0QixXQUFXLGFBQVMsQ0FDbEIsVUFBTzIrQixVQUNQLFVBQU94aUIsU0FDTCxFQUFDLFVBQU93USxVQUFXQSxFQUFRLEtBRS9CdHVCLFNBQVUrL0IsRUFDVjErQixVQUFXKytCLEVBQ1hiLFFBQVNBLEVBQ1RyUSxZQUFhQSxFQUNiclgsS0FBTUEsRUFDTi9sQixLQUFNQSxFQUNOeEUsTUFBTytRLEVBQ1Bxd0IsVUFBV0EsRUFDWCtRLFVBQVdBLEVBQ1gxeEIsU0FBVUEsS0FLaEIsT0FDRSwrQkFDRXBNLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLGdCQUNMLEVBQUMsVUFBTzdnQixVQUFXQSxFQUFVLEVBQUMsVUFBT3d5QixZQUFhZixFQUFVLEdBQzlENzlCLElBRUYzVixJQUFLQSxHQUVKMnpDLGFBQUksRUFBSkEsRUFBTWhxQyxLQUFJLFNBQUMsT0FBRTZuQixFQUFFLEtBQUV0dUIsRUFBSyxRQUFPLE9BQzVCLHdCQUFDLEVBQUFrdEMsSUFBRyxDQUFDenhDLElBQUs2eUIsRUFBSWx3QixNQUFPNEIsRUFBT3N1QixHQUFJQSxFQUFJNmhCLFNBQVVXLEVBQWlCM0QsVUFBUSxHQUNwRW50QyxFQUZ5QixJQUs5QiwrQkFBS3lTLFVBQVcsVUFBTzYrQixVQUFXSCxHQUd4Qyw2TENwSkEsY0FBUyw4RUFBQWxqQyxPQUFPLGd6QkNBaEIsaUJBQ0EsYUFFQSxVQUNBLGFBd0VBLFVBcERBLFNBQW1CLFNBQ2pCak8sRUFBSyxRQUNMOFEsRUFBUSxXQUNSa0IsRUFBTSxTQUNORyxFQUFTLFlBQ1Q2dEIsRUFBVyxjQUNYNWhDLEVBQUssUUFDTHVxQixFQUFJLE9BQ0owbkIsRUFBTyxVQUNQaFEsRUFBUSxXQUNSLElBQUF6UixLQUFBQSxPQUFJLElBQUcsV0FBUSxFQUNmLElBQUFoc0IsS0FBQUEsT0FBSSxJQUFHLFNBQU0sRUFDYixJQUFBNDhCLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFKLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCbVIsRUFBUyxZQUVIcFEsR0FBZSxJQUFBL2dDLGNBQ25CLFNBQUNyQixHQUNLK1MsR0FDRkEsRUFBVS9TLEVBQUUzQyxPQUE0QmdELE1BRTVDLEdBQ0EsQ0FBQzBTLElBR0dxZ0MsRUFDSiwrQ0FDYyxRQUNacjBDLElBQUt1akMsRUFDTDV0QixXQUFXLGFBQVMsQ0FDbEIsVUFBTzIrQixVQUNQLFVBQU94aUIsU0FDTCxFQUFDLFVBQU93USxVQUFXQSxFQUFRLEtBRS9CdHVCLFNBQVVxdkIsRUFDVm51QixPQUFRQSxFQUNSRyxVQUFXQSxFQUNYaytCLFFBQVNBLEVBQ1RyUSxZQUFhQSxFQUNiclgsS0FBTUEsRUFDTi9sQixLQUFNQSxFQUNOeEUsTUFBT0EsRUFDUG9oQyxVQUFXQSxFQUNYK1EsVUFBV0EsSUFHZixPQUFJdndDLEVBQ0ssd0JBQUMsRUFBQW9nQyxNQUFLLENBQUNoaUMsTUFBTzRCLEdBQVFteEMsR0FFdEIsZ0RBQUdBLEVBRWQsNkxDM0VBLGNBQVMsOEVBQUFsakMsT0FBTyw0S0NBaEIsaUJBRUEsYUFxQkEsVUFiQSxTQUFlLE9BQUVHLEVBQVEsV0FBRTJ3QixFQUFZLGVBQUUsSUFBQXpyQixRQUFBQSxPQUFPLElBQUcsYUFBTyxFQUFDLEVBQ3pELE9BQ0UsK0JBQ0V4VyxJQUFLaWlDLEVBQ0x0c0IsVUFBVyxVQUFPOCtCLE1BQ2xCaitCLFFBQVNBLEVBQU8sY0FDSixTQUVYbEYsRUFHUCwwS0NyQkEsaUJBRUEsYUFDQSxhQWtCQSxVQVpBLFNBQXdCLE9BQUVBLEVBQVEsV0FBRXF6QixFQUFVLGFBQzVDLE9BQ0UsK0JBQ0VodkIsV0FBVyxhQUFTLENBQUMsVUFBTysrQixpQkFDNUJ6Z0MsTUFBTyxDQUFFdTJCLE9BQVE3RixHQUFZLGNBQ2pCLG1CQUVYcnpCLEVBR1AseU1DbkJBLGNBQVMsMEVBQUFILE9BQU8sSUFDaEIsY0FBUyxtRkFBQUEsT0FBTywreUJDRGhCLGlCQU9BLFVBQ0EsYUFDQSxhQUVBLGFBbUtBLFVBOUdBLFNBQWlCLE9BQ2ZHLEVBQVEsV0FDUmUsRUFBSSxPQUNKeTBCLEVBQVMsWUFDVCxJQUFBbHhCLFNBQUFBLE9BQVEsSUFBRyxhQUFVLEVBQ3JCKytCLEVBQVcsY0FDWGgvQixFQUFTLFlBRUgsR0FBc0MsSUFBQWhVLFVBQVMsQ0FDbkQwVSxLQUFNLEVBQ05ELElBQUssSUFGQXcrQixFQUFjLEtBQUVDLEVBQWlCLEtBSWxDLEdBQTBDLElBQUFsekMsV0FBUyxHQUFsRG16QyxFQUFnQixLQUFFQyxFQUFtQixLQUV0Q0MsR0FBVyxJQUFBLzBDLFFBQXVCLE1BQ2xDZ2lDLEdBQWUsSUFBQWhpQyxRQUF3QixNQUV2Q2cxQyxHQUF1QixJQUFBM3lDLGNBQVksV0FDdkMsR0FBSzIvQixFQUFhNWhDLFFBQWxCLENBSUEsSUFBTTYwQyxFQUFPalQsRUFBYTVoQyxRQUFRa3BDLHdCQUM1QjRMLEVBakUyQixTQUNuQ3JPLEVBQ0FseEIsRUFDQXMvQixHQUVRLElBQUE5K0IsRUFBNkI4K0IsRUFBSSxJQUE1QjcrQixFQUF3QjYrQixFQUFJLEtBQXRCN2dDLEVBQWtCNmdDLEVBQUksT0FBZDlnQyxFQUFVOGdDLEVBQUksTUFDckNOLEVBQWlCLENBQUV4K0IsSUFBSyxFQUFHQyxLQUFNLEdBQ3JDLE9BQVF5d0IsR0FDTixJQUFLLE9BQ0g4TixFQUFpQixDQUNmeCtCLElBQUtBLEVBQU0vQixFQUFTLEVBQ3BCZ0MsS0FBTUEsR0FFUixNQUNGLElBQUssUUFDSHUrQixFQUFpQixDQUNmeCtCLElBQUtBLEVBQU0vQixFQUFTLEVBQ3BCZ0MsS0FBTUEsRUFBT2pDLEdBRWYsTUFDRixJQUFLLFNBQ0h3Z0MsRUFBaUIsQ0FDZngrQixJQUFLQSxFQUFNL0IsRUFDWGdDLEtBQU1BLEVBQU9qQyxFQUFRLEdBRXZCLE1BQ0YsSUFBSyxNQUNId2dDLEVBQWlCLENBQ2Z4K0IsSUFBS0EsRUFDTEMsS0FBTUEsRUFBT2pDLEVBQVEsR0FLM0IsTUFBb0IsYUFBYndCLEVBQ0gsQ0FDRVEsSUFBS3crQixFQUFleCtCLElBQU1sUixPQUFPa3dDLFFBQ2pDLytCLEtBQU11K0IsRUFBZXYrQixLQUFPblIsT0FBT213QyxTQUVyQ1QsQ0FDTixDQXlCOEJVLENBQ3hCeE8sRUFDQWx4QixFQUNBcy9CLEdBRUZMLEVBQWtCTSxHQUNsQkosR0FBb0IsR0FDdEIsR0FBRyxDQUFDak8sRUFBV2x4QixJQUVUMi9CLEdBQWUsSUFBQWp6QyxjQUFZLFdBQy9CMnlDLEdBQ0YsR0FBRyxDQUFDQSxJQUVFTyxHQUFlLElBQUFsekMsY0FBWSxXQUMvQnl5QyxHQUFvQixFQUN0QixHQUFHLElBRUdVLEdBQXNCLElBQUFuekMsY0FBWSxXQUNsQzB5QyxFQUFTMzBDLFVBQ1hxMUMsYUFBYVYsRUFBUzMwQyxTQUN0QjIwQyxFQUFTMzBDLFFBQVUsTUFHckI0MEMsR0FDRixHQUFHLENBQUNBLElBRUVVLEdBQW9CLElBQUFyekMsY0FBWSxXQUNwQzB5QyxFQUFTMzBDLFFBQVVvTCxZQUFXLFdBQzVCc3BDLEdBQW9CLEdBQ3BCQyxFQUFTMzBDLFFBQVUsSUFDckIsR0FBRyxJQUNMLEdBQUcsSUF5QkgsT0F2QkEsSUFBQUgsWUFBVSxXQUNSLE9BQU8sV0FBTSxPQUFBODBDLEVBQVMzMEMsU0FBV3ExQyxhQUFhVixFQUFTMzBDLFFBQTFDLENBQ2YsR0FBRyxLQUVILElBQUFILFlBQVUsV0FDUixHQUFLK2hDLEVBQWE1aEMsU0FBd0IsYUFBYnVWLEVBQTdCLENBSUEsSUFBTWdnQyxHQUFtQixhQUFhM1QsRUFBYTVoQyxTQUNuRCxHQUFLdTFDLEVBQUwsQ0FJQSxJQUFNQyxFQUFjLFdBQU0sT0FBQWQsR0FBb0IsRUFBcEIsRUFHMUIsT0FGQWEsRUFBaUJwMUMsaUJBQWlCLFNBQVVxMUMsR0FDNUNELEVBQWlCcDFDLGlCQUFpQixTQUFVcTFDLEdBQ3JDLFdBQ0xELEVBQWlCbjFDLG9CQUFvQixTQUFVbzFDLEdBQy9DRCxFQUFpQm4xQyxvQkFBb0IsU0FBVW8xQyxFQUNqRCxHQUNGLEdBQUcsQ0FBQ2pnQyxJQUdGLGdDQUNFa2dDLGFBQWNMLEVBQ2RGLGFBQWNBLEVBQ2RDLGFBQWNBLEVBQ2RPLFdBQVlKLEVBQ1ozMUMsSUFBS2lpQyxHQUVKM3dCLEdBQ0EsSUFBQTBrQyxjQUNDLGdEQUNHckIsR0FBZUcsRUFDZCwrQkFDRTdnQyxNQUFPMmdDLEVBQWMsWUFDVnZpQyxFQUFJLGNBQ0gsVUFDWnNELFdBQVcsYUFBUyxDQUNsQixVQUFPc2dDLFFBQ1AsVUFBT25QLEdBQ1AsVUFBT2x4QixHQUNQRCxNQUdGLE1BRU5wVixTQUFTcUMsTUFJakIsMExDNUtBLGFBQVMsNEVBQUF1TyxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBdUVBLFVBOUNBLFNBQWUsT0FDYmsxQixFQUFHLE1BQ0h2Z0MsRUFBSSxPQUNKd0wsRUFBUSxXQUNSMndCLEVBQVksZUFDWmlVLEVBQU0sU0FDTixJQUFBQyxNQUFBQSxPQUFLLElBQUcsR0FBSSxFQUNaLElBQUFDLEtBQUFBLE9BQUksSUFBRyxHQUFJLEVBQ1gsSUFBQUMsU0FBQUEsT0FBUSxJQUFHLEdBQUksRUFDZixJQUFBbFksT0FBQUEsT0FBTSxJQUFHLFlBQVMsRUFFbEIsT0FBTzdzQixFQUNMLCtCQUNFdFIsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBVyxVQUFPK0YsY0FFOUMsK0NBQ2MsUUFDWlQsWUFBWSxZQUNadnlCLFdBQVcsYUFBUyxDQUFDLFVBQU8yZ0MsTUFBTyxVQUFPblksS0FDMUNnWSxNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVNsUSxJQUFLQSxFQUFLdmdDLEtBQU1BLEtBRTlDd0wsR0FBWSwrQkFBS3FFLFVBQVcsVUFBT2l6QixTQUFVdDNCLElBR2hELCtDQUNjLFFBQ1o0MkIsWUFBWSxZQUNadnlCLFdBQVcsYUFBUyxDQUFDLFVBQU8yZ0MsTUFBTyxVQUFPblksS0FDMUNnWSxNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVNsUSxJQUFLQSxFQUFLdmdDLEtBQU1BLElBR25ELHlMQ3hFQSxjQUFTLDBFQUFBcUwsT0FBTywrQkNBaEIsSUFBWTQvQix5RUFBQUEsRUFBQSxFQUFBQSxjQUFBLEVBQUFBLFlBQVcsS0FDckIsOEJBQ0Esc0NBQ0EsK0JBQ0EsMmlCQ0pGLHFoQkNBQSxhQUNBLGFBQ0EsV0FDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLFlBQ0EsWUFDQSxhQUNBLHdDQzVCQSxJQUFZMEIsdUVBQUFBLEVBQUEsRUFBQUEsWUFBQSxFQUFBQSxVQUFTLEtBQ2pCLFVBQ0EseUVDRkosc3BDQ0FBLCtRQ0FBLGdSQ0FBLDJTQ0FBLDJRQ0FBLGdlQ0FBLHFSQ1NhLElBQUl4eEMsRUFBRSxFQUFRLE1BQTRFaVAsRUFBRSxtQkFBb0I5UixPQUFPbzRDLEdBQUdwNEMsT0FBT280QyxHQUExRyxTQUFXMXhDLEVBQUVDLEdBQUcsT0FBT0QsSUFBSUMsSUFBSSxJQUFJRCxHQUFHLEVBQUVBLEdBQUksRUFBRUMsSUFBSUQsR0FBSUEsR0FBR0MsR0FBSUEsQ0FBQyxFQUFpRDB4QyxFQUFFeDFDLEVBQUVVLFNBQVNkLEVBQUVJLEVBQUVmLFVBQVVVLEVBQUVLLEVBQUV5RyxnQkFBZ0IySSxFQUFFcFAsRUFBRXkxQyxjQUN0TSxTQUFTMTFDLEVBQUU4RCxHQUFHLElBQUlDLEVBQUVELEVBQUU2eEMsWUFBWTd4QyxFQUFFQSxFQUFFeEQsTUFBTSxJQUFJLElBQUlzMUMsRUFBRTd4QyxJQUFJLE9BQU9tTCxFQUFFcEwsRUFBRTh4QyxFQUFFLENBQUMsTUFBTS96QyxHQUFHLE9BQU0sQ0FBRSxDQUFDLENBQTRCLElBQUlnMEMsRUFBRSxvQkFBcUIzeEMsYUFBUSxJQUFxQkEsT0FBTzNFLGVBQVUsSUFBcUIyRSxPQUFPM0UsU0FBU3FQLGNBQXpJLFNBQVc5SyxFQUFFQyxHQUFHLE9BQU9BLEdBQUcsRUFEK0YsU0FBV0QsRUFBRUMsR0FBRyxJQUFJNnhDLEVBQUU3eEMsSUFBSWxDLEVBQUU0ekMsRUFBRSxDQUFDbC9CLEtBQUssQ0FBQ2pXLE1BQU1zMUMsRUFBRUQsWUFBWTV4QyxLQUFLc2hCLEVBQUV4akIsRUFBRSxHQUFHMFUsS0FBS3ZVLEVBQUVILEVBQUUsR0FBd0osT0FBckpqQyxHQUFFLFdBQVd5bEIsRUFBRS9rQixNQUFNczFDLEVBQUV2d0IsRUFBRXN3QixZQUFZNXhDLEVBQUUvRCxFQUFFcWxCLElBQUlyakIsRUFBRSxDQUFDdVUsS0FBSzhPLEdBQUcsR0FBRSxDQUFDdmhCLEVBQUU4eEMsRUFBRTd4QyxJQUFJbEUsR0FBRSxXQUE2QixPQUFsQkcsRUFBRXFsQixJQUFJcmpCLEVBQUUsQ0FBQ3VVLEtBQUs4TyxJQUFXdmhCLEdBQUUsV0FBVzlELEVBQUVxbEIsSUFBSXJqQixFQUFFLENBQUN1VSxLQUFLOE8sR0FBRyxHQUFFLEdBQUUsQ0FBQ3ZoQixJQUFJdUwsRUFBRXVtQyxHQUFVQSxDQUFDLEVBQzVNL2xDLEVBQVFpbUMsMEJBQXFCLElBQVM3MUMsRUFBRTYxQyxxQkFBcUI3MUMsRUFBRTYxQyxxQkFBcUJELCtCQ1B4VUUsRUFBT2xtQyxRQUFVLEVBQWpCLG1DQ0RGelMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVRsRCxPQUFPNFEsZUFBZTZCLEVBQVMsTUFBTyxDQUNwQ0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU95eEMsRUFBSzdsQyxPQUNkLElBRUYvUyxPQUFPNFEsZUFBZTZCLEVBQVMsUUFBUyxDQUN0Q0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU8weEMsRUFBTzlsQyxPQUNoQixJQUVGL1MsT0FBTzRRLGVBQWU2QixFQUFTLFlBQWEsQ0FDMUNMLFlBQVksRUFDWmpMLElBQUssV0FDSCxPQUFPMnhDLEVBQVcvbEMsT0FDcEIsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBTzR4QyxFQUFHaG1DLE9BQ1osSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBTzZ4QyxFQUFJam1DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBTzh4QyxFQUFJbG1DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBTyt4QyxFQUFJbm1DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxXQUFZLENBQ3pDTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT2d5QyxFQUFVcG1DLE9BQ25CLElBRUYvUyxPQUFPNFEsZUFBZTZCLEVBQVMsVUFBVyxDQUN4Q0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU9peUMsRUFBU3JtQyxPQUNsQixJQUdGLElBQUlnbUMsRUFBS00sRUFBdUIsRUFBUSxPQUVwQ0wsRUFBTUssRUFBdUIsRUFBUSxPQUVyQ0osRUFBTUksRUFBdUIsRUFBUSxPQUVyQ0gsRUFBTUcsRUFBdUIsRUFBUSxPQUVyQ1QsRUFBT1MsRUFBdUIsRUFBUSxPQUV0Q0QsRUFBV0MsRUFBdUIsRUFBUSxPQUUxQ0YsRUFBWUUsRUFBdUIsRUFBUSxPQUUzQ1AsRUFBYU8sRUFBdUIsRUFBUSxPQUU1Q1IsRUFBU1EsRUFBdUIsRUFBUSxPQUU1QyxTQUFTQSxFQUF1QjFuQyxHQUFPLE9BQU9BLEdBQU9BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixFQUFPLDZCQ2Y5RixTQUFTMm5DLEVBQWdCQyxHQUN2QixPQUF3QyxJQUFoQ0EsRUFBZSxLQUFPLEdBQUssR0FBVSxDQUMvQyxDQXNIQSxTQUFTQyxFQUFRbmtDLEVBQUczUSxHQUNsQixNQUFNKzBDLEdBQVcsTUFBSnBrQyxJQUFtQixNQUFKM1EsR0FFNUIsT0FEYTJRLEdBQUssS0FBTzNRLEdBQUssS0FBTyswQyxHQUFPLEtBQzlCLEdBQVcsTUFBTkEsQ0FDckIsQ0FjQSxTQUFTQyxFQUFPQyxFQUFHanpDLEVBQUdDLEVBQUcwTyxFQUFHckQsRUFBR3JOLEdBQzdCLE9BQU82MEMsR0FUY0ksRUFTUUosRUFBUUEsRUFBUTl5QyxFQUFHaXpDLEdBQUlILEVBQVFua0MsRUFBRzFRLE9BVHJDazFDLEVBUzBDN25DLEdBUmhENG5DLElBQVEsR0FBS0MsRUFRdUNsekMsR0FUMUUsSUFBdUJpekMsRUFBS0MsQ0FVNUIsQ0FFQSxTQUFTQyxFQUFNcHpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUdyRCxFQUFHck4sR0FDL0IsT0FBTyswQyxFQUFPL3lDLEVBQUlzaEIsR0FBS3RoQixFQUFJNnhDLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUdyRCxFQUFHck4sRUFDNUMsQ0FFQSxTQUFTbzFDLEVBQU1yekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBR3JELEVBQUdyTixHQUMvQixPQUFPKzBDLEVBQU8veUMsRUFBSTZ4QyxFQUFJdndCLEdBQUt1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUM1QyxDQUVBLFNBQVNxMUMsRUFBTXR6QyxFQUFHQyxFQUFHc2hCLEVBQUd1d0IsRUFBR25qQyxFQUFHckQsRUFBR3JOLEdBQy9CLE9BQU8rMEMsRUFBTy95QyxFQUFJc2hCLEVBQUl1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUN2QyxDQUVBLFNBQVNzMUMsRUFBTXZ6QyxFQUFHQyxFQUFHc2hCLEVBQUd1d0IsRUFBR25qQyxFQUFHckQsRUFBR3JOLEdBQy9CLE9BQU8rMEMsRUFBT3p4QixHQUFLdGhCLEdBQUs2eEMsR0FBSTl4QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUMxQyxDQXpOQTNFLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQXlObEJBLEVBQUEsUUFuTUEsU0FBYXluQyxHQUNYLEdBQXFCLGlCQUFWQSxFQUFvQixDQUM3QixNQUFNQyxFQUFNQyxTQUFTQyxtQkFBbUJILElBRXhDQSxFQUFRLElBQUlJLFdBQVdILEVBQUk5NUMsUUFFM0IsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUlnNkMsRUFBSTk1QyxTQUFVRixFQUNoQys1QyxFQUFNLzVDLEdBQUtnNkMsRUFBSWg4QixXQUFXaGUsRUFFOUIsQ0FFQSxPQU9GLFNBQThCcXBDLEdBQzVCLE1BQU0rUSxFQUFTLEdBQ1RDLEVBQTBCLEdBQWZoUixFQUFNbnBDLE9BQ2pCbzZDLEVBQVMsbUJBRWYsSUFBSyxJQUFJdDZDLEVBQUksRUFBR0EsRUFBSXE2QyxFQUFVcjZDLEdBQUssRUFBRyxDQUNwQyxNQUFNa1YsRUFBSW0wQixFQUFNcnBDLEdBQUssS0FBT0EsRUFBSSxHQUFLLElBQy9CdTZDLEVBQU12TixTQUFTc04sRUFBT0UsT0FBT3RsQyxJQUFNLEVBQUksSUFBUW9sQyxFQUFPRSxPQUFXLEdBQUp0bEMsR0FBVyxJQUM5RWtsQyxFQUFPdDNDLEtBQUt5M0MsRUFDZCxDQUVBLE9BQU9ILENBQ1QsQ0FuQlNLLENBaUNULFNBQW9CdmxDLEVBQUd5SixHQUVyQnpKLEVBQUV5SixHQUFPLElBQU0sS0FBUUEsRUFBTSxHQUM3QnpKLEVBQUVpa0MsRUFBZ0J4NkIsR0FBTyxHQUFLQSxFQUM5QixJQUFJcFksRUFBSSxXQUNKQyxHQUFLLFVBQ0xzaEIsR0FBSyxXQUNMdXdCLEVBQUksVUFFUixJQUFLLElBQUlyNEMsRUFBSSxFQUFHQSxFQUFJa1YsRUFBRWhWLE9BQVFGLEdBQUssR0FBSSxDQUNyQyxNQUFNMDZDLEVBQU9uMEMsRUFDUG8wQyxFQUFPbjBDLEVBQ1BvMEMsRUFBTzl5QixFQUNQK3lCLEVBQU94QyxFQUNiOXhDLEVBQUlvekMsRUFBTXB6QyxFQUFHQyxFQUFHc2hCLEVBQUd1d0IsRUFBR25qQyxFQUFFbFYsR0FBSSxHQUFJLFdBQ2hDcTRDLEVBQUlzQixFQUFNdEIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckM4bkIsRUFBSTZ4QixFQUFNN3hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDd0csRUFBSW16QyxFQUFNbnpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckN1RyxFQUFJb3pDLEVBQU1wekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDcTRDLEVBQUlzQixFQUFNdEIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSTZ4QixFQUFNN3hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDd0csRUFBSW16QyxFQUFNbnpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssVUFDckN1RyxFQUFJb3pDLEVBQU1wekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksR0FBSSxFQUFHLFlBQ25DcTRDLEVBQUlzQixFQUFNdEIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckM4bkIsRUFBSTZ4QixFQUFNN3hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLE9BQ3RDd0csRUFBSW16QyxFQUFNbnpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLElBQUssWUFDdEN1RyxFQUFJb3pDLEVBQU1wekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFlBQ3BDcTRDLEVBQUlzQixFQUFNdEIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssVUFDdEM4bkIsRUFBSTZ4QixFQUFNN3hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDd0csRUFBSW16QyxFQUFNbnpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksWUFDckN1RyxFQUFJcXpDLEVBQU1yekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDcTRDLEVBQUl1QixFQUFNdkIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSTh4QixFQUFNOXhCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxHQUFJLFdBQ3JDd0csRUFBSW96QyxFQUFNcHpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsR0FBSSxJQUFLLFdBQ2pDdUcsRUFBSXF6QyxFQUFNcnpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxXQUNwQ3E0QyxFQUFJdUIsRUFBTXZCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFVBQ3BDOG5CLEVBQUk4eEIsRUFBTTl4QixFQUFHdXdCLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLElBQUssSUFBSyxXQUN0Q3dHLEVBQUlvekMsRUFBTXB6QyxFQUFHc2hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHMk8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFdBQ3JDdUcsRUFBSXF6QyxFQUFNcnpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLEdBQUksRUFBRyxXQUNuQ3E0QyxFQUFJdUIsRUFBTXZCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksSUFBSyxHQUFJLFlBQ3JDOG5CLEVBQUk4eEIsRUFBTTl4QixFQUFHdXdCLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3dHLEVBQUlvekMsRUFBTXB6QyxFQUFHc2hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHMk8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFlBQ3BDdUcsRUFBSXF6QyxFQUFNcnpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLElBQUssR0FBSSxZQUNyQ3E0QyxFQUFJdUIsRUFBTXZCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFVBQ3BDOG5CLEVBQUk4eEIsRUFBTTl4QixFQUFHdXdCLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksR0FBSSxZQUNwQ3dHLEVBQUlvekMsRUFBTXB6QyxFQUFHc2hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDdUcsRUFBSXN6QyxFQUFNdHpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxRQUNwQ3E0QyxFQUFJd0IsRUFBTXhCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDOG5CLEVBQUkreEIsRUFBTS94QixFQUFHdXdCLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLElBQUssR0FBSSxZQUNyQ3dHLEVBQUlxekMsRUFBTXJ6QyxFQUFHc2hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFVBQ3RDdUcsRUFBSXN6QyxFQUFNdHpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxZQUNwQ3E0QyxFQUFJd0IsRUFBTXhCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFlBQ3BDOG5CLEVBQUkreEIsRUFBTS94QixFQUFHdXdCLEVBQUc5eEMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3dHLEVBQUlxekMsRUFBTXJ6QyxFQUFHc2hCLEVBQUd1d0IsRUFBRzl4QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDdUcsRUFBSXN6QyxFQUFNdHpDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUFHbmpDLEVBQUVsVixFQUFJLElBQUssRUFBRyxXQUNwQ3E0QyxFQUFJd0IsRUFBTXhCLEVBQUc5eEMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEdBQUksSUFBSyxXQUNqQzhuQixFQUFJK3hCLEVBQU0veEIsRUFBR3V3QixFQUFHOXhDLEVBQUdDLEVBQUcwTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckN3RyxFQUFJcXpDLEVBQU1yekMsRUFBR3NoQixFQUFHdXdCLEVBQUc5eEMsRUFBRzJPLEVBQUVsVixFQUFJLEdBQUksR0FBSSxVQUNwQ3VHLEVBQUlzekMsRUFBTXR6QyxFQUFHQyxFQUFHc2hCLEVBQUd1d0IsRUFBR25qQyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksV0FDcENxNEMsRUFBSXdCLEVBQU14QixFQUFHOXhDLEVBQUdDLEVBQUdzaEIsRUFBRzVTLEVBQUVsVixFQUFJLElBQUssSUFBSyxXQUN0QzhuQixFQUFJK3hCLEVBQU0veEIsRUFBR3V3QixFQUFHOXhDLEVBQUdDLEVBQUcwTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksV0FDckN3RyxFQUFJcXpDLEVBQU1yekMsRUFBR3NoQixFQUFHdXdCLEVBQUc5eEMsRUFBRzJPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3VHLEVBQUl1ekMsRUFBTXZ6QyxFQUFHQyxFQUFHc2hCLEVBQUd1d0IsRUFBR25qQyxFQUFFbFYsR0FBSSxHQUFJLFdBQ2hDcTRDLEVBQUl5QixFQUFNekIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSWd5QixFQUFNaHlCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDd0csRUFBSXN6QyxFQUFNdHpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssVUFDckN1RyxFQUFJdXpDLEVBQU12ekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFlBQ3BDcTRDLEVBQUl5QixFQUFNekIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckM4bkIsRUFBSWd5QixFQUFNaHlCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFNBQ3RDd0csRUFBSXN6QyxFQUFNdHpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckN1RyxFQUFJdXpDLEVBQU12ekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksR0FBSSxFQUFHLFlBQ25DcTRDLEVBQUl5QixFQUFNekIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssVUFDdEM4bkIsRUFBSWd5QixFQUFNaHlCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDd0csRUFBSXN6QyxFQUFNdHpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksWUFDckN1RyxFQUFJdXpDLEVBQU12ekMsRUFBR0MsRUFBR3NoQixFQUFHdXdCLEVBQUduakMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDcTRDLEVBQUl5QixFQUFNekIsRUFBRzl4QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssWUFDdEM4bkIsRUFBSWd5QixFQUFNaHlCLEVBQUd1d0IsRUFBRzl4QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDd0csRUFBSXN6QyxFQUFNdHpDLEVBQUdzaEIsRUFBR3V3QixFQUFHOXhDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckN1RyxFQUFJOHlDLEVBQVE5eUMsRUFBR20wQyxHQUNmbDBDLEVBQUk2eUMsRUFBUTd5QyxFQUFHbTBDLEdBQ2Y3eUIsRUFBSXV4QixFQUFRdnhCLEVBQUc4eUIsR0FDZnZDLEVBQUlnQixFQUFRaEIsRUFBR3dDLEVBQ2pCLENBRUEsTUFBTyxDQUFDdDBDLEVBQUdDLEVBQUdzaEIsRUFBR3V3QixFQUNuQixDQXRIOEJ5QyxDQTZIOUIsU0FBc0J6UixHQUNwQixHQUFxQixJQUFqQkEsRUFBTW5wQyxPQUNSLE1BQU8sR0FHVCxNQUFNNjZDLEVBQXlCLEVBQWYxUixFQUFNbnBDLE9BQ2hCazZDLEVBQVMsSUFBSVksWUFBWTdCLEVBQWdCNEIsSUFFL0MsSUFBSyxJQUFJLzZDLEVBQUksRUFBR0EsRUFBSSs2QyxFQUFTLzZDLEdBQUssRUFDaENvNkMsRUFBT3A2QyxHQUFLLEtBQXNCLElBQWZxcEMsRUFBTXJwQyxFQUFJLEtBQWNBLEVBQUksR0FHakQsT0FBT282QyxDQUNULENBMUl5Q2EsQ0FBYWxCLEdBQXVCLEVBQWZBLEVBQU03NUMsUUFDcEUsNkJDckNBTCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFBSTRvQyxFQUFXLENBQ2JDLFdBRm1DLG9CQUFYQyxRQUEwQkEsT0FBT0QsWUFBY0MsT0FBT0QsV0FBVzd5QyxLQUFLOHlDLFNBSWhHOW9DLEVBQUEsUUFBa0I0b0MsNkJDUmxCcjdDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQkEsRUFBQSxRQURlLG9FQ0pmelMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBRWxCLElBRWdDZCxFQUY1QnduQyxHQUU0QnhuQyxFQUZPLEVBQVEsUUFFTUEsRUFBSWEsV0FBYWIsRUFBTSxDQUFFb0IsUUFBU3BCLEdBbUN2RmMsRUFBQSxRQWpDQSxTQUFlK29DLEdBQ2IsS0FBSyxFQUFJckMsRUFBVXBtQyxTQUFTeW9DLEdBQzFCLE1BQU1uMkMsVUFBVSxnQkFHbEIsSUFBSUYsRUFDSixNQUFNczJDLEVBQU0sSUFBSW5CLFdBQVcsSUF1QjNCLE9BckJBbUIsRUFBSSxJQUFNdDJDLEVBQUlnb0MsU0FBU3FPLEVBQUsvbEMsTUFBTSxFQUFHLEdBQUksT0FBUyxHQUNsRGdtQyxFQUFJLEdBQUt0MkMsSUFBTSxHQUFLLElBQ3BCczJDLEVBQUksR0FBS3QyQyxJQUFNLEVBQUksSUFDbkJzMkMsRUFBSSxHQUFTLElBQUp0MkMsRUFFVHMyQyxFQUFJLElBQU10MkMsRUFBSWdvQyxTQUFTcU8sRUFBSy9sQyxNQUFNLEVBQUcsSUFBSyxPQUFTLEVBQ25EZ21DLEVBQUksR0FBUyxJQUFKdDJDLEVBRVRzMkMsRUFBSSxJQUFNdDJDLEVBQUlnb0MsU0FBU3FPLEVBQUsvbEMsTUFBTSxHQUFJLElBQUssT0FBUyxFQUNwRGdtQyxFQUFJLEdBQVMsSUFBSnQyQyxFQUVUczJDLEVBQUksSUFBTXQyQyxFQUFJZ29DLFNBQVNxTyxFQUFLL2xDLE1BQU0sR0FBSSxJQUFLLE9BQVMsRUFDcERnbUMsRUFBSSxHQUFTLElBQUp0MkMsRUFHVHMyQyxFQUFJLEtBQU90MkMsRUFBSWdvQyxTQUFTcU8sRUFBSy9sQyxNQUFNLEdBQUksSUFBSyxLQUFPLGNBQWdCLElBQ25FZ21DLEVBQUksSUFBTXQyQyxFQUFJLFdBQWMsSUFDNUJzMkMsRUFBSSxJQUFNdDJDLElBQU0sR0FBSyxJQUNyQnMyQyxFQUFJLElBQU10MkMsSUFBTSxHQUFLLElBQ3JCczJDLEVBQUksSUFBTXQyQyxJQUFNLEVBQUksSUFDcEJzMkMsRUFBSSxJQUFVLElBQUp0MkMsRUFDSHMyQyxDQUNULDJCQ3ZDQXo3QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEJBLEVBQUEsUUFEZSxpSkNHZixJQUFJaXBDLEVBUEoxN0MsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLFFBT0EsV0FFRSxJQUFLaXBDLElBRUhBLEVBQW9DLG9CQUFYSCxRQUEwQkEsT0FBT0csaUJBQW1CSCxPQUFPRyxnQkFBZ0JqekMsS0FBSzh5QyxTQUVwR0csR0FDSCxNQUFNLElBQUl4USxNQUFNLDRHQUlwQixPQUFPd1EsRUFBZ0JDLEVBQ3pCLEVBZEEsTUFBTUEsRUFBUSxJQUFJckIsV0FBVywrQkNEN0IsU0FBUzcxQyxFQUFFdU4sRUFBR3FELEVBQUczUSxFQUFHazNDLEdBQ2xCLE9BQVE1cEMsR0FDTixLQUFLLEVBQ0gsT0FBT3FELEVBQUkzUSxHQUFLMlEsRUFBSXVtQyxFQUV0QixLQUFLLEVBTUwsS0FBSyxFQUNILE9BQU92bUMsRUFBSTNRLEVBQUlrM0MsRUFKakIsS0FBSyxFQUNILE9BQU92bUMsRUFBSTNRLEVBQUkyUSxFQUFJdW1DLEVBQUlsM0MsRUFBSWszQyxFQUtqQyxDQUVBLFNBQVNDLEVBQUt4bUMsRUFBRzdTLEdBQ2YsT0FBTzZTLEdBQUs3UyxFQUFJNlMsSUFBTSxHQUFLN1MsQ0FDN0IsQ0F6QkF4QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFrR2xCQSxFQUFBLFFBMUVBLFNBQWN5bkMsR0FDWixNQUFNNEIsRUFBSSxDQUFDLFdBQVksV0FBWSxXQUFZLFlBQ3pDQyxFQUFJLENBQUMsV0FBWSxXQUFZLFdBQVksVUFBWSxZQUUzRCxHQUFxQixpQkFBVjdCLEVBQW9CLENBQzdCLE1BQU1DLEVBQU1DLFNBQVNDLG1CQUFtQkgsSUFFeENBLEVBQVEsR0FFUixJQUFLLElBQUkvNUMsRUFBSSxFQUFHQSxFQUFJZzZDLEVBQUk5NUMsU0FBVUYsRUFDaEMrNUMsRUFBTWozQyxLQUFLazNDLEVBQUloOEIsV0FBV2hlLEdBRTlCLE1BQVlpSSxNQUFNNEIsUUFBUWt3QyxLQUV4QkEsRUFBUTl4QyxNQUFNNUgsVUFBVWlWLE1BQU0vVSxLQUFLdzVDLElBR3JDQSxFQUFNajNDLEtBQUssS0FDWCxNQUFNbzFDLEVBQUk2QixFQUFNNzVDLE9BQVMsRUFBSSxFQUN2QjI3QyxFQUFJM3RDLEtBQUtxekIsS0FBSzJXLEVBQUksSUFDbEI0RCxFQUFJLElBQUk3ekMsTUFBTTR6QyxHQUVwQixJQUFLLElBQUk3N0MsRUFBSSxFQUFHQSxFQUFJNjdDLElBQUs3N0MsRUFBRyxDQUMxQixNQUFNczdDLEVBQU0sSUFBSU4sWUFBWSxJQUU1QixJQUFLLElBQUllLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUN4QlQsRUFBSVMsR0FBS2hDLEVBQVUsR0FBSi81QyxFQUFhLEVBQUorN0MsSUFBVSxHQUFLaEMsRUFBVSxHQUFKLzVDLEVBQWEsRUFBSis3QyxFQUFRLElBQU0sR0FBS2hDLEVBQVUsR0FBSi81QyxFQUFhLEVBQUorN0MsRUFBUSxJQUFNLEVBQUloQyxFQUFVLEdBQUovNUMsRUFBYSxFQUFKKzdDLEVBQVEsR0FHbklELEVBQUU5N0MsR0FBS3M3QyxDQUNULENBRUFRLEVBQUVELEVBQUksR0FBRyxJQUEyQixHQUFwQjlCLEVBQU03NUMsT0FBUyxHQUFTZ08sS0FBSzh0QyxJQUFJLEVBQUcsSUFDcERGLEVBQUVELEVBQUksR0FBRyxJQUFNM3RDLEtBQUs2dkIsTUFBTStkLEVBQUVELEVBQUksR0FBRyxLQUNuQ0MsRUFBRUQsRUFBSSxHQUFHLElBQTJCLEdBQXBCOUIsRUFBTTc1QyxPQUFTLEdBQVMsV0FFeEMsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUk2N0MsSUFBSzc3QyxFQUFHLENBQzFCLE1BQU1pOEMsRUFBSSxJQUFJakIsWUFBWSxJQUUxQixJQUFLLElBQUl4MkMsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3hCeTNDLEVBQUV6M0MsR0FBS3MzQyxFQUFFOTdDLEdBQUd3RSxHQUdkLElBQUssSUFBSUEsRUFBSSxHQUFJQSxFQUFJLEtBQU1BLEVBQ3pCeTNDLEVBQUV6M0MsR0FBS2szQyxFQUFLTyxFQUFFejNDLEVBQUksR0FBS3kzQyxFQUFFejNDLEVBQUksR0FBS3kzQyxFQUFFejNDLEVBQUksSUFBTXkzQyxFQUFFejNDLEVBQUksSUFBSyxHQUczRCxJQUFJK0IsRUFBSXExQyxFQUFFLEdBQ05wMUMsRUFBSW8xQyxFQUFFLEdBQ045ekIsRUFBSTh6QixFQUFFLEdBQ052RCxFQUFJdUQsRUFBRSxHQUNObDVDLEVBQUlrNUMsRUFBRSxHQUVWLElBQUssSUFBSXAzQyxFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFBRyxDQUMzQixNQUFNcU4sRUFBSTNELEtBQUs2dkIsTUFBTXY1QixFQUFJLElBQ25CMDNDLEVBQUlSLEVBQUtuMUMsRUFBRyxHQUFLakMsRUFBRXVOLEVBQUdyTCxFQUFHc2hCLEVBQUd1d0IsR0FBSzMxQyxFQUFJaTVDLEVBQUU5cEMsR0FBS29xQyxFQUFFejNDLEtBQU8sRUFDM0Q5QixFQUFJMjFDLEVBQ0pBLEVBQUl2d0IsRUFDSkEsRUFBSTR6QixFQUFLbDFDLEVBQUcsTUFBUSxFQUNwQkEsRUFBSUQsRUFDSkEsRUFBSTIxQyxDQUNOLENBRUFOLEVBQUUsR0FBS0EsRUFBRSxHQUFLcjFDLElBQU0sRUFDcEJxMUMsRUFBRSxHQUFLQSxFQUFFLEdBQUtwMUMsSUFBTSxFQUNwQm8xQyxFQUFFLEdBQUtBLEVBQUUsR0FBSzl6QixJQUFNLEVBQ3BCOHpCLEVBQUUsR0FBS0EsRUFBRSxHQUFLdkQsSUFBTSxFQUNwQnVELEVBQUUsR0FBS0EsRUFBRSxHQUFLbDVDLElBQU0sQ0FDdEIsQ0FFQSxNQUFPLENBQUNrNUMsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEVBQUksSUFBYSxJQUFQQSxFQUFFLEdBQVdBLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxFQUFJLElBQWEsSUFBUEEsRUFBRSxHQUFXQSxFQUFFLElBQU0sR0FBSyxJQUFNQSxFQUFFLElBQU0sR0FBSyxJQUFNQSxFQUFFLElBQU0sRUFBSSxJQUFhLElBQVBBLEVBQUUsR0FBV0EsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEVBQUksSUFBYSxJQUFQQSxFQUFFLEdBQVdBLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxFQUFJLElBQWEsSUFBUEEsRUFBRSxHQUN4ViwrQkNsR0EvN0MsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBQ2xCQSxFQUFRNnBDLGdCQUFrQkEsRUFFMUIsSUFFZ0MzcUMsRUFGNUJ3bkMsR0FFNEJ4bkMsRUFGTyxFQUFRLFFBRU1BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQU12RixNQUFNNHFDLEVBQVksR0FFbEIsSUFBSyxJQUFJcDhDLEVBQUksRUFBR0EsRUFBSSxNQUFPQSxFQUN6Qm84QyxFQUFVdDVDLE1BQU05QyxFQUFJLEtBQU82SCxTQUFTLElBQUl5TixNQUFNLElBR2hELFNBQVM2bUMsRUFBZ0JiLEVBQUt2ZSxFQUFTLEdBR3JDLE9BQVFxZixFQUFVZCxFQUFJdmUsRUFBUyxJQUFNcWYsRUFBVWQsRUFBSXZlLEVBQVMsSUFBTXFmLEVBQVVkLEVBQUl2ZSxFQUFTLElBQU1xZixFQUFVZCxFQUFJdmUsRUFBUyxJQUFNLElBQU1xZixFQUFVZCxFQUFJdmUsRUFBUyxJQUFNcWYsRUFBVWQsRUFBSXZlLEVBQVMsSUFBTSxJQUFNcWYsRUFBVWQsRUFBSXZlLEVBQVMsSUFBTXFmLEVBQVVkLEVBQUl2ZSxFQUFTLElBQU0sSUFBTXFmLEVBQVVkLEVBQUl2ZSxFQUFTLElBQU1xZixFQUFVZCxFQUFJdmUsRUFBUyxJQUFNLElBQU1xZixFQUFVZCxFQUFJdmUsRUFBUyxLQUFPcWYsRUFBVWQsRUFBSXZlLEVBQVMsS0FBT3FmLEVBQVVkLEVBQUl2ZSxFQUFTLEtBQU9xZixFQUFVZCxFQUFJdmUsRUFBUyxLQUFPcWYsRUFBVWQsRUFBSXZlLEVBQVMsS0FBT3FmLEVBQVVkLEVBQUl2ZSxFQUFTLE1BQU0vcEIsYUFDdmYsQ0FpQkFWLEVBQUEsUUFmQSxTQUFtQmdwQyxFQUFLdmUsRUFBUyxHQUMvQixNQUFNc2UsRUFBT2MsRUFBZ0JiLEVBQUt2ZSxHQU1sQyxLQUFLLEVBQUlpYyxFQUFVcG1DLFNBQVN5b0MsR0FDMUIsTUFBTW4yQyxVQUFVLCtCQUdsQixPQUFPbTJDLENBQ1QsK0JDdENBeDdDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQixJQUlnQ2QsRUFKNUI2cUMsR0FJNEI3cUMsRUFKRSxFQUFRLFFBSVdBLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQUZuRm1uQyxFQUFhLEVBQVEsTUFRekIsSUFBSTJELEVBRUFDLEVBR0FDLEVBQWEsRUFDYkMsRUFBYSxFQW1GakJucUMsRUFBQSxRQWpGQSxTQUFZalIsRUFBU3E3QyxFQUFLM2YsR0FDeEIsSUFBSS84QixFQUFJMDhDLEdBQU8zZixHQUFVLEVBQ3pCLE1BQU12MkIsRUFBSWsyQyxHQUFPLElBQUl6MEMsTUFBTSxJQUUzQixJQUFJeWIsR0FESnJpQixFQUFVQSxHQUFXLENBQUMsR0FDSHFpQixNQUFRNDRCLEVBQ3ZCSyxPQUFnQ3I1QyxJQUFyQmpDLEVBQVFzN0MsU0FBeUJ0N0MsRUFBUXM3QyxTQUFXSixFQUluRSxHQUFZLE1BQVI3NEIsR0FBNEIsTUFBWmk1QixFQUFrQixDQUNwQyxNQUFNQyxFQUFZdjdDLEVBQVE4TSxTQUFXOU0sRUFBUXc3QyxLQUFPUixFQUFLenBDLFdBRTdDLE1BQVI4USxJQUVGQSxFQUFPNDRCLEVBQVUsQ0FBZ0IsRUFBZk0sRUFBVSxHQUFXQSxFQUFVLEdBQUlBLEVBQVUsR0FBSUEsRUFBVSxHQUFJQSxFQUFVLEdBQUlBLEVBQVUsS0FHM0YsTUFBWkQsSUFFRkEsRUFBV0osRUFBaUQsT0FBcENLLEVBQVUsSUFBTSxFQUFJQSxFQUFVLElBRTFELENBTUEsSUFBSUUsT0FBMEJ4NUMsSUFBbEJqQyxFQUFReTdDLE1BQXNCejdDLEVBQVF5N0MsTUFBUXIxQyxLQUFLbXJCLE1BRzNEbXFCLE9BQTBCejVDLElBQWxCakMsRUFBUTA3QyxNQUFzQjE3QyxFQUFRMDdDLE1BQVFOLEVBQWEsRUFFdkUsTUFBTU8sRUFBS0YsRUFBUU4sR0FBY08sRUFBUU4sR0FBYyxJQWF2RCxHQVhJTyxFQUFLLFFBQTBCMTVDLElBQXJCakMsRUFBUXM3QyxXQUNwQkEsRUFBV0EsRUFBVyxFQUFJLFFBS3ZCSyxFQUFLLEdBQUtGLEVBQVFOLFNBQWlDbDVDLElBQWxCakMsRUFBUTA3QyxRQUM1Q0EsRUFBUSxHQUlOQSxHQUFTLElBQ1gsTUFBTSxJQUFJaFMsTUFBTSxtREFHbEJ5UixFQUFhTSxFQUNiTCxFQUFhTSxFQUNiUixFQUFZSSxFQUVaRyxHQUFTLFlBRVQsTUFBTUcsR0FBNEIsS0FBYixVQUFSSCxHQUE2QkMsR0FBUyxXQUNuRHYyQyxFQUFFeEcsS0FBT2k5QyxJQUFPLEdBQUssSUFDckJ6MkMsRUFBRXhHLEtBQU9pOUMsSUFBTyxHQUFLLElBQ3JCejJDLEVBQUV4RyxLQUFPaTlDLElBQU8sRUFBSSxJQUNwQnoyQyxFQUFFeEcsS0FBWSxJQUFMaTlDLEVBRVQsTUFBTUMsRUFBTUosRUFBUSxXQUFjLElBQVEsVUFDMUN0MkMsRUFBRXhHLEtBQU9rOUMsSUFBUSxFQUFJLElBQ3JCMTJDLEVBQUV4RyxLQUFhLElBQU5rOUMsRUFFVDEyQyxFQUFFeEcsS0FBT2s5QyxJQUFRLEdBQUssR0FBTSxHQUU1QjEyQyxFQUFFeEcsS0FBT2s5QyxJQUFRLEdBQUssSUFFdEIxMkMsRUFBRXhHLEtBQU8yOEMsSUFBYSxFQUFJLElBRTFCbjJDLEVBQUV4RyxLQUFrQixJQUFYMjhDLEVBRVQsSUFBSyxJQUFJdDZDLEVBQUksRUFBR0EsRUFBSSxJQUFLQSxFQUN2Qm1FLEVBQUV4RyxFQUFJcUMsR0FBS3FoQixFQUFLcmhCLEdBR2xCLE9BQU9xNkMsSUFBTyxFQUFJL0QsRUFBV3dELGlCQUFpQjMxQyxFQUNoRCwrQkNyR0EzRyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFBSXNtQyxFQUFLTSxFQUF1QixFQUFRLE9BRXBDaUUsRUFBTWpFLEVBQXVCLEVBQVEsT0FFekMsU0FBU0EsRUFBdUIxbkMsR0FBTyxPQUFPQSxHQUFPQSxFQUFJYSxXQUFhYixFQUFNLENBQUVvQixRQUFTcEIsRUFBTyxDQUc5RixJQUFJMHBDLEdBRE8sRUFBSXRDLEVBQUdobUMsU0FBUyxLQUFNLEdBQU11cUMsRUFBSXZxQyxTQUUzQ04sRUFBQSxRQUFrQjRvQywrQkNibEJyN0MsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFROHFDLElBQU05cUMsRUFBUStxQyxTQUFNLEVBQzVCL3FDLEVBQUEsUUF5QkEsU0FBYWdiLEVBQU1nd0IsRUFBU0MsR0FDMUIsU0FBU0MsRUFBYXo2QyxFQUFPMDZDLEVBQVdmLEVBQUszZixHQUMzQyxJQUFJMmdCLEVBVUosR0FScUIsaUJBQVYzNkMsSUFDVEEsRUF0Qk4sU0FBdUI0NkMsR0FDckJBLEVBQU0xRCxTQUFTQyxtQkFBbUJ5RCxJQUVsQyxNQUFNNUQsRUFBUSxHQUVkLElBQUssSUFBSS81QyxFQUFJLEVBQUdBLEVBQUkyOUMsRUFBSXo5QyxTQUFVRixFQUNoQys1QyxFQUFNajNDLEtBQUs2NkMsRUFBSTMvQixXQUFXaGUsSUFHNUIsT0FBTys1QyxDQUNULENBWWM2RCxDQUFjNzZDLElBR0MsaUJBQWQwNkMsSUFDVEEsR0FBWSxFQUFJL0UsRUFBTzlsQyxTQUFTNnFDLElBR2dFLE1BQWhFLFFBQTVCQyxFQUFhRCxTQUFzQyxJQUFmQyxPQUF3QixFQUFTQSxFQUFXeDlDLFFBQ3BGLE1BQU1nRixVQUFVLG9FQU1sQixJQUFJNjBDLEVBQVEsSUFBSUksV0FBVyxHQUFLcDNDLEVBQU03QyxRQU90QyxHQU5BNjVDLEVBQU0veEMsSUFBSXkxQyxHQUNWMUQsRUFBTS94QyxJQUFJakYsRUFBTzA2QyxFQUFVdjlDLFFBQzNCNjVDLEVBQVF3RCxFQUFTeEQsR0FDakJBLEVBQU0sR0FBZ0IsR0FBWEEsRUFBTSxHQUFZdUQsRUFDN0J2RCxFQUFNLEdBQWdCLEdBQVhBLEVBQU0sR0FBWSxJQUV6QjJDLEVBQUssQ0FDUDNmLEVBQVNBLEdBQVUsRUFFbkIsSUFBSyxJQUFJLzhCLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUN4QjA4QyxFQUFJM2YsRUFBUy84QixHQUFLKzVDLEVBQU0vNUMsR0FHMUIsT0FBTzA4QyxDQUNULENBRUEsT0FBTyxFQUFJL0QsRUFBV3dELGlCQUFpQnBDLEVBQ3pDLENBR0EsSUFDRXlELEVBQWFsd0IsS0FBT0EsQ0FDdEIsQ0FBRSxNQUFPM2pCLEdBQU0sQ0FLZixPQUZBNnpDLEVBQWFILElBQU1BLEVBQ25CRyxFQUFhSixJQUFNQSxFQUNaSSxDQUNULEVBdkVBLElBSWdDaHNDLEVBSjVCbW5DLEVBQWEsRUFBUSxNQUVyQkQsR0FFNEJsbkMsRUFGSSxFQUFRLFFBRVNBLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQWN2RixNQUFNNnJDLEVBQU0sdUNBQ1ovcUMsRUFBUStxQyxJQUFNQSxFQUNkLE1BQU1ELEVBQU0sdUNBQ1o5cUMsRUFBUThxQyxJQUFNQSwrQkMzQmR2OUMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBRWxCLElBQUl1ckMsRUFBVTNFLEVBQXVCLEVBQVEsT0FFekNtRCxFQUFPbkQsRUFBdUIsRUFBUSxPQUV0Q1AsRUFBYSxFQUFRLE1BRXpCLFNBQVNPLEVBQXVCMW5DLEdBQU8sT0FBT0EsR0FBT0EsRUFBSWEsV0FBYWIsRUFBTSxDQUFFb0IsUUFBU3BCLEVBQU8sQ0E2QjlGYyxFQUFBLFFBM0JBLFNBQVlqUixFQUFTcTdDLEVBQUszZixHQUN4QixHQUFJOGdCLEVBQVFqckMsUUFBUXVvQyxhQUFldUIsSUFBUXI3QyxFQUN6QyxPQUFPdzhDLEVBQVFqckMsUUFBUXVvQyxhQUt6QixNQUFNMkMsR0FGTno4QyxFQUFVQSxHQUFXLENBQUMsR0FFRDhNLFNBQVc5TSxFQUFRdzdDLEtBQU9SLEVBQUt6cEMsV0FNcEQsR0FIQWtyQyxFQUFLLEdBQWUsR0FBVkEsRUFBSyxHQUFZLEdBQzNCQSxFQUFLLEdBQWUsR0FBVkEsRUFBSyxHQUFZLElBRXZCcEIsRUFBSyxDQUNQM2YsRUFBU0EsR0FBVSxFQUVuQixJQUFLLElBQUkvOEIsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3hCMDhDLEVBQUkzZixFQUFTLzhCLEdBQUs4OUMsRUFBSzk5QyxHQUd6QixPQUFPMDhDLENBQ1QsQ0FFQSxPQUFPLEVBQUkvRCxFQUFXd0QsaUJBQWlCMkIsRUFDekMsK0JDckNBaitDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQixJQUFJc21DLEVBQUtNLEVBQXVCLEVBQVEsT0FFcEM2RSxFQUFPN0UsRUFBdUIsRUFBUSxPQUUxQyxTQUFTQSxFQUF1QjFuQyxHQUFPLE9BQU9BLEdBQU9BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixFQUFPLENBRzlGLElBQUkwcEMsR0FETyxFQUFJdEMsRUFBR2htQyxTQUFTLEtBQU0sR0FBTW1yQyxFQUFLbnJDLFNBRTVDTixFQUFBLFFBQWtCNG9DLCtCQ2JsQnI3QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFFZ0NkLEVBRjVCd3NDLEdBRTRCeHNDLEVBRkksRUFBUSxNQUVTQSxFQUFJYSxXQUFhYixFQUFNLENBQUVvQixRQUFTcEIsR0FPdkZjLEVBQUEsUUFMQSxTQUFrQitvQyxHQUNoQixNQUF1QixpQkFBVEEsR0FBcUIyQyxFQUFPcHJDLFFBQVEzSCxLQUFLb3dDLEVBQ3pELCtCQ1hBeDdDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQixJQUVnQ2QsRUFGNUJ3bkMsR0FFNEJ4bkMsRUFGTyxFQUFRLFFBRU1BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQVd2RmMsRUFBQSxRQVRBLFNBQWlCK29DLEdBQ2YsS0FBSyxFQUFJckMsRUFBVXBtQyxTQUFTeW9DLEdBQzFCLE1BQU1uMkMsVUFBVSxnQkFHbEIsT0FBTzhuQyxTQUFTcU8sRUFBSy9sQyxNQUFNLEdBQUksSUFBSyxHQUN0Qyx5QkNqQkFrakMsRUFBT2xtQyxRQUFVMnJDLFFBQVEsZ0NDQXpCekYsRUFBT2xtQyxRQUFVMnJDLFFBQVEsZUNDckJDLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQjk2QyxJQUFqQis2QyxFQUNILE9BQU9BLEVBQWEvckMsUUFHckIsSUFBSWttQyxFQUFTMEYsRUFBeUJFLEdBQVksQ0FHakQ5ckMsUUFBUyxDQUFDLEdBT1gsT0FIQWdzQyxFQUFvQkYsR0FBVTc5QyxLQUFLaTRDLEVBQU9sbUMsUUFBU2ttQyxFQUFRQSxFQUFPbG1DLFFBQVM2ckMsR0FHcEUzRixFQUFPbG1DLE9BQ2YsQ0NyQkE2ckMsRUFBb0I5N0MsRUFBS20yQyxJQUN4QixJQUFJK0YsRUFBUy9GLEdBQVVBLEVBQU9ubUMsV0FDN0IsSUFBT21tQyxFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQTJGLEVBQW9COUYsRUFBRWtHLEVBQVEsQ0FBRWg0QyxFQUFHZzRDLElBQzVCQSxDQUFNLEVDTGRKLEVBQW9COUYsRUFBSSxDQUFDL2xDLEVBQVNrc0MsS0FDakMsSUFBSSxJQUFJcCtDLEtBQU9vK0MsRUFDWEwsRUFBb0IvN0MsRUFBRW84QyxFQUFZcCtDLEtBQVMrOUMsRUFBb0IvN0MsRUFBRWtRLEVBQVNsUyxJQUM1RVAsT0FBTzRRLGVBQWU2QixFQUFTbFMsRUFBSyxDQUFFNlIsWUFBWSxFQUFNakwsSUFBS3czQyxFQUFXcCtDLElBRTFFLEVDTkQrOUMsRUFBb0IvN0MsRUFBSSxDQUFDb1AsRUFBS29ZLElBQVUvcEIsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS2lSLEVBQUtvWSxHQ0NsRnUwQixFQUFvQjE3QyxFQUFLNlAsSUFDSCxvQkFBWC9QLFFBQTBCQSxPQUFPazhDLGFBQzFDNStDLE9BQU80USxlQUFlNkIsRUFBUy9QLE9BQU9rOEMsWUFBYSxDQUFFMTdDLE1BQU8sV0FFN0RsRCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUFFdlAsT0FBTyxHQUFPLEVDRjlELElBQUkyN0MsRUFBc0JQLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VQcm9taXNlL3VzZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc3dyL19pbnRlcm5hbC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvY29yZS9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9jbGFzc2NhdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/ZmYxYiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/NDMyOCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzP2MwYjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC5tb2R1bGUuY3NzP2ZmMmYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzPzg3MTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC5tb2R1bGUuY3NzP2ZjZTIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzP2E4YWUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLm1vZHVsZS5jc3M/OTI5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQubW9kdWxlLmNzcz84ZmQxIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzPzNmMWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC5tb2R1bGUuY3NzPzU4ODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzP2VjODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAubW9kdWxlLmNzcz8wNmFkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL3V0aWxzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9yZW1vdmVDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9hZGRDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9SZXBsYWNlVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3Njcm9sbHBhcmVudC9zY3JvbGxwYXJlbnQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY3Jvc3NlZC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+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+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVtS0FabUxrQVJMelgzZ251S2twXCIsXCJsZWZ0XCI6XCJ1MWw1QUpHYlVpUDZSVkZJS3hPSVwiLFwic21hbGxcIjpcImh4WnBLOUNwQksxd1IwVzB2NFNEXCIsXCJsYXJnZVwiOlwibzlEWW10NHhmTGFJbWlWekk5ZFFcIixcInhsYXJnZVwiOlwicW1FVnhTWlM1a2ZMM2FWYmVlMW5cIixcImludmVydGVkXCI6XCJDTk9aSExkOVhib2t6T1c2TFlCUFwiLFwicm91bmRlZFwiOlwiakpDQXp3MlN5YUg0dElXWHJBbFJcIixcInJpZ2h0T2Zmc2V0XCI6XCJLR0N1N2FQalF5X2FGTmpIV051d1wiLFwibGVmdE9mZnNldFwiOlwiZERIWXlHelhOaTc3M0ZBbDEzR1hcIixcIm5vU2hhZG93XCI6XCJsUUYxWWNVcU0wT0h2UFNsU3dsX1wiLFwibm9Cb3JkZXJcIjpcInNFbzI1RWl2NnpzMURfeDVxOFZ5XCIsXCJ0cmFuc3BhcmVudFwiOlwidm0zY21BTk51WWxhUU01WXF6OUdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlBpa2Z6ajd6WWcySW50ZEp5bXVLXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwib1NnVjVjd1g2aW5rU2JDRzk4dzhcIixcIm5vUGFkZGluZ1wiOlwiZ1NackdSMXhxbThRMWlSVWZHZ2FcIixcImNvbnRlbnRcIjpcInBZTFVqOW5vQXFUOFd5dGpET09iXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcImlPeV90aFVmd3hJcVpPcldTSXp4XCIsXCJpbnZlcnRlZFwiOlwiZzc5ampjV1ZubXhMb1BOeUF4NDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlVuajRycDFEeTcxQUNydXpYbDc1XCIsXCJsZWZ0XCI6XCJFWFdNUnZ2ZVJ2UWlmaXh6VEgwMlwiLFwic21hbGxcIjpcIl9VMHpuVWs1UVRBelBuUzJnYUxDXCIsXCJtZWRpdW1cIjpcImFIOHU0czJNdFljNXk0dnl1YkR3XCIsXCJsYXJnZVwiOlwiYzMwNnlWNzhhbF9lR3dCU2ttRm1cIixcInhsYXJnZVwiOlwieHZBMW1lVW1FMjhBRU9wanNXYzlcIixcImludmVydGVkXCI6XCJXQjc3WUlET1N3Sm9YNjhOamxVR1wiLFwicm91bmRlZFwiOlwiazJuSkNzRU5OZ0N6Mkhsc2pfYkdcIixcInJpZ2h0T2Zmc2V0XCI6XCJqQWU1RVZFMzdPcktZdmtYZGMxc1wiLFwibGVmdE9mZnNldFwiOlwiRGdidEI2RzRMb0JEZDA0UF9Nek9cIixcIm5vU2hhZG93XCI6XCJLcFFJOTVfZjhuSHZrN0cySjZoOFwiLFwidHJhbnNwYXJlbnRcIjpcIkw4UG54VVFvZ3pnRk1NVDdRSTRkXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKdWxheFNjY29HbXF0Z1ROSm1rOVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInpUWXI5VzdnMlNxYlZqUEZBb2tHXCIsXCJub1BhZGRpbmdcIjpcIlVIelRtNTFrVnlsbDUyX1M3c0dCXCIsXCJub0JvcmRlclwiOlwiaFJQMVhZZnVKNDlUc1lVX2NPNUFcIixcImRpc2FibGVkXCI6XCJsd1dJVFBoTTlUTW81ODVEc2F3OFwiLFwiY29udGVudFwiOlwiTXlUX1B1ZkpkRXZzWkUzaFNXOFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwic3k4bEtWV1A1NkFsT1I3eXNfOUFcIixcInNtYWxsXCI6XCJYamZwY3VQdGd1Rlp2S3J4eHQ3eVwiLFwibWVkaXVtXCI6XCJ0TFAzZFpXZXBYSDNIS2cxN3NPSFwiLFwibGFyZ2VcIjpcIldncDlxSFdEclFpOWZtY3hRSVZLXCIsXCJ4bGFyZ2VcIjpcImxVQTZ0cExrV2NHRmdub3FDRnZ1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIktrMmRwMTVId01aeklOYlVGQVo0XCIsXCJob3Jpem9udGFsXCI6XCJKc3pPX1VnN3BLTFlRMERlaE44X1wiLFwidmVydGljYWxcIjpcIkVWVDYybGdoQzk5ZTliZGpZbHk1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcIlB2YmVCbTRTTXRNcWxRTlR5UWpRXCIsXCJzbWFsbFwiOlwiUzdFM0VQeV9BV1F1a0VleHV2VGZcIixcImxhcmdlXCI6XCJhMUZzSXRLUFFFT0JlVHFCQ3VEbFwiLFwieGxhcmdlXCI6XCJzRmhnUUVOX1VPTDNaeE9BUjFJZVwiLFwic2VsZWN0ZWRcIjpcImFVeDJ1U0JTczE0VnF3UHFqdmxRXCIsXCJzck9ubHlcIjpcIkpJUW1lWmRkOVRGbDVJX2dpZlBpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaWlZIY1g0NVhDYmxtRGFiOWV3WlwiLFwibW9kYWxIZWFkZXJcIjpcInhUWDFYSmZDU1VzcmhfeUxsWm9pXCIsXCJtb2RhbENvbnRlbnRcIjpcIlRlNmpIZGx5anNRWG1uVHM5YmFuXCIsXCJub1BhZGRpbmdcIjpcIkx6X2d3U3dQM1FDTjV6WXpGc0VpXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIkdoMXV2eE1mRWdQVGR0NjZRaXMyXCIsXCJtb2RhbEJ1dHRvbnNcIjpcIklhdzM0RmtNSnFqckdRNThCR2Z4XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiZHJhd2VyXCI6XCJVM2RDenFUeXlueXpCbjJtRmttV1wiLFwiZHJhd2VyRW50ZXJcIjpcIkhPOWh4VW80R3piWDJLYzNFU19XXCIsXCJkcmF3ZXJFbnRlckFjdGl2ZVwiOlwiZGhPazFUa1pWbTg4RkdhcG1va0JcIixcImRyYXdlckVudGVyRG9uZVwiOlwibVNxSDhvNE1VUXlvWVYzOTc3d0lcIixcImRyYXdlckV4aXRcIjpcIlR0dVFXMVhTaW1ZcEdfbV9UVG80XCIsXCJkcmF3ZXJFeGl0QWN0aXZlXCI6XCJ4RG0yQXRUY00zeENCZmdacExtRVwiLFwiZHJhd2VyRXhpdERvbmVcIjpcImpZZ0l6T0swNmFQOU9NMEFBNTdxXCIsXCJkcmF3ZXJDb250ZW50XCI6XCJpSWdCQXNvUEVqRk9rSDhVbktWWFwiLFwiZHJhd2VySGVhZGVyQ29udGVudFwiOlwiVkM4anZWaEpSY2Z0cWxhY0dBR0lcIixcImRyYXdlckhlYWRlckNsb3NlSWNvbkNvbnRlbnRcIjpcIkpSNUdJRlFHQV9TWjg3U2NVbEU5XCIsXCJkcmF3ZXJIZWFkZXJDbG9zZUljb25cIjpcIkI2UmMzM3BRelhCT3ViZTBqZFo5XCIsXCJkcmF3ZXJNYWluXCI6XCJNeWlOMVVOamJPVGd3SjFUWG1FWVwiLFwiZHJhd2VyRm9vdGVyXCI6XCJDZWFfbnRHTDU5NUdkbmpzMURxVVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwickJhZlhrb1RDbjJBaDZ4WVlteGZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiS1drN29aOHR2UGZRaWNnUVlsVmFcIixcImxhYmVsXCI6XCJlNnpyeDdVT1BfQlNvTU0zR3JqUVwiLFwic21hbGxcIjpcImloU25EUWcweWd4Y1ZMSXlTSmtNXCIsXCJsYXJnZVwiOlwiRnB3aGJEN0hYeF91RlQzbDAxd2JcIixcInhsYXJnZVwiOlwiWVZkczR1X0RmV1NHMXIwU0FHblNcIixcImludmVydGVkXCI6XCJDS3lub0xoaUxkNkt6QVlpNU50R1wiLFwicm91bmRlZFwiOlwidjcybXpKdW1GU2lET09FMU1uWEhcIixcIm5vU2hhZG93XCI6XCJFb2V3SkVEYkdkdGVKX05SZlM1RlwiLFwibm9Cb3JkZXJcIjpcImNiN2w0eHZjTm5ITmxRWm1MamtiXCIsXCJub1BhZGRpbmdcIjpcInZjT3dEWXVHRjJldG9QZnlGRFg1XCIsXCJ0cmFuc3BhcmVudFwiOlwibDA4a2hhWElVT2NydUJGSHdzN1hcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkkweHZKYkIwTE5UMFMxNWpUTVdXXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiWDZmcVVjVkgxQmxDUkpCaWlKaWlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImoxbWZpWUVHb2xUUm1iQm1HS2xRXCIsXCJyb3dcIjpcIkVHYUt2bXFNMlNhd2lGclc4Q3R1XCIsXCJjb2x1bW5cIjpcIk5NaTBNVDFiN3JwMVpqeWU4VVZBXCIsXCJmaXhlZFwiOlwiZzBqM2trUXJfQWpDS0ZkOTRTMXNcIixcInBsYWluXCI6XCJGcjFxN1duRjFuRm5uYmZncGFSelwiLFwidHJhbnNwYXJlbnRcIjpcInVkUlplOUgwYktVSFhqT3dHMUZuXCIsXCJ0b3BcIjpcInVZaUt3NlZ2REVraGpaSHp2bzdlXCIsXCJ0b3BFZGdlXCI6XCJ0UmJFY1lqRTNLbmNzTndUYnZWTVwiLFwidG9wT25FZGdlXCI6XCJMR3VuRzM3WDFfSFJldXczcXp1YVwiLFwicmlnaHRcIjpcImx3MjdyR1ZsbzM0YXhDeHczUUhpXCIsXCJyaWdodEVkZ2VcIjpcIlBaSXR2bGVGSUlqMEp4Mk1pa1JFXCIsXCJyaWdodE9uRWRnZVwiOlwiS051R2FEUHE5cm1YZmdtTzNwY2JcIixcImJvdHRvbVwiOlwiZG4xdWgxdGFzR3hER3FtVTE4SE5cIixcImJvdHRvbUVkZ2VcIjpcImVEMFVDckJScHNSVFBQd3dJb1ZnXCIsXCJib3R0b21PbkVkZ2VcIjpcIklyaEg1Z2Z5R3NRNmtkY1A5NFJRXCIsXCJsZWZ0XCI6XCJENWZHSG5BR0NNUjRMdGI5eTRIclwiLFwibGVmdEVkZ2VcIjpcIl9BdEFkMnRyN3Qxa1h1c1JiWFN6XCIsXCJsZWZ0T25FZGdlXCI6XCJfOEM5ZGQwWF9KWFk0dUh6dzVOalwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiUURrczhvdnQ5UlZjRldlRUI4d2JcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJDVnVRUkU2NTJHSDJWSm44ek9Uc1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcImZwX0JMSjJGVzRPeXliMGJIaUQ0XCIsXCJzbWFsbFwiOlwienNWRE5mTlJrb3MwUTV1djlGUjlcIixcIm1lZGl1bVwiOlwiZVNsaWwzZXZQdFBCc3dXRjgwQzVcIixcImxhcmdlXCI6XCJUN1VMeXExeUU5QVZYRU1rblY0R1wiLFwieGxhcmdlXCI6XCJRUEFjZVZRZFo2UUlRMlF2aWp3Z1wiLFwiaW52ZXJ0ZWRcIjpcIm1GVEdiaExhNE5sVU8xNm52SnJrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJXY2VteXIyR3I4WkNHYzZCamJxd1wiLFwic21hbGxcIjpcIlRfcGE4Q2NwTDFHdnVEc2R2c3FxXCIsXCJtZWRpdW1cIjpcIm5MTEVyak9nZmE1YjJzT2VaclE1XCIsXCJsYXJnZVwiOlwiUTcxTkZCSHJTeFFMUUU0QUdEMmhcIixcInhsYXJnZVwiOlwiRWJCaXlGMXJnNndSYXhTTUs4c29cIixcInJvdW5kZWRcIjpcInRManV3UlNzSWlMSkdWc3JhcmJkXCIsXCJ0b3BPZmZzZXRcIjpcImQ0S0xwSTc5Q3VTVTZna1BQSW5BXCIsXCJyaWdodE9mZnNldFwiOlwiRzdoSlpvWXY4cUlyTm1GQ3lnTUVcIixcImJvdHRvbU9mZnNldFwiOlwiRFpzM0F2R2tWZE92SmZMZUo4R2hcIixcImxlZnRPZmZzZXRcIjpcIndFRW5XUmN2dXZvbWhfT0xPNWlxXCIsXCJpbnZlcnRlZFwiOlwiSzlXR0NGcFVhZE85V0lYd0Zhal9cIixcIm5vU2hhZG93XCI6XCJlQVFKMTBrRWtQbUR4TUd2bFl6eVwiLFwibm9Cb3JkZXJcIjpcIk9sRU5SOW50dVdZTEdPS0tLckdSXCIsXCJ0cmFuc3BhcmVudFwiOlwiS09jc1ByaXZyOTRyeG5mSFZsZmVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImdVU1R5M19OcDFtR0pIVzFOM2d4XCIsXCJzbWFsbFwiOlwiSVl1VnpoMUhCemdvVENpMldRX3BcIixcIm1lZGl1bVwiOlwiSk5nM19iQ0VmSXZpNGdlRWNzUzNcIixcImxhcmdlXCI6XCJuNjFzYXhBMjBfRXdNZ3Q5R3c0c1wiLFwieGxhcmdlXCI6XCJncUdudm5IOVg2bUd2endsNGFHelwiLFwicm91bmRlZFwiOlwiRGt6dXFoRWFpTVIzWE1zMU0xSWZcIixcInRvcE9mZnNldFwiOlwic0dudmV2dnN4QlpVYVhycFpRcElcIixcInJpZ2h0T2Zmc2V0XCI6XCJoZ1kzWnBreUQ3MHA3RThybjNiaVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJST29RWTZPYVJuUXpET2ZYX1FERlwiLFwibGVmdE9mZnNldFwiOlwiS2V2bTU4MmUzZ1hQSkUzT0RvcGFcIixcImludmVydGVkXCI6XCJPT3puQ2JBYmpPTGM0X2JDRXFmeVwiLFwibm9TaGFkb3dcIjpcInhySHhmY2UwMzRkZ1lORWtubFZNXCIsXCJub0JvcmRlclwiOlwiZUh0X1JJcThKR29ZSGM0aUNvZWdcIixcInRyYW5zcGFyZW50XCI6XCJuZmdxdFNnZnJ0ckdGRFdmWm9uUVwiLFwiZGlzYWJsZWRcIjpcIklfbmhKOXU2cFREXzJTRjNxbF9sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyTzVXNkRRazROdG9XcndtS01XZ1wiLFwiaGFzT3ZlcmxheVwiOlwibGx2bm1JOEsxM2c5UFRCaUNOejNcIixcIm92ZXJsYXlcIjpcIkdWazJqOHdWMXQzZ1k1dVhRNHFJXCIsXCJpbWFnZVwiOlwiZ1hqWXFLZTl3M05nWXVyWXdVUXBcIixcImNvdmVyXCI6XCJfbDdPTk9XYXlyOHR5dUdpeVVzY1wiLFwiY29udGFpblwiOlwiU1lqT2I4bEFobURiZHlsRklRWTlcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkhrcm96U2ZsbFRGbGtrYnF4WFdoXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwieHlIWGhoSEVZWE1ZZWF2V1p3X05cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJEWnlsQ01sR2ZlQ1V3U2J5ZUlxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpOEd1X1cxdzhXQkFZZmxMSVl6d1wiLFwiaGVhZGVyXCI6XCJHcDdSOHdZd2FMdEZvS0ZjUnRnTlwiLFwiaGVhZGVyTGFiZWxcIjpcIlZHa290TVRucVBSYUtjR1Y4UmpnXCIsXCJsaXN0XCI6XCJ2ZzlRTHRDWVRBczV4M2ZGNzl6cFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiWkZVZDdvU3BQTHQwRWQyWHFhV1pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJ4UTlCZmswWDFIbVpnaWhDdXRaVlwiLFwib3BlblwiOlwidXR2OUZZT1U3UTBKTm5aVzFlanZcIixcImVudHJhbmNlXCI6XCJ5WUtqY0N2RDJMOTRGcFBnT2lnUVwiLFwiaGVhZGVyXCI6XCJ3Tkw4NnM5ekdGaThYSzExS2xvUlwiLFwiZm9vdGVyXCI6XCJtdTRKZXYxYzRLY2lmZUY4TXpxZ1wiLFwibm9Cb3JkZXJcIjpcIkVhUFNqTDFuWHN6N1RDeDExTHJmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrWWg3REtZcUg2amRMWGQ3UGRKd1wiLFwibWVudUNvbnRhaW5lclwiOlwiUWxlQU8zeW1UbGlVNlpOQlF4ZmdcIixcInRvcFwiOlwiYXhmY3JqU0g0bHZ1anpyc2syUXBcIixcInJpZ2h0XCI6XCJMdFZsdFczQlBaNWdOWFZ4eGtyUFwiLFwibGVmdFwiOlwiUFJiNWY4WGNNWk9jWTV1ZlBNZHFcIixcImJvdHRvbVwiOlwiX19NWjVPb2lJclZpZEZYYlFmanVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiZ0daZl9Hc1dzd2tyME5URF9uYlFcIixcIm5vUGFkZGluZ1wiOlwiQ00yYkhTQ3h3dWl0TWVzN3U5V2ZcIixcImFjdGl2ZVwiOlwiczR0SmxLNE9GYzNyblhMME14cWtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIlgxRjRTUWtoUWgwZnh6NVl1M3RIXCIsXCJub1BhZGRpbmdcIjpcImtwRExYWlNEMktwMTloOXN1UkxBXCIsXCJhY3RpdmVcIjpcIkl3SVRqR242dlRadGVFS2pOb1ljXCIsXCJtZW51SXRlbVwiOlwibGRvUjZwR09ydGdITVhTcG1IN0ZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJqMGg5aGRfZ2x2STl4ZE9uYWF1WVwiLFwibm9PdmVybGF5XCI6XCJTTDQ4U3padWZLZ2RNaUdZM1lUTlwiLFwibW9kYWxcIjpcImhUWGNaZXZHeXlJMEFjdnByWFZKXCIsXCJ0cmFuc3BhcmVudFwiOlwiaWJxbG9HMUh4SHgzc3Rka1ZaU2pcIixcIm5vU2hhZG93XCI6XCJJRW81dkVlZnR2THBtd2kwVnlqRFwiLFwibW9kYWxCdXR0b25cIjpcIkZvUGZDM2o3Y0lnMkJZZnpxUUdFXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJHZXZiYkczRDBSMzR4R1VGczVZMVwiLFwibnVtYmVyc1wiOlwiZkw1STFXS1hDYVU5dnJCR3lKQjRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJEaDZqc1ExNWVNeWRzU01UQ3dSd1wiLFwidHJhbnNwYXJlbnRcIjpcIldUNk9QbGpDMnFmYkFXc2swejRyXCIsXCJmaXhlZFwiOlwicHU2czlNajVUMVlJZ212NExPbkNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJoZWFkZXJcIjpcIldTWVlCQXo1M2RocXVJT1pQV0JQXCIsXCJsYWJlbFwiOlwiYjU1aHlaMG9IbDBzNE90OU9od01cIixcImV4cGFuZGVkXCI6XCJOM0F6TzVrWmxoNEhBUGtubll6cVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiU21DaTR4T3hFc0x0aTYxR29ZazRcIixcInNlbGVjdGVkXCI6XCJfNHJKdENPWnBuZjN4bjhwbUZ2Q1FcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImUzeVhKQnJZVFc0c1ZaS1kyTkZtXCIsXCJzZWxlY3RBbGxDb250YWluZXJcIjpcImN6SExhNEwzdFJDSkRDaURCNkF6XCIsXCJjaGVja2JveFwiOlwiaUtxaldVZDk2elNwOXhtb2NYemtcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJheGloOUVudXpLMWZ3aHFZRFZSQVwiLFwibGFiZWxcIjpcInE1V3M5aHI4Wk1YN2ZTdkRLX3FuXCIsXCJub09wdGlvbnNcIjpcIm92S3ZCNUg4RW9Gem51TXFVdWpsXCIsXCJzZWFyY2hLZXl3b3JkXCI6XCJUd2NWYVJEejhjb2tJSzlEOUR4SlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaXgzYVpXTWVONUFsNFVLOHllYkpcIixcImljb25TZWFyY2hDb250YWluZXJcIjpcIlo1TFB4NDd5YkVLZVgyOVhCWUJDXCIsXCJyZXNldEJ1dHRvblwiOlwiaGpUOVpYdm12YzVRVXJ1d3o4RWxcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkVUR2JYVGRZQXAwRzQwVEpQTG5LXCIsXCJkaXNhYmxlZFwiOlwibkVDZ0dkWE9zcFVyUVdIanp3a2dcIixcImhlYWRlclwiOlwiWEFvSmh4VEFwY1I5bEdlZ3lwOUFcIixcImFjdGl2ZVwiOlwiZWJlbXp0WkVXSVY0XzZBc0tQUUhcIixcImNvbnRlbnRcIjpcInJSRFd2MnFxd1NyQnkzZXZaN0R3XCIsXCJub09wdGlvbnNcIjpcImZMUDR4NEl4bnlpV2hwNUJQNXNUXCIsXCJzZWFyY2hDb250YWluZXJcIjpcInlPRUNESmVEVlQ1ejVZYVhwZUpuXCIsXCJpY29uQnV0dG9uXCI6XCJhVktwM0gzSldyYUJmN0c1VWRhUFwiLFwiZXhwYW5kZWRcIjpcIkJyeHJ0RDNhTVg3SVU1MnJBMjIwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wicGxhY2Vob2xkZXJcIjpcImRkbFJpZG5JelloUUM5REdwZ0l0XCIsXCJhY3RpdmVcIjpcInNoSHNFSkd0Yno0Y21BNngxRzFsXCIsXCJ0YWdXcmFwcGVyXCI6XCJCR0VTaGM3cXUyZms5RFpFMlJVc1wiLFwic2VsZWN0ZWRPcHRpb25cIjpcIm1hOUJJanVHQ1FlS0Y0NHNndWNUXCIsXCJzZWxlY3RlZE9wdGlvbnNcIjpcIm5ScEF3djk3Q2VzcVFiRExjZXQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnNU9SMGFPTk9XMU9zMXh0a05IaVwiLFwidGFibGVcIjpcInNNUjFWYjYyWEV2T09XUnJXYzRRXCIsXCJwbGFjZWhvbGRlckNvbnRhaW5lclwiOlwiXzd4Mno3cF9rYlFPTERtRVg1NGlBXCIsXCJzY3JvbGxiYXJDb250YWluZXJcIjpcIkVBSDE0WFBlSkJ1RFdHcDVOVllvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqNFBpZ0pPTDVEZ3pEOE9ZeHNrelwiLFwiaXNIZWFkZXJTdGlja3lcIjpcIkFZUl80SGVvbEFqSkNPc2wzSFpKXCIsXCJib3JkZXJCb3R0b21cIjpcImlackQzdEgxMnpESUZPV3ZKVUQ3XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGFibGVIZWFkZXJDZWxsXCI6XCJKY0ExVnpWNE13VlEzTkVoMHZ6RVwiLFwic29ydEljb25WaXNpYmxlXCI6XCJJcTdPeHNRekwwNnhqOThPMExxSlwiLFwic29ydGFibGVcIjpcIlZTVFNoWTdMVGhfSUlqbnJQX19sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJkT3ZpZ1NnaHh5UTRDYmJDTWtDUlwiLFwiYWN0aXZlXCI6XCJ0cW5ZZFkwSHREbG1XNjF0akdiUVwiLFwiaGFzQXJyb3dcIjpcInFxTzZhMWpOTDZIVEpHN0hSMTF0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJBdlI3V0NEUnhDd3ZSVUFfajgwUFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiektGMzRhS3ZZWm5iTHVaempFZU9cIixcImNvbnRlbnRcIjpcIm9fMjFyX0VqTEtCM3hoZ0d5NzRzXCIsXCJjbG9zZUJ1dHRvblwiOlwiWlpQUlpMVXE5TVF5aWZEOHgyakhcIixcImRpc2FibGVkXCI6XCJ1Q0x6MHZiTm5RWkZYOGtWdVVpR1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ3dZS1JQcEdkSU1WWGtpTjBIOUJcIixcInNjcm9sbGFibGVcIjpcIm92ZGp3aHIyMWF3djJBZ2lRRWQyXCIsXCJ0YWdJbnB1dFwiOlwiYXZJbUdzM1hjTGVETEdoeEQ4YndcIixcImRpc2FibGVkXCI6XCJ5VDhQcDhUVXZQN3NRU0dlR0xOSlwiLFwidGV4dElucHV0XCI6XCJaaU5OZjJvTFZqRXh4cDlSVDJzX1wiLFwic21hbGxcIjpcIkxlbU1VVHNlaWd4SGJtSVlWVlRjXCIsXCJtZWRpdW1cIjpcIlBVSEpkTTdaRWIzTEZSZU0xX1VnXCIsXCJsYXJnZVwiOlwiajltazUyaEdob0Z3anc0RldIUTlcIixcInhsYXJnZVwiOlwiRWlXcWVGcVFYRTlMSFVoMXZ4cFhcIixcIm5vQm9yZGVyXCI6XCJPNldzT3BVWm9aZVRoVWJfVmlYblwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiTlBacmtzQ3BuWFZKU3Ffc25IalJcIixcInNtYWxsXCI6XCJqUUdyaVFKU2EwNHpzb0cxYTJ1OVwiLFwibWVkaXVtXCI6XCJsVm9ZOURwMTdIT0Jpbk1qMFE3b1wiLFwibGFyZ2VcIjpcIlFsVWFQYlg4RWFJaTdyWjRGYjhvXCIsXCJ4bGFyZ2VcIjpcInJZUE9NOWZOdFZMZFBGeVdLa0dFXCIsXCJub0JvcmRlclwiOlwiS0RUSU5zSGRvbFlSZVNiTGNvb0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwiekZpdUFUZ3NTQjQyVmRFbWNKWllcIixcImVudHJhbmNlXCI6XCJSOHJwT1VPdG5nWU9FdDdJMHBHTVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0Q29udGFpbmVyXCI6XCJYbExRT2U0NzRPdEJpYWNfZ1U3SFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvb2x0aXBcIjpcIkttNlVVeTBqcHFNMExBMmVYY2NjXCIsXCJhYnNvbHV0ZVwiOlwiZTUwekVqdGZRSzAwbGZfODg0T1lcIixcImZpeGVkXCI6XCJqcXhUNE1jT2VVRERuR3NlWmtCTFwiLFwibGVmdFwiOlwieUJ2MWx3REhwZXh4TzNEUHBkMXZcIixcInJpZ2h0XCI6XCJ2ODUyRXh4bVE2QXRTUUYyc1g4QVwiLFwidG9wXCI6XCJpVjJ5elBpem9vdTlvbVc4MTFoZ1wiLFwiYm90dG9tXCI6XCJWbW1FOEVOc0NremJ3THBMM1hKZ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieVk5SFY0MElUVFdnQVY4cUx3MXdcIixcImhhc092ZXJsYXlcIjpcInp1YjVicWRWWG00TkZ4cEk0SEJmXCIsXCJ2aWRlb1wiOlwiTVZDRFZqZmdtSEU3UWVtY1l4R2xcIixcImNvdmVyXCI6XCJWNG5FY20xNzl2WmUyTUxnUlZhTVwiLFwiY29udGFpblwiOlwidTJfTWZlQ2pNU2xfYUJOSm41bkxcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImxqZnNZczhCUXFsZUt6Ykxra2FkXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSEp0UnFiQUZMT25YVnlHejhpRlVcIixcIm92ZXJsYXlcIjpcIkFMSGhPSEFlTGxCRHkxRHBZcWl2XCJ9OyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhpbnQgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuSGludCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGNoaWxkID0gcmVhY3RfMS5kZWZhdWx0LkNoaWxkcmVuLm9ubHkocHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmICgoKF9iID0gKF9hID0gY2hpbGQudHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b0xvd2VyQ2FzZSgpKSAhPT0gJ2lucHV0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6ICdIaW50JyBvbmx5IGFjY2VwdHMgYW4gJ2lucHV0JyBlbGVtZW50IGFzIGNoaWxkLlwiKTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLCBkaXNhYmxlSGludCA9IHByb3BzLmRpc2FibGVIaW50LCBhbGxvd1RhYkZpbGwgPSBwcm9wcy5hbGxvd1RhYkZpbGwsIGFsbG93RW50ZXJGaWxsID0gcHJvcHMuYWxsb3dFbnRlckZpbGwsIG9uRmlsbCA9IHByb3BzLm9uRmlsbCwgb25IaW50ID0gcHJvcHMub25IaW50LCB2YWx1ZU1vZGlmaWVyID0gcHJvcHMudmFsdWVNb2RpZmllcjtcbiAgICB2YXIgY2hpbGRQcm9wcyA9IGNoaWxkLnByb3BzO1xuICAgIHZhciBtYWluSW5wdXRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFdyYXBwZXJSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB1bk1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMF0sIHNldFVubW9kaWZpZWRJbnB1dFRleHQgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdGV4dCA9IF9kWzBdLCBzZXRUZXh0ID0gX2RbMV07XG4gICAgdmFyIF9lID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIGhpbnQgPSBfZVswXSwgc2V0SGludCA9IF9lWzFdO1xuICAgIHZhciBfZiA9IHJlYWN0XzEudXNlU3RhdGUoKSwgbWF0Y2ggPSBfZlswXSwgc2V0TWF0Y2ggPSBfZlsxXTtcbiAgICB2YXIgX2cgPSByZWFjdF8xLnVzZVN0YXRlKCksIGNoYW5nZUV2ZW50ID0gX2dbMF0sIHNldENoYW5nZUV2ZW50ID0gX2dbMV07XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB2YXIgZHVwbGljYXRlID0gdXRpbHNfMS5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogXFxcIlwiICsgZHVwbGljYXRlICsgXCJcXFwiIG9jY3VycyBtb3JlIHRoYW4gb25jZSBhbmQgbWF5IGNhdXNlIGVycm9ycy4gT3B0aW9ucyBzaG91bGQgbm90IGNvbnRhaW4gZHVwbGljYXRlIHZhbHVlcyFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbb3B0aW9uc10pO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGRpc2FibGVIaW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0U3R5bGUgPSBtYWluSW5wdXRSZWYuY3VycmVudCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtYWluSW5wdXRSZWYuY3VycmVudCk7XG4gICAgICAgIGlucHV0U3R5bGUgJiYgc3R5bGVIaW50KGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0TWF0Y2ggPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBpZiAoIXRleHQgfHwgdGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIChvcHRpb25zWzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8xID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzIgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sYWJlbC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdXRpbHNfMS5zb3J0QXNjKGEubGFiZWwsIGIubGFiZWwpOyB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2V0SGludFRleHRBbmRJZCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHNldFRleHQodGV4dCk7XG4gICAgICAgIHZhciBtYXRjaCA9IGdldE1hdGNoKHRleHQpO1xuICAgICAgICB2YXIgaGludDtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgaGludCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2gubGFiZWwuc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNldEhpbnQoaGludCk7XG4gICAgICAgIHNldE1hdGNoKG1hdGNoKTtcbiAgICAgICAgb25IaW50ICYmIG9uSGludChtYXRjaCk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlT25GaWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaGludCA9PT0gJycgfHwgIWNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld1VuTW9kaWZpZWRUZXh0ID0gdW5Nb2RpZmllZElucHV0VGV4dCArIGhpbnQ7XG4gICAgICAgIGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZSA9IG5ld1VuTW9kaWZpZWRUZXh0O1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoY2hhbmdlRXZlbnQpO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgb25GaWxsICYmIG9uRmlsbChtYXRjaCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQobmV3VW5Nb2RpZmllZFRleHQpO1xuICAgIH07XG4gICAgdmFyIHN0eWxlSGludCA9IGZ1bmN0aW9uIChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKF9hID0gaGludFdyYXBwZXJSZWYgPT09IG51bGwgfHwgaGludFdyYXBwZXJSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdHlsZSkge1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gaW5wdXRTdHlsZS53aWR0aDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gaW5wdXRTdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJveFNpemluZyA9IGlucHV0U3R5bGUuYm94U2l6aW5nO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5tYXJnaW4gPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ21hcmdpbicpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5wYWRkaW5nID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlclN0eWxlID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyV2lkdGggPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoX2IgPSBoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0Q2hhbmdlRXZlbnQoZSk7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSB2YWx1ZU1vZGlmaWVyID8gdmFsdWVNb2RpZmllcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChtb2RpZmllZFZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIH07XG4gICAgdmFyIG9uRm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkZvY3VzICYmIGNoaWxkUHJvcHMub25Gb2N1cyhlKTtcbiAgICB9O1xuICAgIHZhciBvbkJsdXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL09ubHkgYmx1ciBpdCBpZiB0aGUgbmV3IGZvY3VzIGlzbid0IHRoZSB0aGUgaGludCBpbnB1dFxuICAgICAgICBpZiAoKGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSAhPT0gZS5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgICAgIGNoaWxkUHJvcHMub25CbHVyICYmIGNoaWxkUHJvcHMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgQVJST1dSSUdIVCA9ICdBcnJvd1JpZ2h0JztcbiAgICB2YXIgVEFCID0gJ1RhYic7XG4gICAgdmFyIEVOVEVSID0gJ0VudGVyJztcbiAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRm9yIHNlbGVjdGFibGUgaW5wdXQgdHlwZXMgKFwidGV4dFwiLCBcInNlYXJjaFwiKSwgb25seSBzZWxlY3QgdGhlIGhpbnQgaWZcbiAgICAgICAgICAgIC8vIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdmFsdWUuIEZvciBub24tc2VsZWN0YWJsZSB0eXBlcyAoXCJlbWFpbFwiLFxuICAgICAgICAgICAgLy8gXCJudW1iZXJcIiksIGFsd2F5cyBzZWxlY3QgdGhlIGhpbnQuXG4gICAgICAgICAgICB2YXIgaXNOb25TZWxlY3RhYmxlVHlwZSA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IG51bGw7XG4gICAgICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IGlzTm9uU2VsZWN0YWJsZVR5cGUgfHwgZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBjYXJldElzQXRUZXh0RW5kO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBlLmtleSA9PT0gQVJST1dSSUdIVCkge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd1RhYkZpbGwgJiYgZS5rZXkgPT09IFRBQiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd0VudGVyRmlsbCAmJiBlLmtleSA9PT0gRU5URVIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkUHJvcHMub25LZXlEb3duICYmIGNoaWxkUHJvcHMub25LZXlEb3duKGUpO1xuICAgIH07XG4gICAgdmFyIG9uSGludENsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaGludENhcmV0UG9zaXRpb24gPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgICAgIC8vIElmIHVzZXIgY2xpY2tzIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgaGludCwgXG4gICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIGVuZCBvZiB0aGUgbWFpbklucHV0IHRleHRcbiAgICAgICAgaWYgKGhpbnRDYXJldFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhaGludCAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3NpdGlvbiA9IHRleHQubGVuZ3RoICsgaGludENhcmV0UG9zaXRpb247XG4gICAgICAgICAgICAgICAgKF9iID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZXRTZWxlY3Rpb25SYW5nZShjYXJldFBvc2l0aW9uLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgY2hpbGRSZWYgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCkucmVmO1xuICAgIHZhciBtYWluSW5wdXQgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNoaWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLCByZWY6IGNoaWxkUmVmICYmIHR5cGVvZiAoY2hpbGRSZWYpICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB1dGlsc18xLm1lcmdlUmVmcyhjaGlsZFJlZiwgbWFpbklucHV0UmVmKVxuICAgICAgICAgICAgOiBtYWluSW5wdXRSZWYgfSkpO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmFoLWlucHV0LXdyYXBwZXJcIiwgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgIH0gfSwgZGlzYWJsZUhpbnRcbiAgICAgICAgPyBjaGlsZFxuICAgICAgICA6IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICBtYWluSW5wdXQsXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnQtd3JhcHBlclwiLCByZWY6IGhpbnRXcmFwcGVyUmVmLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjM1KScsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ3JhaC10ZXh0LWZpbGxlcicsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgdGV4dCksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludFwiLCByZWY6IGhpbnRSZWYsIG9uQ2xpY2s6IG9uSGludENsaWNrLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogIWhpbnQgfHwgaGludCA9PT0gJycgPyAnbm9uZScgOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVmYXVsdFZhbHVlOiBoaW50LCB0YWJJbmRleDogLTEgfSkpKSkpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBleHBvcnRzLnNvcnRBc2MgPSBleHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBleHBvcnRzLm1lcmdlUmVmcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIG1lcmdlUmVmcygpIHtcbiAgICB2YXIgcmVmcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHJlZnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZpbHRlcmVkUmVmcyA9IHJlZnMuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGZpbHRlcmVkUmVmc18xID0gZmlsdGVyZWRSZWZzOyBfaSA8IGZpbHRlcmVkUmVmc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIHJlZiA9IGZpbHRlcmVkUmVmc18xW19pXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmVmKGluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VSZWZzID0gbWVyZ2VSZWZzO1xuO1xuLy8gSUUgZG9lc24ndCBzZWVtIHRvIGdldCB0aGUgY29tcG9zaXRlIGNvbXB1dGVkIHZhbHVlIChlZzogJ3BhZGRpbmcnLFxuLy8gJ2JvcmRlclN0eWxlJywgZXRjLiksIHNvIGdlbmVyYXRlIHRoZXNlIGZyb20gdGhlIGluZGl2aWR1YWwgdmFsdWVzLlxuZnVuY3Rpb24gaW50ZXJwb2xhdGVTdHlsZShzdHlsZXMsIGF0dHIsIHN1YmF0dHIpIHtcbiAgICBpZiAoc3ViYXR0ciA9PT0gdm9pZCAwKSB7IHN1YmF0dHIgPSAnJzsgfVxuICAgIC8vIFRpdGxlLWNhc2UgdGhlIHN1Yi1hdHRyaWJ1dGUuXG4gICAgaWYgKHN1YmF0dHIpIHtcbiAgICAgICAgc3ViYXR0ciA9IHN1YmF0dHIucmVwbGFjZShzdWJhdHRyWzBdLCBzdWJhdHRyWzBdLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXVxuICAgICAgICAvLyBAdHMtaWdub3JlOiAoYXR0ciArIGRpciArIHN1YmF0dHIpIHByb3BlcnR5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChkaXIpIHsgcmV0dXJuIHN0eWxlc1thdHRyICsgZGlyICsgc3ViYXR0cl07IH0pXG4gICAgICAgIC5qb2luKCcgJyk7XG59XG5leHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBpbnRlcnBvbGF0ZVN0eWxlO1xuZnVuY3Rpb24gc29ydEFzYyhhLCBiKSB7XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMuc29ydEFzYyA9IHNvcnRBc2M7XG5mdW5jdGlvbiBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihhcnJheSkge1xuICAgIHZhciB0cmFja2VyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhY2tlclthcnJheVtpXS5sYWJlbF0pIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheVtpXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0cmFja2VyW2FycmF5W2ldLmxhYmVsXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGdldEZpcnN0RHVwbGljYXRlT3B0aW9uO1xuIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS40IFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LCBfcmVmJGN1cnJlbnQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCB8fCAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpICE9IG51bGwgJiYgX3JlZiRjdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiIsImZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWUob3JpZ0NsYXNzLCBjbGFzc1RvUmVtb3ZlKSB7XG4gIHJldHVybiBvcmlnQ2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc1RvUmVtb3ZlICsgXCIoPzpcXFxcc3wkKVwiLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xufVxuLyoqXG4gKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lLCBjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJywgY2xhc3NOYW1lKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRpc2FibGVkOiBmYWxzZVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJleHBvcnQgdmFyIGZvcmNlUmVmbG93ID0gZnVuY3Rpb24gZm9yY2VSZWZsb3cobm9kZSkge1xuICByZXR1cm4gbm9kZS5zY3JvbGxUb3A7XG59OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzKSB7XG4gIC8vICAgbGV0IG5leHRTdGF0dXMgPSBudWxsXG4gIC8vICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAvLyAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHRoaXMuc3RhdGVcbiAgLy8gICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB7IG5leHRTdGF0dXMgfVxuICAvLyB9XG4gIDtcblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXModHJ1ZSwgdGhpcy5hcHBlYXJTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIG5leHRTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoZmFsc2UsIG5leHRTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFRpbWVvdXRzID0gZnVuY3Rpb24gZ2V0VGltZW91dHMoKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLnByb3BzLnRpbWVvdXQ7XG4gICAgdmFyIGV4aXQsIGVudGVyLCBhcHBlYXI7XG4gICAgZXhpdCA9IGVudGVyID0gYXBwZWFyID0gdGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwgJiYgdHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICBleGl0ID0gdGltZW91dC5leGl0O1xuICAgICAgZW50ZXIgPSB0aW1lb3V0LmVudGVyOyAvLyBUT0RPOiByZW1vdmUgZmFsbGJhY2sgZm9yIG5leHQgbWFqb3JcblxuICAgICAgYXBwZWFyID0gdGltZW91dC5hcHBlYXIgIT09IHVuZGVmaW5lZCA/IHRpbWVvdXQuYXBwZWFyIDogZW50ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBhcHBlYXI6IGFwcGVhclxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhtb3VudGluZywgbmV4dFN0YXR1cykge1xuICAgIGlmIChtb3VudGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb3VudGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuZXh0U3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAvLyBuZXh0U3RhdHVzIHdpbGwgYWx3YXlzIGJlIEVOVEVSSU5HIG9yIEVYSVRJTkcuXG4gICAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuXG4gICAgICBpZiAobmV4dFN0YXR1cyA9PT0gRU5URVJJTkcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCB8fCB0aGlzLnByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9wdWxsLzc0OVxuICAgICAgICAgIC8vIFdpdGggdW5tb3VudE9uRXhpdCBvciBtb3VudE9uRW50ZXIsIHRoZSBlbnRlciBhbmltYXRpb24gc2hvdWxkIGhhcHBlbiBhdCB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGl0ZWRgIGFuZCBgZW50ZXJpbmdgLlxuICAgICAgICAgIC8vIFRvIG1ha2UgdGhlIGFuaW1hdGlvbiBoYXBwZW4sICB3ZSBoYXZlIHRvIHNlcGFyYXRlIGVhY2ggcmVuZGVyaW5nIGFuZCBhdm9pZCBiZWluZyBwcm9jZXNzZWQgYXMgYmF0Y2hlZC5cblxuICAgICAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGFkZE9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2FkZENsYXNzJztcbmltcG9ydCByZW1vdmVPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb24gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCB7IGNsYXNzTmFtZXNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmdBbmltYXRlKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkXG4gKiB1c2UgaXQgaWYgeW91J3JlIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLCBzbyBpdCdzXG4gKiBpbXBvcnRhbnQgdG8gYWRkIGB0cmFuc2l0aW9uYCBkZWNsYXJhdGlvbiBvbmx5IHRvIHRoZW0sIG90aGVyd2lzZSB0cmFuc2l0aW9uc1xuICogbWlnaHQgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZCEgVGhpcyBtaWdodCBub3QgYmUgb2J2aW91cyB3aGVuIHRoZSB0cmFuc2l0aW9uc1xuICogYXJlIHN5bW1ldHJpY2FsLCBpLmUuIHdoZW4gYCotZW50ZXItYWN0aXZlYCBpcyB0aGUgc2FtZSBhcyBgKi1leGl0YCwgbGlrZSBpblxuICogdGhlIGV4YW1wbGUgYWJvdmUgKG1pbnVzIGB0cmFuc2l0aW9uYCksIGJ1dCBpdCBiZWNvbWVzIGFwcGFyZW50IGluIG1vcmVcbiAqIGNvbXBsZXggdHJhbnNpdGlvbnMuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSdyZSB1c2luZyB0aGVcbiAqIFtgYXBwZWFyYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24jVHJhbnNpdGlvbi1wcm9wLWFwcGVhcilcbiAqIHByb3AsIG1ha2Ugc3VyZSB0byBkZWZpbmUgc3R5bGVzIGZvciBgLmFwcGVhci0qYCBjbGFzc2VzIGFzIHdlbGwuXG4gKi9cblxuXG52YXIgQ1NTVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShDU1NUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDU1NUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLmFwcGxpZWRDbGFzc2VzID0ge1xuICAgICAgYXBwZWFyOiB7fSxcbiAgICAgIGVudGVyOiB7fSxcbiAgICAgIGV4aXQ6IHt9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXIgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudFswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMV07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyaW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQyID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDMgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDRbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2FwcGVhcicpO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdlbnRlcicpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1WzBdO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NlswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5yZXNvbHZlQXJndW1lbnRzID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5ub2RlUmVmID8gW190aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCwgbWF5YmVOb2RlXSAvLyBoZXJlIGBtYXliZU5vZGVgIGlzIGFjdHVhbGx5IGBhcHBlYXJpbmdgXG4gICAgICA6IFttYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nXTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICB2YXIgX3RoaXMkZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcygnZW50ZXInKSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGdldENsYXNzTmFtZXMuZG9uZUNsYXNzTmFtZTtcblxuICAgIGlmICh0eXBlID09PSAnYXBwZWFyJyAmJiBwaGFzZSA9PT0gJ2RvbmUnICYmIGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIGRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIHRvIGZvcmNlIGEgcmVwYWludCxcbiAgICAvLyB3aGljaCBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gdHJhbnNpdGlvbiBzdHlsZXMgd2hlbiBhZGRpbmcgYSBjbGFzcyBuYW1lLlxuXG5cbiAgICBpZiAocGhhc2UgPT09ICdhY3RpdmUnKSB7XG4gICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXVtwaGFzZV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIF9hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSkge1xuICAgIHZhciBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQgPSB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdLFxuICAgICAgICBiYXNlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmJhc2UsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5hY3RpdmUsXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuZG9uZTtcbiAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdID0ge307XG5cbiAgICBpZiAoYmFzZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYmFzZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoZG9uZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgZG9uZUNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgXyA9IF90aGlzJHByb3BzLmNsYXNzTmFtZXMsXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZXNcIl0pO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGFwcGVhcnMsIGVudGVycyxcbiAgICogZXhpdHMgb3IgaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCwgd2hpY2hcbiAgICogd2lsbCBiZSBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZSwgZS5nLiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllczpcbiAgICpcbiAgICogLSBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYGZhZGUtYXBwZWFyLWRvbmVgXG4gICAqIC0gYGZhZGUtZW50ZXJgLCBgZmFkZS1lbnRlci1hY3RpdmVgLCBgZmFkZS1lbnRlci1kb25lYFxuICAgKiAtIGBmYWRlLWV4aXRgLCBgZmFkZS1leGl0LWFjdGl2ZWAsIGBmYWRlLWV4aXQtZG9uZWBcbiAgICpcbiAgICogQSBmZXcgZGV0YWlscyB0byBub3RlIGFib3V0IGhvdyB0aGVzZSBjbGFzc2VzIGFyZSBhcHBsaWVkOlxuICAgKlxuICAgKiAxLiBUaGV5IGFyZSBfam9pbmVkXyB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGUgY2hpbGRcbiAgICogICAgY29tcG9uZW50LCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgc29tZSBiYXNlIHN0eWxlcywgeW91IGNhbiB1c2VcbiAgICogICAgYGNsYXNzTmFtZWAgd2l0aG91dCB3b3JyeWluZyB0aGF0IGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogMi4gSWYgdGhlIHRyYW5zaXRpb24gY29tcG9uZW50IG1vdW50cyB3aXRoIGBpbj17ZmFsc2V9YCwgbm8gY2xhc3NlcyBhcmVcbiAgICogICAgYXBwbGllZCB5ZXQuIFlvdSBtaWdodCBiZSBleHBlY3RpbmcgYCotZXhpdC1kb25lYCwgYnV0IGlmIHlvdSB0aGlua1xuICAgKiAgICBhYm91dCBpdCwgYSBjb21wb25lbnQgY2Fubm90IGZpbmlzaCBleGl0aW5nIGlmIGl0IGhhc24ndCBlbnRlcmVkIHlldC5cbiAgICpcbiAgICogMi4gYGZhZGUtYXBwZWFyLWRvbmVgIGFuZCBgZmFkZS1lbnRlci1kb25lYCB3aWxsIF9ib3RoXyBiZSBhcHBsaWVkLiBUaGlzXG4gICAqICAgIGFsbG93cyB5b3UgdG8gZGVmaW5lIGRpZmZlcmVudCBiZWhhdmlvciBmb3Igd2hlbiBhcHBlYXJpbmcgaXMgZG9uZSBhbmRcbiAgICogICAgd2hlbiByZWd1bGFyIGVudGVyaW5nIGlzIGRvbmUsIHVzaW5nIHNlbGVjdG9ycyBsaWtlXG4gICAqICAgIGAuZmFkZS1lbnRlci1kb25lOm5vdCguZmFkZS1hcHBlYXItZG9uZSlgLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFwcGx5XG4gICAqICAgIGFuIGVwaWMgZW50cmFuY2UgYW5pbWF0aW9uIHdoZW4gZWxlbWVudCBmaXJzdCBhcHBlYXJzIGluIHRoZSBET00gdXNpbmdcbiAgICogICAgW0FuaW1hdGUuY3NzXShodHRwczovL2RhbmVkZW4uZ2l0aHViLmlvL2FuaW1hdGUuY3NzLykuIE90aGVyd2lzZSB5b3UgY2FuXG4gICAqICAgIHNpbXBseSB1c2UgYGZhZGUtZW50ZXItZG9uZWAgZm9yIGRlZmluaW5nIGJvdGggY2FzZXMuXG4gICAqXG4gICAqIEVhY2ggaW5kaXZpZHVhbCBjbGFzc05hbWVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5IGxpa2U6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3tcbiAgICogIGFwcGVhcjogJ215LWFwcGVhcicsXG4gICAqICBhcHBlYXJBY3RpdmU6ICdteS1hY3RpdmUtYXBwZWFyJyxcbiAgICogIGFwcGVhckRvbmU6ICdteS1kb25lLWFwcGVhcicsXG4gICAqICBlbnRlcjogJ215LWVudGVyJyxcbiAgICogIGVudGVyQWN0aXZlOiAnbXktYWN0aXZlLWVudGVyJyxcbiAgICogIGVudGVyRG9uZTogJ215LWRvbmUtZW50ZXInLFxuICAgKiAgZXhpdDogJ215LWV4aXQnLFxuICAgKiAgZXhpdEFjdGl2ZTogJ215LWFjdGl2ZS1leGl0JyxcbiAgICogIGV4aXREb25lOiAnbXktZG9uZS1leGl0JyxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIHNldCB0aGVzZSBjbGFzc2VzIHVzaW5nIENTUyBNb2R1bGVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG4gICAqIGBgYFxuICAgKlxuICAgKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgY2FtZWxDYXNlIGluIHlvdXIgQ1NTIGZpbGUsIHRoYXQgd2F5IGNvdWxkIHNpbXBseVxuICAgKiBzcHJlYWQgdGhlbSBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlbSBvbmUgYnkgb25lOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7IC4uLnN0eWxlcyB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHtcbiAgICogIGFwcGVhcj86IHN0cmluZyxcbiAgICogIGFwcGVhckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGFwcGVhckRvbmU/OiBzdHJpbmcsXG4gICAqICBlbnRlcj86IHN0cmluZyxcbiAgICogIGVudGVyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZW50ZXJEb25lPzogc3RyaW5nLFxuICAgKiAgZXhpdD86IHN0cmluZyxcbiAgICogIGV4aXRBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBleGl0RG9uZT86IHN0cmluZyxcbiAgICogfX1cbiAgICovXG4gIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNTaGFwZSxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvciAnYXBwZWFyJyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyLWFjdGl2ZScgb3JcbiAgICogJ2FwcGVhci1hY3RpdmUnIGNsYXNzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yXG4gICAqICdhcHBlYXInIGNsYXNzZXMgYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdC1hY3RpdmUnIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0pIDoge307XG5leHBvcnQgZGVmYXVsdCBDU1NUcmFuc2l0aW9uOyIsImltcG9ydCBoYXNDbGFzcyBmcm9tICcuL2hhc0NsYXNzJztcbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO2Vsc2UgaWYgKCFoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lO2Vsc2UgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycpICsgXCIgXCIgKyBjbGFzc05hbWUpO1xufSIsIi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZWxlbWVudCBoYXMgYSBDU1MgY2xhc3MuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSByZXR1cm4gISFjbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG5cbiAgICBpZiAodGhpcy5wcm9wc1toYW5kbGVyXSkge1xuICAgICAgdmFyIG1heWJlTm9kZSA9IGNoaWxkLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgIHRoaXMucHJvcHNbaGFuZGxlcl0obWF5YmVOb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBpblByb3AgPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiXSk7XG5cbiAgICB2YXIgX1JlYWN0JENoaWxkcmVuJHRvQXJyID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbiksXG4gICAgICAgIGZpcnN0ID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzBdLFxuICAgICAgICBzZWNvbmQgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMV07XG5cbiAgICBkZWxldGUgcHJvcHMub25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmVkO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgcHJvcHMub25FeGl0ZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uOyIsImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuXG52YXIgX2xlYXZlUmVuZGVycywgX2VudGVyUmVuZGVycztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBFTlRFUkVELCBFTlRFUklORywgRVhJVElORyB9IGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuXG5mdW5jdGlvbiBhcmVDaGlsZHJlbkRpZmZlcmVudChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4pIHtcbiAgaWYgKG9sZENoaWxkcmVuID09PSBuZXdDaGlsZHJlbikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChvbGRDaGlsZHJlbikgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3Q2hpbGRyZW4pICYmIG9sZENoaWxkcmVuLmtleSAhPSBudWxsICYmIG9sZENoaWxkcmVuLmtleSA9PT0gbmV3Q2hpbGRyZW4ua2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEVudW0gb2YgbW9kZXMgZm9yIFN3aXRjaFRyYW5zaXRpb24gY29tcG9uZW50XG4gKiBAZW51bSB7IHN0cmluZyB9XG4gKi9cblxuXG5leHBvcnQgdmFyIG1vZGVzID0ge1xuICBvdXQ6ICdvdXQtaW4nLFxuICBpbjogJ2luLW91dCdcbn07XG5cbnZhciBjYWxsSG9vayA9IGZ1bmN0aW9uIGNhbGxIb29rKGVsZW1lbnQsIG5hbWUsIGNiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lbGVtZW50JHByb3BzO1xuXG4gICAgZWxlbWVudC5wcm9wc1tuYW1lXSAmJiAoX2VsZW1lbnQkcHJvcHMgPSBlbGVtZW50LnByb3BzKVtuYW1lXS5hcHBseShfZWxlbWVudCRwcm9wcywgYXJndW1lbnRzKTtcbiAgICBjYigpO1xuICB9O1xufTtcblxudmFyIGxlYXZlUmVuZGVycyA9IChfbGVhdmVSZW5kZXJzID0ge30sIF9sZWF2ZVJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HLCBudWxsKTtcbiAgICB9KVxuICB9KTtcbn0sIF9sZWF2ZVJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjIuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjIuY2hhbmdlU3RhdGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICByZXR1cm4gW2N1cnJlbnQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORyk7XG4gICAgfSlcbiAgfSldO1xufSwgX2xlYXZlUmVuZGVycyk7XG52YXIgZW50ZXJSZW5kZXJzID0gKF9lbnRlclJlbmRlcnMgPSB7fSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMy5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KTtcbn0sIF9lbnRlclJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjQuY3VycmVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWY0LmNoYW5nZVN0YXRlO1xuICByZXR1cm4gW1JlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KSwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWVcbiAgfSldO1xufSwgX2VudGVyUmVuZGVycyk7XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIFt2dWUgdHJhbnNpdGlvbiBtb2Rlc10oaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvdHJhbnNpdGlvbnMuaHRtbCNUcmFuc2l0aW9uLU1vZGVzKS5cbiAqIFlvdSBjYW4gdXNlIGl0IHdoZW4geW91IHdhbnQgdG8gY29udHJvbCB0aGUgcmVuZGVyIGJldHdlZW4gc3RhdGUgdHJhbnNpdGlvbnMuXG4gKiBCYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbW9kZSBhbmQgdGhlIGNoaWxkJ3Mga2V5IHdoaWNoIGlzIHRoZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBtYWtlcyBhIGNvbnNpc3RlbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZW0uXG4gKlxuICogSWYgdGhlIGBvdXQtaW5gIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgd2FpdHMgdW50aWwgdGhlIG9sZCBjaGlsZCBsZWF2ZXMgYW5kIHRoZW4gaW5zZXJ0cyBhIG5ldyBjaGlsZC5cbiAqIElmIHRoZSBgaW4tb3V0YCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIGluc2VydHMgYSBuZXcgY2hpbGQgZmlyc3QsIHdhaXRzIGZvciB0aGUgbmV3IGNoaWxkIHRvIGVudGVyIGFuZCB0aGVuIHJlbW92ZXMgdGhlIG9sZCBjaGlsZC5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91IHdhbnQgdGhlIGFuaW1hdGlvbiB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAqICh0aGF0IGlzLCB0byBoYXZlIHRoZSBvbGQgY2hpbGQgcmVtb3ZlZCBhbmQgYSBuZXcgY2hpbGQgaW5zZXJ0ZWQgKiphdCB0aGUgc2FtZSB0aW1lKiopLFxuICogeW91IHNob3VsZCB1c2VcbiAqIFtgVHJhbnNpdGlvbkdyb3VwYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLWdyb3VwKVxuICogaW5zdGVhZC5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICByZXR1cm4gKFxuICogICAgPFN3aXRjaFRyYW5zaXRpb24+XG4gKiAgICAgIDxDU1NUcmFuc2l0aW9uXG4gKiAgICAgICAga2V5PXtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgZG9uZSwgZmFsc2UpfVxuICogICAgICAgIGNsYXNzTmFtZXM9J2ZhZGUnXG4gKiAgICAgID5cbiAqICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldFN0YXRlKHN0YXRlID0+ICFzdGF0ZSl9PlxuICogICAgICAgICAge3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIDwvYnV0dG9uPlxuICogICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICA8L1N3aXRjaFRyYW5zaXRpb24+XG4gKiAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYGNzc1xuICogLmZhZGUtZW50ZXJ7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZXhpdHtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZlLFxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwMG1zO1xuICogfVxuICogYGBgXG4gKi9cblxudmFyIFN3aXRjaFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpdGNoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogRU5URVJFRCxcbiAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLmFwcGVhcmVkID0gZmFsc2U7XG5cbiAgICBfdGhpcy5jaGFuZ2VTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0dXMsIGN1cnJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY3VycmVudCA9IF90aGlzLnN0YXRlLmN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGN1cnJlbnQ6IGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpdGNoVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5hcHBlYXJlZCA9IHRydWU7XG4gIH07XG5cbiAgU3dpdGNoVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gRU5URVJJTkcgJiYgcHJvcHMubW9kZSA9PT0gbW9kZXMuaW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmN1cnJlbnQgJiYgYXJlQ2hpbGRyZW5EaWZmZXJlbnQoc3RhdGUuY3VycmVudCwgcHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IFJlYWN0LmNsb25lRWxlbWVudChwcm9wcy5jaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbW9kZSA9IF90aGlzJHByb3BzLm1vZGUsXG4gICAgICAgIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc3RhdHVzID0gX3RoaXMkc3RhdGUuc3RhdHVzLFxuICAgICAgICBjdXJyZW50ID0gX3RoaXMkc3RhdGUuY3VycmVudDtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGN1cnJlbnQ6IGN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZTogdGhpcy5jaGFuZ2VTdGF0ZSxcbiAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50O1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRU5URVJJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGVudGVyUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRVhJVElORzpcbiAgICAgICAgY29tcG9uZW50ID0gbGVhdmVSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFTlRFUkVEOlxuICAgICAgICBjb21wb25lbnQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiAhdGhpcy5hcHBlYXJlZFxuICAgICAgfVxuICAgIH0sIGNvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXRjaFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN3aXRjaFRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogVHJhbnNpdGlvbiBtb2Rlcy5cbiAgICogYG91dC1pbmA6IEN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQgZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIG5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluLlxuICAgKiBgaW4tb3V0YDogTmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4gZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIGN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQuXG4gICAqXG4gICAqIEB0eXBlIHsnb3V0LWluJ3wnaW4tb3V0J31cbiAgICovXG4gIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbbW9kZXMuaW4sIG1vZGVzLm91dF0pLFxuXG4gIC8qKlxuICAgKiBBbnkgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pXG59IDoge307XG5Td2l0Y2hUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgbW9kZTogbW9kZXMub3V0XG59O1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoVHJhbnNpdGlvbjsiLCJpbXBvcnQgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZVZpc2libGUoX3JlZikge1xuICB2YXIgbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IF9yZWYubGFzdFJlbmRlcmVkU3RhcnRJbmRleCxcbiAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleCA9IF9yZWYubGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHJldHVybiAhKHN0YXJ0SW5kZXggPiBsYXN0UmVuZGVyZWRTdG9wSW5kZXggfHwgc3RvcEluZGV4IDwgbGFzdFJlbmRlcmVkU3RhcnRJbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyhfcmVmKSB7XG4gIHZhciBpc0l0ZW1Mb2FkZWQgPSBfcmVmLmlzSXRlbUxvYWRlZCxcbiAgICAgIGl0ZW1Db3VudCA9IF9yZWYuaXRlbUNvdW50LFxuICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9yZWYubWluaW11bUJhdGNoU2l6ZSxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICB2YXIgcmFuZ2VTdGFydEluZGV4ID0gbnVsbDtcbiAgdmFyIHJhbmdlU3RvcEluZGV4ID0gbnVsbDtcblxuICBmb3IgKHZhciBfaW5kZXggPSBzdGFydEluZGV4OyBfaW5kZXggPD0gc3RvcEluZGV4OyBfaW5kZXgrKykge1xuICAgIHZhciBsb2FkZWQgPSBpc0l0ZW1Mb2FkZWQoX2luZGV4KTtcblxuICAgIGlmICghbG9hZGVkKSB7XG4gICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDtcbiAgICAgIGlmIChyYW5nZVN0YXJ0SW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgcmFuZ2VTdGFydEluZGV4ID0gX2luZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICAgIHVubG9hZGVkUmFuZ2VzLnB1c2gocmFuZ2VTdGFydEluZGV4LCByYW5nZVN0b3BJbmRleCk7XG5cbiAgICAgIHJhbmdlU3RhcnRJbmRleCA9IHJhbmdlU3RvcEluZGV4ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBJZiA6cmFuZ2VTdG9wSW5kZXggaXMgbm90IG51bGwgaXQgbWVhbnMgd2UgaGF2ZW4ndCByYW4gb3V0IG9mIHVubG9hZGVkIHJvd3MuXG4gIC8vIFNjYW4gZm9yd2FyZCB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgIHZhciBwb3RlbnRpYWxTdG9wSW5kZXggPSBNYXRoLm1pbihNYXRoLm1heChyYW5nZVN0b3BJbmRleCwgcmFuZ2VTdGFydEluZGV4ICsgbWluaW11bUJhdGNoU2l6ZSAtIDEpLCBpdGVtQ291bnQgLSAxKTtcblxuICAgIGZvciAodmFyIF9pbmRleDIgPSByYW5nZVN0b3BJbmRleCArIDE7IF9pbmRleDIgPD0gcG90ZW50aWFsU3RvcEluZGV4OyBfaW5kZXgyKyspIHtcbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDIpKSB7XG4gICAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVubG9hZGVkUmFuZ2VzLnB1c2gocmFuZ2VTdGFydEluZGV4LCByYW5nZVN0b3BJbmRleCk7XG4gIH1cblxuICAvLyBDaGVjayB0byBzZWUgaWYgb3VyIGZpcnN0IHJhbmdlIGVuZGVkIHByZW1hdHVyZWx5LlxuICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHNjYW4gYmFja3dhcmRzIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHVubG9hZGVkUmFuZ2VzLmxlbmd0aCkge1xuICAgIHdoaWxlICh1bmxvYWRlZFJhbmdlc1sxXSAtIHVubG9hZGVkUmFuZ2VzWzBdICsgMSA8IG1pbmltdW1CYXRjaFNpemUgJiYgdW5sb2FkZWRSYW5nZXNbMF0gPiAwKSB7XG4gICAgICB2YXIgX2luZGV4MyA9IHVubG9hZGVkUmFuZ2VzWzBdIC0gMTtcblxuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MykpIHtcbiAgICAgICAgdW5sb2FkZWRSYW5nZXNbMF0gPSBfaW5kZXgzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzO1xufVxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG52YXIgaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxudmFyIEluZmluaXRlTG9hZGVyID0gZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKEluZmluaXRlTG9hZGVyLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSW5maW5pdGVMb2FkZXIoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgSW5maW5pdGVMb2FkZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gSW5maW5pdGVMb2FkZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihJbmZpbml0ZUxvYWRlcikpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gLTEsIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSAtMSwgX3RoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXSwgX3RoaXMuX29uSXRlbXNSZW5kZXJlZCA9IGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIHZpc2libGVTdGFydEluZGV4ID0gX3JlZjIudmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleCA9IF9yZWYyLnZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKHZpc2libGVTdGFydEluZGV4KSB8fCAhaXNJbnRlZ2VyKHZpc2libGVTdG9wSW5kZXgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIG9uSXRlbXNSZW5kZXJlZCBzaWduYXR1cmU7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5sb2FkTW9yZVJvd3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0luZmluaXRlTG9hZGVyIFwibG9hZE1vcmVSb3dzXCIgcHJvcCBoYXMgYmVlbiByZW5hbWVkIHRvIFwibG9hZE1vcmVJdGVtc1wiLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gdmlzaWJsZVN0YXJ0SW5kZXg7XG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gdmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgX3RoaXMuX2Vuc3VyZVJvd3NMb2FkZWQodmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpO1xuICAgIH0sIF90aGlzLl9zZXRSZWYgPSBmdW5jdGlvbiAobGlzdFJlZikge1xuICAgICAgX3RoaXMuX2xpc3RSZWYgPSBsaXN0UmVmO1xuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBjcmVhdGVDbGFzcyhJbmZpbml0ZUxvYWRlciwgW3tcbiAgICBrZXk6ICdyZXNldGxvYWRNb3JlSXRlbXNDYWNoZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0bG9hZE1vcmVJdGVtc0NhY2hlKCkge1xuICAgICAgdmFyIGF1dG9SZWxvYWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgICAgIGlmIChhdXRvUmVsb2FkKSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVJvd3NMb2FkZWQodGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCwgdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpc3RSZWYgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBsaXN0IHJlZjsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXG5cbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIG9uSXRlbXNSZW5kZXJlZDogdGhpcy5fb25JdGVtc1JlbmRlcmVkLFxuICAgICAgICByZWY6IHRoaXMuX3NldFJlZlxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2Vuc3VyZVJvd3NMb2FkZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZW5zdXJlUm93c0xvYWRlZChzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSXRlbUxvYWRlZCA9IF9wcm9wcy5pc0l0ZW1Mb2FkZWQsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3Byb3BzLml0ZW1Db3VudCxcbiAgICAgICAgICBfcHJvcHMkbWluaW11bUJhdGNoU2kgPSBfcHJvcHMubWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3Byb3BzJG1pbmltdW1CYXRjaFNpID09PSB1bmRlZmluZWQgPyAxMCA6IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSxcbiAgICAgICAgICBfcHJvcHMkdGhyZXNob2xkID0gX3Byb3BzLnRocmVzaG9sZCxcbiAgICAgICAgICB0aHJlc2hvbGQgPSBfcHJvcHMkdGhyZXNob2xkID09PSB1bmRlZmluZWQgPyAxNSA6IF9wcm9wcyR0aHJlc2hvbGQ7XG5cblxuICAgICAgdmFyIHVubG9hZGVkUmFuZ2VzID0gc2NhbkZvclVubG9hZGVkUmFuZ2VzKHtcbiAgICAgICAgaXNJdGVtTG9hZGVkOiBpc0l0ZW1Mb2FkZWQsXG4gICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICBtaW5pbXVtQmF0Y2hTaXplOiBtaW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICBzdGFydEluZGV4OiBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gdGhyZXNob2xkKSxcbiAgICAgICAgc3RvcEluZGV4OiBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyB0aHJlc2hvbGQpXG4gICAgICB9KTtcblxuICAgICAgLy8gQXZvaWQgY2FsbGluZyBsb2FkLXJvd3MgdW5sZXNzIHJhbmdlIGhhcyBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgaXMgbWF5YmUgbmljZSB0byBkby5cbiAgICAgIGlmICh0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLmxlbmd0aCAhPT0gdW5sb2FkZWRSYW5nZXMubGVuZ3RoIHx8IHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMuc29tZShmdW5jdGlvbiAoc3RhcnRPclN0b3AsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB1bmxvYWRlZFJhbmdlc1tpbmRleF0gIT09IHN0YXJ0T3JTdG9wO1xuICAgICAgfSkpIHtcbiAgICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IHVubG9hZGVkUmFuZ2VzO1xuICAgICAgICB0aGlzLl9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19sb2FkVW5sb2FkZWRSYW5nZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgLy8gbG9hZE1vcmVSb3dzIHdhcyByZW5hbWVkIHRvIGxvYWRNb3JlSXRlbXMgaW4gdjEuMC4zOyB3aWxsIGJlIHJlbW92ZWQgaW4gdjIuMFxuICAgICAgdmFyIGxvYWRNb3JlSXRlbXMgPSB0aGlzLnByb3BzLmxvYWRNb3JlSXRlbXMgfHwgdGhpcy5wcm9wcy5sb2FkTW9yZVJvd3M7XG5cbiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpXTtcbiAgICAgICAgdmFyIHN0b3BJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2kgKyAxXTtcbiAgICAgICAgdmFyIHByb21pc2UgPSBsb2FkTW9yZUl0ZW1zKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCk7XG4gICAgICAgIGlmIChwcm9taXNlICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgdmlzaWJsZSByb3dzIGlmIGFueSBvZiB0aGVtIGhhdmUganVzdCBiZWVuIGxvYWRlZC5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHdpbGwgcmVtYWluIGluIHRoZWlyIHVubG9hZGVkIHZpc3VhbCBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChpc1JhbmdlVmlzaWJsZSh7XG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgICAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgc3RvcEluZGV4OiBzdG9wSW5kZXhcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBhbiB1bm1vdW50IHdoaWxlIHByb21pc2VzIGFyZSBzdGlsbCBpbiBmbGlnaHQuXG4gICAgICAgICAgICAgIGlmIChfdGhpczIuX2xpc3RSZWYgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJlc2l6ZSBjYWNoZWQgcm93IHNpemVzIGZvciBWYXJpYWJsZVNpemVMaXN0LFxuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UganVzdCByZS1yZW5kZXIgdGhlIGxpc3QuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXgoc3RhcnRJbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSEFDSyByZXNldCB0ZW1wb3JhcmlseSBjYWNoZWQgaXRlbSBzdHlsZXMgdG8gZm9yY2UgUHVyZUNvbXBvbmVudCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgZ3Jvc3MsIGJ1dCBJJ20gb2theSB3aXRoIGl0IGZvciBub3cuXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QganVkZ2UgbWUuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYuX2dldEl0ZW1TdHlsZUNhY2hlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmxvYWRlZFJhbmdlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBfbG9vcChpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEluZmluaXRlTG9hZGVyO1xufShQdXJlQ29tcG9uZW50KTtcblxuZXhwb3J0IGRlZmF1bHQgSW5maW5pdGVMb2FkZXI7XG4iLCJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+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/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldiwgbmV4dCkge1xuICBmb3IgKHZhciBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX2F0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbX2F0dHJpYnV0ZV0gIT09IG5leHRbX2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiXTtcbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5cbmZ1bmN0aW9uIGFyZUVxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3R5bGUgPSBwcmV2UHJvcHMuc3R5bGUsXG4gICAgICBwcmV2UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICB2YXIgbmV4dFN0eWxlID0gbmV4dFByb3BzLnN0eWxlLFxuICAgICAgbmV4dFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShuZXh0UHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIHJldHVybiAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpO1xufVxuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuXG5mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCB7IEZpeGVkU2l6ZUdyaWQsIEZpeGVkU2l6ZUxpc3QsIFZhcmlhYmxlU2l6ZUdyaWQsIFZhcmlhYmxlU2l6ZUxpc3QsIGFyZUVxdWFsLCBzaG91bGRDb21wb25lbnRVcGRhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsIihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICByb290LlNjcm9sbHBhcmVudCA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gIHZhciByZWdleCA9IC8oYXV0b3xzY3JvbGwpLztcblxuICB2YXIgcGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwcykge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUgPT09IG51bGwpIHsgcmV0dXJuIHBzOyB9XG5cbiAgICByZXR1cm4gcGFyZW50cyhub2RlLnBhcmVudE5vZGUsIHBzLmNvbmNhdChbbm9kZV0pKTtcbiAgfTtcblxuICB2YXIgc3R5bGUgPSBmdW5jdGlvbiAobm9kZSwgcHJvcCkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCk7XG4gIH07XG5cbiAgdmFyIG92ZXJmbG93ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gc3R5bGUobm9kZSwgXCJvdmVyZmxvd1wiKSArIHN0eWxlKG5vZGUsIFwib3ZlcmZsb3cteVwiKSArIHN0eWxlKG5vZGUsIFwib3ZlcmZsb3cteFwiKTtcbiAgfTtcblxuICB2YXIgc2Nyb2xsID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgIHJldHVybiByZWdleC50ZXN0KG92ZXJmbG93KG5vZGUpKTtcbiAgfTtcblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHZhciBwcyA9IHBhcmVudHMobm9kZS5wYXJlbnROb2RlLCBbXSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc2Nyb2xsKHBzW2ldKSkge1xuICAgICAgICByZXR1cm4gcHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9O1xuXG4gIHJldHVybiBzY3JvbGxQYXJlbnQ7XG59KSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICBjaGVja2VkLFxuICBkaXNhYmxlZCxcbiAgbmFtZSxcbiAgY2xhc3NOYW1lLFxuICBpbmRldGVybWluYXRlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG59OiBDaGVja2JveFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjbG9zZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jbG9zZS5zdmdcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRHJhd2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb24gfSBmcm9tIFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cFwiO1xuXG50eXBlIERyYXdlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlO1xuICBmb290ZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9wZW46IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBub0Nsb3NlSWNvbj86IGJvb2xlYW47XG4gIHVubW91bnRPbkV4aXQ/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIERyYXdlcih7XG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBvcGVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBub0Nsb3NlSWNvbiA9IGZhbHNlLFxuICBvbkNsb3NlLFxuICBjaGlsZHJlbixcbiAgdW5tb3VudE9uRXhpdCA9IGZhbHNlLFxufTogRHJhd2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgaW49e29wZW59XG4gICAgICB0aW1lb3V0PXszMDB9XG4gICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgIGVudGVyOiBzdHlsZXMuZHJhd2VyRW50ZXIsXG4gICAgICAgIGVudGVyQWN0aXZlOiBzdHlsZXMuZHJhd2VyRW50ZXJBY3RpdmUsXG4gICAgICAgIGVudGVyRG9uZTogc3R5bGVzLmRyYXdlckVudGVyRG9uZSxcbiAgICAgICAgZXhpdDogc3R5bGVzLmRyYXdlckV4aXQsXG4gICAgICAgIGV4aXRBY3RpdmU6IHN0eWxlcy5kcmF3ZXJFeGl0QWN0aXZlLFxuICAgICAgICBleGl0RG9uZTogc3R5bGVzLmRyYXdlckV4aXREb25lLFxuICAgICAgfX1cbiAgICAgIHVubW91bnRPbkV4aXQ9e3VubW91bnRPbkV4aXR9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuZHJhd2VyLCBjbGFzc05hbWVdKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJDb250ZW50fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckhlYWRlckNvbnRlbnR9PlxuICAgICAgICAgICAgeyFub0Nsb3NlSWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ2xvc2VJY29uQ29udGVudH0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb259IG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9e1wieGxhcmdlXCJ9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshIWhlYWRlciAmJiA8ZGl2PntoZWFkZXJ9PC9kaXY+fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyTWFpbn0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIHshIWZvb3RlciAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckZvb3Rlcn0+e2Zvb3Rlcn08L2Rpdj59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9DU1NUcmFuc2l0aW9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlciB9IGZyb20gXCIuL0RyYXdlclwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gT21pdDxcbiAgUmVuZGVyRGlzcGxheVByb3BzPFQ+LFxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxuPiAmIHtcbiAgb25DbGljazogUmVuZGVyRGlzcGxheVByb3BzPFQ+W1widG9nZ2xlSXNPcGVuXCJdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsaWNrYWJsZTxUIGV4dGVuZHMgSXRlbT4oe1xuICBkaXNwbGF5LFxuICBpc0Rpc2FibGVkLFxuICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkaXNwbGF5fVxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdENoaWxkLCBSZWFjdEVsZW1lbnQsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IHsgQ2xpY2thYmxlIH0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG5pbXBvcnQgeyBNZW51LCBNZW51Q29udGFpbmVyLCBNZW51SXRlbSwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuLi9NZW51XCI7XG5cbmV4cG9ydCB0eXBlIEl0ZW0gPSB7IGlkOiBudW1iZXIgfCBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJEaXNwbGF5UHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gUGljazxcbiAgRHJvcGRvd25Qcm9wczxUPixcbiAgXCJkaXNwbGF5XCIgfCBcInNlbGVjdGVkSXRlbVwiXG4+ICYgeyBpc0Rpc2FibGVkOiBib29sZWFuOyB0b2dnbGVJc09wZW46ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xpY2thYmxlRm48VCBleHRlbmRzIEl0ZW0+ID0gKFxuICBwcm9wczogUmVuZGVyRGlzcGxheVByb3BzPFQ+XG4pID0+IFJlYWN0RWxlbWVudDtcblxuZXhwb3J0IHR5cGUgSXRlbUJvZHlSZW5kZXJlckZuPFQgZXh0ZW5kcyBJdGVtPiA9IChzdGF0ZToge1xuICBpdGVtOiBUO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufSkgPT4gUmVhY3RDaGlsZDtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blByb3BzPFQgZXh0ZW5kcyBJdGVtPiB7XG4gIGl0ZW1Cb2R5UmVuZGVyZXI/OiBJdGVtQm9keVJlbmRlcmVyRm48VD47XG4gIGl0ZW1zOiBUW107XG4gIG9uU2VsZWN0OiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgZGlzcGxheTogUmVhY3RDaGlsZDtcbiAgcmVuZGVyQ2xpY2thYmxlPzogUmVuZGVyQ2xpY2thYmxlRm48VD47XG4gIHNlbGVjdGVkSXRlbTogVCB8IG51bGw7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bjxUIGV4dGVuZHMgSXRlbT4oe1xuICBpdGVtQm9keVJlbmRlcmVyLFxuICBpdGVtcyxcbiAgb25TZWxlY3Q6IGhhbmRsZVNlbGVjdCxcbiAgZGlzcGxheSxcbiAgcmVuZGVyQ2xpY2thYmxlLFxuICBzZWxlY3RlZEl0ZW0sXG4gIHBsYWNlbWVudCA9IHsgdmVydGljYWw6IFwiYm90dG9tXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH1cbn06IERyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHNldElzT3BlbihmYWxzZSkpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBUKSA9PiB7XG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xuICBjb25zdCB0b2dnbGVJc09wZW4gPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8TWVudUNvbnRhaW5lclxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICAgIHJlbmRlckNsaWNrYWJsZSh7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHRvZ2dsZUlzT3BlbixcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDbGlja2FibGVcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlSXNPcGVufVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudD17cGxhY2VtZW50fVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgPE1lbnUgaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXRlbXMgJiZcbiAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDbGljayhpdGVtKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW1Cb2R5UmVuZGVyZXJcbiAgICAgICAgICAgICAgICA/IGl0ZW1Cb2R5UmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICA8L01lbnU+XG4gICAgPC9NZW51Q29udGFpbmVyPlxuICApO1xufVxuIiwiZXhwb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duUHJvcHMsXG4gIEl0ZW0gYXMgRHJvcGRvd25JdGVtLFxuICBJdGVtQm9keVJlbmRlcmVyRm4gYXMgRHJvcGRvd25JdGVtQm9keVJlbmRlcmVyRm4sXG4gIFJlbmRlckNsaWNrYWJsZUZuIGFzIERyb3Bkb3duUmVuZGVyQ2xpY2thYmxlRm4sXG4gIFJlbmRlckRpc3BsYXlQcm9wcyBhcyBEcm9wZG93blJlbmRlckRpc3BsYXlQcm9wcyxcbn0gZnJvbSBcIi4vRHJvcGRvd25cIjtcbmV4cG9ydCB7XG4gIENsaWNrYWJsZSBhcyBEcm9wZG93bkNsaWNrYWJsZSxcbiAgQ2xpY2thYmxlUHJvcHMgYXMgRHJvcGRvd25DbGlja2FibGVQcm9wc1xufSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFNpemUgPSBTaXplO1xuXG50eXBlIFByb3BzID0ge1xuICBvbkNoYW5nZTogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XG59O1xuXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xuICBjaGlsZHJlbixcbiAgYWNjZXB0LFxuICBvbkNoYW5nZSxcbiAgaW5wdXRSZWYsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaWQ9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6XG4gICAgfCBcInJpZ2h0XCJcbiAgICB8IFwicmlnaHRFZGdlXCJcbiAgICB8IFwicmlnaHRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0XCJcbiAgICB8IFwibGVmdEVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICB2ZXJ0aWNhbDpcbiAgICB8IFwidG9wXCJcbiAgICB8IFwidG9wRWRnZVwiXG4gICAgfCBcInRvcE9uRWRnZVwiXG4gICAgfCBcImJvdHRvbVwiXG4gICAgfCBcImJvdHRvbUVkZ2VcIlxuICAgIHwgXCJib3R0b21PbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgcGFyZW50OiBcInZpZXdwb3J0XCIgfCBcImNvbnRhaW5lclwiO1xufTtcblxudHlwZSBGbG9hdGluZ1BhbmVsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXG4gIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiYm90dG9tXCIsIHBhcmVudDogXCJ2aWV3cG9ydFwiIH0sXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50Lmhvcml6b250YWwgPT09IFwiY2VudGVyXCJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XG5cbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb2F0aW5nUGFuZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZsb2F0aW5nUGFuZWwgfSBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xuXG50eXBlIEljb25Qcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcbn07XG5cbmZ1bmN0aW9uIEljb24oe1xuICBzcmMsXG4gIGFsdCxcbiAgY29udGFpbmVyUmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbn06IEljb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXG4gICAgICBdKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xuXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgc3JjOiBzdHJpbmc7XG4gICAgICBhbHQ6IHN0cmluZztcbiAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNyYyxcbiAgYWx0LFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogSWNvbkJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiO1xuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCI7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZyA9IFwiYXV0b1wiLFxuICBsb2FkaW5nID0gXCJlYWdlclwiLFxuICBzdHlsZSxcbn06IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gKFxuICAgIDxpbWdcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5pbWFnZSwgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cbiAgICAgIGhlaWdodD17c3JjSGVpZ2h0fVxuICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAvPlxuICApO1xuXG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAge2ltYWdlRWxlbWVudH1cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgaW1hZ2VFbGVtZW50XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MYWJlbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XG4gIHZhbHVlOiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIHZhbHVlLCBjb250YWluZXJSZWYgfTogTGFiZWxJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfVxuICAgID5cbiAgICAgIHt2YWx1ZX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgICBzaXplOiBTaXplO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYXM6IENvbXBvbmVudCxcbiAgYWN0aXZlID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvbkxpbmtcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b25MaW5rPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWZPYmplY3QsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgUGxhY2VtZW50Q29udGV4dCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xuICBzbWFydExheW91dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBNZW51KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgY2xhc3NOYW1lLFxuICBpc09wZW4gPSB0cnVlLFxuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgc21hcnRMYXlvdXQgPSB0cnVlLFxufTogTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVQbGFjZW1lbnQgPSB1c2VDb250ZXh0KFBsYWNlbWVudENvbnRleHQpO1xuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZWYgPSBjb250YWluZXJSZWYgfHwgaW5uZXJSZWY7XG5cbiAgaWYgKCFtZW51UGxhY2VtZW50KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWVudSBjb21wb25lbnQgbXVzdCBiZSB3cmFwcGVkIGJ5IGEgTWVudUNvbnRhaW5lciBjb21wb25lbnQuXCJcbiAgICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNtYXJ0TGF5b3V0ICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9FZGdlID1cbiAgICAgICAgbWVudVBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJ0b3BcIiA/IHRvcCA6IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgaWYgKGRpc3RhbmNlVG9FZGdlIDwgMCkge1xuICAgICAgICBjb25zdCB1bEVsID0gcmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gdWxFbC5xdWVyeVNlbGVjdG9yQWxsKFwibGksYVwiKTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gdWxFbC5jbGllbnRIZWlnaHQgKyBkaXN0YW5jZVRvRWRnZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2hpbGRFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICA/IGdldENvbXB1dGVkU3R5bGUoY2hpbGRFbGVtZW50c1swXSkubWluSGVpZ2h0XG4gICAgICAgICAgOiAwO1xuICAgICAgICB1bEVsLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7bmV3SGVpZ2h0fXB4IC0gJHtvZmZzZXR9KWA7XG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNPcGVuLCBtZW51UGxhY2VtZW50LCBzbWFydExheW91dF0pO1xuXG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cbiAgICAgICAgICA8dWw+e2NoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVhY3RFbGVtZW50LFxuICBmb3J3YXJkUmVmLFxuICBGb3J3YXJkZWRSZWYsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBNZW51UGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOiBcInJpZ2h0XCIgfCBcImxlZnRcIjtcbiAgdmVydGljYWw6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBNZW51Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGJ1dHRvbj86IFJlYWN0RWxlbWVudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IFBsYWNlbWVudENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuICBNZW51Q29udGFpbmVyUHJvcHNbXCJwbGFjZW1lbnRcIl0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuZnVuY3Rpb24gTWVudUNvbnRhaW5lcihcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGJ1dHRvbixcbiAgICBjbGFzc05hbWUsXG4gICAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImxlZnRcIiwgdmVydGljYWw6IFwiYm90dG9tXCIgfSxcbiAgfTogTWVudUNvbnRhaW5lclByb3BzLFxuICByZWY6IEZvcndhcmRlZFJlZjxIVE1MRGl2RWxlbWVudD5cbikge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHtidXR0b259XG4gICAgICA8UGxhY2VtZW50Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dXNlTWVtbygoKSA9PiBwbGFjZW1lbnQsIFtwbGFjZW1lbnRdKX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tZW51Q29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC5ob3Jpem9udGFsXSxcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUGxhY2VtZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZihNZW51Q29udGFpbmVyKTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmNvbnN0IHBvcERpZ2l0ID0gKG51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKG51bWJlciAvIDEwKTtcbn07XG5cbmNvbnN0IGV2ZW50RGlnaXRLZXlzID0gW1wiMFwiLCBcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1wYWRQcm9wcyB7XG4gIG51bWJlcjogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiAobmV3TnVtYmVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOdW1wYWQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBOdW1wYWRQcm9wcz4oXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7ICAgIFxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJCYWNrc3BhY2VcIikge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKHBvcERpZ2l0KG51bWJlcikpO1xuICAgICAgfSBlbHNlIGlmIChldmVudERpZ2l0S2V5cy5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkaWdpdCA9IHBhcnNlSW50KGUua2V5LCAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIG9uQ2hhbmdlKGFwcGVuZERpZ2l0KG51bWJlciwgZGlnaXQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlRW1pdE51bWJlckhhbmRsZXIgPSAobmV3TnVtYmVyOiBudW1iZXIpID0+XG4gICAgICAoZTogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKG5ld051bWJlcik7XG4gICAgICB9O1xuXG4gICAgY29uc3QgTnVtcGFkS2V5cyA9IEFycmF5KDEwKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG51bXBhZFZhbHVlID0gKChpbmRleCArIDEpICUgMTApIGFzIERpZ2l0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bnVtcGFkVmFsdWV9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bXBhZH0gcmVmPXtyZWZ9IHRhYkluZGV4PXstMX0gb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufSBkYXRhLXRlc3RpZD1cIm51bXBhZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xufTtcblxuZnVuY3Rpb24gR3JvdXBPcHRpb24oeyBjbGFzc05hbWUsIGxhYmVsLCBvcHRpb25zIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2hvd0V4cGFuZGVkR3JvdXAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG4gIGNvbnN0IFtleHBhbmRlZCwgdG9nZ2xlRXhwYW5kXSA9IHVzZVRvZ2dsZShzaG93RXhwYW5kZWRHcm91cCk7XG5cbiAgY29uc3QgaGFuZGxlR3JvdXBDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVFeHBhbmQoKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gb25DbGljaz17aGFuZGxlR3JvdXBDbGlja30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntsYWJlbH08L2Rpdj5cbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHsgW3N0eWxlcy5leHBhbmRlZF06IGV4cGFuZGVkIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgIGFsdD17ZXhwYW5kZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge2V4cGFuZGVkICYmXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgc2VsZWN0ZWRPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5zZWxlY3RlZF06IGlzQ2hlY2tlZCAmJiAhbXVsdGlwbGUgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vPEFycmF5PEdyb3VwT3B0aW9uVHlwZSB8IE9wdGlvblR5cGU+PigoKSA9PiB7XG4gICAgaWYgKGhhc0dyb3VwT3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChmaWx0ZXJlZDogQXJyYXk8R3JvdXBPcHRpb25UeXBlPiwgZ3JvdXBPcHRpb246IEdyb3VwT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhncm91cE9wdGlvbi5vcHRpb25zKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJlZEdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLmZpbHRlcmVkLFxuICAgICAgICAgICAgICB7IC4uLmdyb3VwT3B0aW9uLCBvcHRpb25zOiBmaWx0ZXJlZEdyb3VwT3B0aW9ucyB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyT3B0aW9ucyhvcHRpb25zIGFzIEFycmF5PE9wdGlvblR5cGU+KTtcbiAgICB9XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgb3B0aW9ucywgc2VhcmNoS2V5d29yZF0pO1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5yZWR1Y2UoKGxlbmd0aDogbnVtYmVyLCBuZXh0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoaXNPcHRpb24obmV4dE9wdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgbmV4dE9wdGlvbi5vcHRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBmaWx0ZXJlZE9wdGlvbnMsIGlzT3B0aW9uXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMuZmluZCgoZmlsdGVyZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKVxuICAgICAgICAgID8gZmlsdGVyZWRPcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KS5sZW5ndGg7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnMsIGZpbHRlcmVkT3B0aW9uc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgY29uc3Qgb3B0aW9uc1RvU2VsZWN0ID0gZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5tYXAoKGZpbHRlcmVkT3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKSA/IGZpbHRlcmVkT3B0aW9uIDogZmlsdGVyZWRPcHRpb24ub3B0aW9uc1xuICAgICAgICApXG4gICAgICAgIC5mbGF0KCk7XG5cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zVG9TZWxlY3QpO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2Uob3B0aW9uc1RvU2VsZWN0Lm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoW10pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoKTtcbiAgfSwgW1xuICAgIGZpbHRlcmVkT3B0aW9ucyxcbiAgICBpc09wdGlvbixcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbnNDb3VudCA9PT0gZmlsdGVyZWRPcHRpb25zQ291bnQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCxcbiAgICBmaWx0ZXJlZE9wdGlvbnNDb3VudCxcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0QWxsQ29udGFpbmVyfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RBbGxDaGVja2VkfVxuICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkT3B0aW9uc0NvdW50ICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT09IGZpbHRlcmVkT3B0aW9uc0NvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7ISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBmaWx0ZXJlZE9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEdyb3VwT3B0aW9uXG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb24ub3B0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+XG4gICAgICAgICAgTm8gbWF0Y2hlcyBmb3JcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hLZXl3b3JkfT57YCAke3NlYXJjaEtleXdvcmR9YH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uTGlzdDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uTGlzdCwgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWFyY2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tIFwiLi4vLi4vVGV4dElucHV0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL0ljb25cIjtcbmltcG9ydCBpY29uU2VhcmNoIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VhcmNoLnN2Z1wiO1xuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBTZWFyY2goeyBjbGFzc05hbWUgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoS2V5d29yZCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2VhcmNoS2V5d29yZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWFyY2hLZXl3b3JkKFwiXCIpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgIDxJY29uIHNyYz17aWNvblNlYXJjaH0gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICB2YWx1ZT17c2VhcmNoS2V5d29yZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaC4uLlwiXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlfVxuICAgICAgICBub0JvcmRlclxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlc2V0QnV0dG9ufVxuICAgICAgICBzcmM9e2ljb25Dcm9zc2VkfVxuICAgICAgICBhbHQ9XCJDbGVhclwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrfVxuICAgICAgICBkaXNhYmxlZD17IXNlYXJjaEtleXdvcmR9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL1NlYXJjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M/OiBib29sZWFuO1xuICBzaG93U2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzY3JvbGxNZW51SW50b1ZpZXc/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgd2lkdGg6IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzY3JvbGxNZW51SW50b1ZpZXcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyA9IGZhbHNlLFxuICBzaG93U2VhcmNoID0gZmFsc2UsXG4gIHdpZHRoLFxuICBvbkNoYW5nZSxcbiAgb25GaWx0ZXIsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBbb3BlbmVkLCB0b2dnbGVPcGVuZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gdG9nZ2xlT3BlbmVkKGZhbHNlKSk7XG4gIGNvbnN0IGNvbnRlbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQgfHwgIW9wZW5lZCB8fCAhc2Nyb2xsTWVudUludG9WaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IFJPID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTtcbiAgICBSTy5vYnNlcnZlKGNvbnRlbnRSZWYuY3VycmVudCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgUk8uZGlzY29ubmVjdCgpO1xuICAgICAgUk8gPSBudWxsO1xuICAgIH07XG4gIH0sIFtvcGVuZWQsIHNjcm9sbE1lbnVJbnRvVmlldywgb25SZXNpemVdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICBzaG93RXhwYW5kZWRHcm91cD17c2hvd0V4cGFuZGVkR3JvdXB9XG4gICAgPlxuICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgIHtsYWJlbCA/IDxMYWJlbCB2YWx1ZT17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmhlYWRlciwgeyBbc3R5bGVzLmFjdGl2ZV06IG9wZW5lZCB9XSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgICAgICBpc0Ryb3Bkb3duT3BlbmVkPXtvcGVuZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb25CdXR0b24sXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge29wZW5lZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9IHJlZj17Y29udGVudFJlZn0+XG4gICAgICAgICAgICAgIHtvcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+Tm8gb3B0aW9ucyBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaCAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8T3B0aW9uTGlzdFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1NlbGVjdENvbnRleHRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG50eXBlIFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hLZXl3b3JkOiBzdHJpbmc7XG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZTogZmFsc2UsXG4gIHNlbGVjdEFsbDogZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwOiB0cnVlLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKHZhbHVlOiBPcHRpb25UeXBlKSA9PiB7fSxcbiAgc2VhcmNoS2V5d29yZDogXCJcIixcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHt9LFxuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4ge30sXG59O1xuXG5jb25zdCBTZWxlY3RDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTZWxlY3RDb250ZXh0U3RhdGU+KGluaXRpYWxTdGF0ZSk7XG5cbmNvbnN0IFNlbGVjdENvbnRleHRQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxuICBkZWZhdWx0VmFsdWUsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIHNlbGVjdEFsbCA9IGZhbHNlLFxuICBzaG93RXhwYW5kZWRHcm91cCA9IHRydWUsXG4gIG9wdGlvbnMsXG4gIG9uQ2hhbmdlLFxufTogUHJvcHMpID0+IHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvblR5cGVbXT4oXG4gICAgaW5pdGlhbFN0YXRlLnNlbGVjdGVkT3B0aW9uc1xuICApO1xuICBjb25zdCBbc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZF0gPSB1c2VTdGF0ZShcbiAgICBpbml0aWFsU3RhdGUuc2VhcmNoS2V5d29yZFxuICApO1xuXG4gIGNvbnN0IHVwZGF0ZVNlbGVjdGVkT3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnM7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucy5zb21lKFxuICAgICAgICAgICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKVxuICAgICAgICAgIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbb3B0aW9uXTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodXBkYXRlZFNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgOiBbZGVmYXVsdFZhbHVlXTtcblxuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoKGFsbCwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uaXRlbS5vcHRpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0VmFsdWUsIG9wdGlvbnNdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TZWxlY3RDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgU2VsZWN0Q29udGV4dCwgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3Rvci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRhZyB9IGZyb20gXCIuLi8uLi9UYWdcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NlbGVjdGVkQXNUYWdzOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbmVkOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0b3Ioe1xuICBwbGFjZWhvbGRlcixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzLFxuICBpc0Ryb3Bkb3duT3BlbmVkLFxufTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMsIG11bHRpcGxlLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0NsaWNrID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVUYWdDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3RlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHBsYWNlaG9sZGVyVG9TaG93ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzRHJvcGRvd25PcGVuZWQgfSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApLFxuICAgIFtwbGFjZWhvbGRlciwgaXNEcm9wZG93bk9wZW5lZF1cbiAgKTtcblxuICBjb25zdCBzaG93QXNUYWdzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzZWxlY3RlZE9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBrZXk9e3ZhbHVlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50YWdXcmFwcGVyfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVUYWdDbGlja31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFRhZyBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9IGNsb3NhYmxlIG9uQ2xvc2U9e2hhbmRsZVRhZ0Nsb3NlfT5cbiAgICAgICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgICAgIDwvVGFnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICkpfVxuICAgICAgICA8Lz5cbiAgICAgICksXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgcGxhY2Vob2xkZXJUb1Nob3ddXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGV4dCA9IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9uc31cbiAgICA+e2Ake3BsYWNlaG9sZGVyfSAoJHtzZWxlY3RlZE9wdGlvbnMubGVuZ3RofSlgfTwvc3Bhbj5cbiAgKSA6IChcbiAgICBwbGFjZWhvbGRlclRvU2hvd1xuICApO1xuXG4gIGxldCBjb250ZW50O1xuICBpZiAobXVsdGlwbGUpIHtcbiAgICBjb250ZW50ID0gc2hvd1NlbGVjdGVkQXNUYWdzID8gc2hvd0FzVGFncyA6IHNob3dBc1RleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICApIDogKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb259PntzZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWx9PC9zcGFuPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3I7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdG9yIH0gZnJvbSBcIi4vU2VsZWN0b3JcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vU2VsZWN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBMaXN0T25TY3JvbGxQcm9wcyB9IGZyb20gXCJyZWFjdC13aW5kb3dcIjtcbmltcG9ydCBJbmZpbml0ZUxvYWRlciBmcm9tIFwicmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlclwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSBcIi4vVGFibGVIZWFkZXJcIjtcbmltcG9ydCBUYWJsZVJvdyBmcm9tIFwiLi9UYWJsZVJvd1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZS5tb2R1bGUuY3NzXCI7XG5cblxuXG5cbmV4cG9ydCB0eXBlIENvbHVtblR5cGUgPSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YUluZGV4OiBzdHJpbmc7XG4gIHJlbmRlcj86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nKSA9PiBKU1guRWxlbWVudDtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGRlZmF1bHRTb3J0T3JkZXI/OiBTb3J0T3JkZXI7XG4gIHNvcnRlZD86IGJvb2xlYW47XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgb25Tb3J0PzogKHNvcnRPcmRlcjogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBkYXRhU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIHRhYmxlSGVpZ2h0OiBudW1iZXI7XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICBvbkxvYWRNb3JlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2V0UGFnZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgcm93SGVpZ2h0PzogbnVtYmVyO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG4gIGRpc2FibGVMYXp5TG9hZGVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGl0ZW1zQ291bnQ/OiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGFzVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFRhYmxlKHtcbiAgY29sdW1ucyxcbiAgZGF0YVNvdXJjZSxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIG9uTG9hZE1vcmUsXG4gIHBhZ2UsXG4gIHNldFBhZ2UsXG4gIHBhZ2VTaXplID0gVGFibGVDb25maWcuUEFHRV9TSVpFLFxuICB0YWJsZUhlaWdodCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJvd0hlaWdodCA9IFRhYmxlQ29uZmlnLlJPV19IRUlHSFQsXG4gIGhlYWRlckhlaWdodCA9IFRhYmxlQ29uZmlnLkhFQURFUl9IRUlHSFQsXG4gIGRpc2FibGVMYXp5TG9hZGVyLFxuICBhY3RpdmVSb3dzLFxuICBpdGVtc0NvdW50LFxuICBpc0hlYWRlclN0aWNreSA9IGZhbHNlLFxuICBoYXNWaXJ0dWFsU2Nyb2xsID0gdHJ1ZSxcbiAgY2xhc3NOYW1lLFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3Njcm9sbFRvcCwgc2V0U2Nyb2xsVG9wXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHJlbmRlclJvdyA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGRhdGEsIGluZGV4LCBzdHlsZSB9OiB7IGRhdGE6IGFueTsgaW5kZXg6IG51bWJlcjsgc3R5bGU6IGFueSB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhW2luZGV4XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIHRvcDogc3R5bGUudG9wIH19PlxuICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3cuaWRdfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjb2x1bW5zLCBhY3RpdmVSb3dzLCBoYXNBcnJvdywgcm93SGVpZ2h0LCBvblJvd0NsaWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBzY3JvbGxPZmZzZXQgfTogTGlzdE9uU2Nyb2xsUHJvcHMpID0+IHtcbiAgICAgIHNldFNjcm9sbFRvcChzY3JvbGxPZmZzZXQpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT09IGl0ZW1zQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPCBwYWdlU2l6ZSAqIHBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2V0UGFnZSAmJiBvbkxvYWRNb3JlKSB7XG4gICAgICBzZXRQYWdlKHBhZ2UgKyAxKTtcbiAgICAgIG9uTG9hZE1vcmUocGFnZSArIDEpO1xuICAgIH1cbiAgfSwgW1xuICAgIGRpc2FibGVMYXp5TG9hZGVyLFxuICAgIGRhdGFTb3VyY2UubGVuZ3RoLFxuICAgIGl0ZW1zQ291bnQsXG4gICAgcGFnZVNpemUsXG4gICAgcGFnZSxcbiAgICBzZXRQYWdlLFxuICAgIG9uTG9hZE1vcmUsXG4gIF0pO1xuXG4gIGNvbnN0IGlzSXRlbUxvYWRlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aCAtIFRhYmxlQ29uZmlnLklURU1TX0xPQURFRDtcbiAgICB9LFxuICAgIFtkYXRhU291cmNlLmxlbmd0aCwgZGlzYWJsZUxhenlMb2FkZXJdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2hhc1ZpcnR1YWxTY3JvbGwgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFibGV9PlxuICAgICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ISFwbGFjZWhvbGRlciAmJiAhZGF0YVNvdXJjZS5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5wbGFjZWhvbGRlckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEluZmluaXRlTG9hZGVyXG4gICAgICAgICAgICAgICAgaXNJdGVtTG9hZGVkPXtpc0l0ZW1Mb2FkZWR9XG4gICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICBsb2FkTW9yZUl0ZW1zPXtsb2FkTW9yZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoeyBvbkl0ZW1zUmVuZGVyZWQsIHJlZiB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Rml4ZWRTaXplTGlzdFxuICAgICAgICAgICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt0YWJsZUhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE9e2RhdGFTb3VyY2V9XG4gICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVMaXN0U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ9e29uSXRlbXNSZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUm93fVxuICAgICAgICAgICAgICAgICAgPC9GaXhlZFNpemVMaXN0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgaXNIZWFkZXJTdGlja3k9e2lzSGVhZGVyU3RpY2t5fVxuICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZGF0YVNvdXJjZS5tYXAoKHJvdywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3c/LmlkXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlckNlbGwgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXIoe1xuICBjb2x1bW5zLFxuICBzY3JvbGxUb3AsXG4gIGlzSGVhZGVyU3RpY2t5LFxuICBoZWFkZXJIZWlnaHQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuYm9yZGVyQm90dG9tXTogISFzY3JvbGxUb3AgfSxcbiAgICAgICAgeyBbc3R5bGVzLmlzSGVhZGVyU3RpY2t5XTogaXNIZWFkZXJTdGlja3kgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgfX1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlSGVhZGVyQ2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLWhlYWQtY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IGljb25DYXJldFVwIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtdXAuc3ZnXCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyQ2VsbCh7IGNvbHVtbiB9OiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgb25Tb3J0LFxuICAgIHNvcnRhYmxlLFxuICAgIHNvcnRlZCxcbiAgICBkZWZhdWx0U29ydE9yZGVyLFxuICAgIHRpdGxlLFxuICAgIHdpZHRoLFxuICAgIGNsYXNzTmFtZSxcbiAgfSA9IGNvbHVtbjtcblxuICBjb25zdCBbc29ydE9yZGVyLCBzZXRTb3J0T3JkZXJdID0gdXNlU3RhdGUoXG4gICAgKCkgPT4gZGVmYXVsdFNvcnRPcmRlciB8fCBTb3J0T3JkZXIuREVTQ1xuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNvcnRDb2x1bW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzb3J0ZWQpIHtcbiAgICAgIHJldHVybiBvblNvcnQoc29ydE9yZGVyKTtcbiAgICB9XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MgPyBTb3J0T3JkZXIuQVNDIDogU29ydE9yZGVyLkRFU0M7XG4gICAgc2V0U29ydE9yZGVyKG5ld1NvcnRPcmRlcik7XG4gICAgb25Tb3J0KG5ld1NvcnRPcmRlcik7XG4gIH0sIFtvblNvcnQsIHNvcnRPcmRlciwgc29ydGVkXSk7XG5cbiAgY29uc3QgY2VsbFByb3BzID1cbiAgICBvblNvcnQgJiYgc29ydGFibGVcbiAgICAgID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZVNvcnRDb2x1bW4sXG4gICAgICAgIH1cbiAgICAgIDoge307XG5cbiAgY29uc3QgZGlzcGxheUFycm93ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MpIHtcbiAgICAgIHJldHVybiBpY29uQ2FyZXREb3duO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbkNhcmV0VXA7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY2VsbFByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50YWJsZUhlYWRlckNlbGwsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc29ydEljb25WaXNpYmxlXTogc29ydGFibGUgJiYgc29ydGVkLFxuICAgICAgICAgIFtzdHlsZXMuc29ydGFibGVdOiBzb3J0YWJsZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICA+XG4gICAgICB7dGl0bGV9XG4gICAgICB7c29ydGFibGUgPyAoXG4gICAgICAgIDxJY29uIGFsdD17XCJTb3J0IGJ1dHRvblwifSBzaXplPVwic21hbGxcIiBzcmM9e2Rpc3BsYXlBcnJvdygpfSAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVSb3dDZWxsIGZyb20gXCIuL1RhYmxlUm93Q2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3cubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3coe1xuICBkYXRhLFxuICBjb2x1bW5zLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgcm93SGVpZ2h0LFxuICBpc0FjdGl2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvblJvd0NsaWNrICYmIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBvblJvd0NsaWNrKGRhdGEpO1xuICAgIH1cbiAgfSwgW2RhdGEsIG9uUm93Q2xpY2tdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5oYXNBcnJvd106IGhhc0Fycm93LFxuICAgICAgICAgIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZVJvd0NsaWNrfVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVSb3dDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtcm93LWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGl0ZW09e2RhdGF9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGl0ZW06IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvd0NlbGwoeyBpdGVtLCBjb2x1bW4sIHJvd0hlaWdodCB9OiBQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gaXRlbSA6IGl0ZW1bY29sdW1uLmRhdGFJbmRleF07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjb2x1bW4uY2xhc3NOYW1lXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IHJvd0hlaWdodCwgd2lkdGg6IGNvbHVtbj8ud2lkdGggfX1cbiAgICA+XG4gICAgICB7Y29sdW1uLnJlbmRlciA/IGNvbHVtbi5yZW5kZXIoZGF0YSkgOiBkYXRhfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvd0NlbGw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcIi4vVGFibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2xvc2FibGU/OiBib29sZWFuO1xuICB2YWx1ZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUYWcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjbG9zYWJsZSxcbiAgdmFsdWUsXG4gIG9uQ2xvc2UsXG4gIGRpc2FibGVkLFxuICBvbkRlbGV0ZSxcbiAgaWQsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvbkNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2xvc2UsIG9uRGVsZXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIHdpdGhTY3JvbGw/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB3aXRoU2Nyb2xsID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoeyBpZDogdXVpZHY0KCksIGxhYmVsOiB0YWcgfSkpO1xuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKTtcbiAgICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFnc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdBZGQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZFRleHQgPSB0ZXh0LnRyaW0oKTtcbiAgICBsZXQgdXBkYXRlZFRhZ3MgPSBbLi4udGFnc107XG5cbiAgICBpZiAodHJpbW1lZFRleHQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnID0geyBpZDogdXVpZHY0KCksIGxhYmVsOiB0cmltbWVkVGV4dCB9O1xuICAgICAgdXBkYXRlZFRhZ3MgPSBbLi4udGFncywgdGFnXTtcbiAgICB9XG5cbiAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICBzZXRUZXh0KFwiXCIpO1xuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBjb25zdCB0YWdzQXJyID0gdXBkYXRlZFRhZ3MubWFwKCh0YWcpID0+IHRhZy5sYWJlbCk7XG4gICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt0YWdzLCB0ZXh0LCBzZXRUYWdzLCBzZXRUZXh0XSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PT0gXCJFbnRlclwiIHx8IGUuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaGFuZGxlVGFnQWRkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlVGFnQWRkXVxuICApO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBoYW5kbGVUYWdBZGQoKSk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxIaW50IG9wdGlvbnM9e3RhZ09wdGlvbnN9IGFsbG93RW50ZXJGaWxsPXt0cnVlfSBhbGxvd1RhYkZpbGw9e3RydWV9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgICBdKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgIDwvSGludD5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCwgW3N0eWxlcy5zY3JvbGxhYmxlXTogd2l0aFNjcm9sbCB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHt0YWdzPy5tYXAoKHsgaWQsIGxhYmVsIH0pID0+IChcbiAgICAgICAgPFRhZyBrZXk9e2lkfSB2YWx1ZT17bGFiZWx9IGlkPXtpZH0gb25EZWxldGU9e2hhbmRsZVRhZ0RlbGV0ZX0gY2xvc2FibGU+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICA8L1RhZz5cbiAgICAgICkpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWdJbnB1dH0+e2lucHV0RWxlbWVudH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFRhZ3NJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnc0lucHV0IH0gZnJvbSBcIi4vVGFnc0lucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dE1vZGUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGlucHV0TW9kZT86IFRleHRJbnB1dE1vZGU7XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgaW5wdXRNb2RlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIgfSxcbiAgICAgIF0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdCB9IGZyb20gXCIuL1RvYXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHNjcm9sbFBhcmVudCBmcm9tIFwic2Nyb2xscGFyZW50XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9vbHRpcC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9vbHRpcFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHBsYWNlbWVudDogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIjtcbiAgcG9zaXRpb24/OiBcImFic29sdXRlXCIgfCBcImZpeGVkXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc2hvd1Rvb2x0aXA6IGJvb2xlYW47XG59O1xuXG5jb25zdCBtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzID0gKFxuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIgfCBcImZpeGVkXCIsXG4gIHJlY3Q6IERPTVJlY3RcbikgPT4ge1xuICBjb25zdCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9ID0gcmVjdDtcbiAgbGV0IHBvc2l0aW9uU3R5bGVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0IC8gMixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCAvIDIsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCAvIDIsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRvcFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBsZWZ0ICsgd2lkdGggLyAyLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uID09PSBcImFic29sdXRlXCJcbiAgICA/IHtcbiAgICAgICAgdG9wOiBwb3NpdGlvblN0eWxlcy50b3AgKyB3aW5kb3cuc2Nyb2xsWSxcbiAgICAgICAgbGVmdDogcG9zaXRpb25TdHlsZXMubGVmdCArIHdpbmRvdy5zY3JvbGxYLFxuICAgICAgfVxuICAgIDogcG9zaXRpb25TdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIHBsYWNlbWVudCxcbiAgcG9zaXRpb24gPSBcImFic29sdXRlXCIsXG4gIHNob3dUb29sdGlwLFxuICBjbGFzc05hbWUsXG59OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Bvc2l0aW9uU3R5bGVzLCBzZXRQb3NpdGlvblN0eWxlc10gPSB1c2VTdGF0ZSh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gIH0pO1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQ+KG51bGwpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKTtcblxuICBjb25zdCB1cGRhdGVQb3NpdGlvblN0eWxlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uU3R5bGVzID0gbWFwUGxhY2VtZW50VG9Qb3NpdGlvblN0eWxlcyhcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcmVjdFxuICAgICk7XG4gICAgc2V0UG9zaXRpb25TdHlsZXMobmV3UG9zaXRpb25TdHlsZXMpO1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtwbGFjZW1lbnQsIHBvc2l0aW9uXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uVG91Y2hTdGFydEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgdGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfSwgNTAwMCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB0aW1lclJlZi5jdXJyZW50ICYmIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250YWluZXJSZWYuY3VycmVudCB8fCBwb3NpdGlvbiAhPT0gXCJhYnNvbHV0ZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudCA9IHNjcm9sbFBhcmVudChjb250YWluZXJSZWYuY3VycmVudCk7XG4gICAgaWYgKCFzY3JvbGxhYmxlUGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGlkZVRvb2x0aXAgPSAoKSA9PiBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgICBzY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGlkZVRvb2x0aXApO1xuICAgIHNjcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoaWRlVG9vbHRpcCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoaWRlVG9vbHRpcCk7XG4gICAgICBzY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGlkZVRvb2x0aXApO1xuICAgIH07XG4gIH0sIFtwb3NpdGlvbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIG9uVG91Y2hTdGFydD17b25Ub3VjaFN0YXJ0SGFuZGxlcn1cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgb25Nb3VzZUxlYXZlPXtvbk1vdXNlTGVhdmV9XG4gICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kSGFuZGxlcn1cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtjcmVhdGVQb3J0YWwoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dUb29sdGlwICYmIHRvb2x0aXBJc1Zpc2libGUgPyAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXtwb3NpdGlvblN0eWxlc31cbiAgICAgICAgICAgICAgZGF0YS10ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMudG9vbHRpcCxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50XSxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcG9zaXRpb25dLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz4sXG4gICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb29sdGlwIH0gZnJvbSBcIi4vVG9vbHRpcFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xuXG4vKipcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXG4gKi9cblxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICA+XG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgPC92aWRlbz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcbiIsImV4cG9ydCBlbnVtIFRhYmxlQ29uZmlnIHtcbiAgUk9XX0hFSUdIVCA9IDQ4LFxuICBIRUFERVJfSEVJR0hUPTMyLFxuICBQQUdFX1NJWkUgPSAxMDAsXG4gIElURU1TX0xPQURFRCA9IDUsXG59XG4iLCJleHBvcnQgKiBmcm9tIFwiLi4vY29uc3RhbnRzL1RhYmxlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25CYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yUGlja2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Ryb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbGVJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MaXN0Vmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL051bXBhZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1NlbGVjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWJsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnc0lucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub29sdGlwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0RyYXdlclwiO1xuIiwiZXhwb3J0IGVudW0gU29ydE9yZGVyIHtcbiAgICBBU0MgPSBcImFzY1wiLFxuICAgIERFU0MgPSBcImRlc2NcIixcbiAgfVxuIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNCA1TDcuNSAxMkwxIDUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMSAxMEw3LjUgM0wxNCAxMCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyMCAyMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wLjM5ODQzOCAwLjM5OTkwMkwxOS41OTg0IDE5LjU5OTlNMC4zOTg0MzggMTkuNTk5OUwxOS41OTg0IDAuMzk5OTAyJyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEuNSAxLjVMMTMuNSAxMy41TTEuNSAxMy41TDEzLjUgMS41JyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE1LjQ2ODUgMTUuNDY2NUwxMS4yMDE4IDExLjE5OTlNNi45MzUxNiAxMy4zMzMyQzMuNDAwNTMgMTMuMzMzMiAwLjUzNTE1NiAxMC40Njc4IDAuNTM1MTU2IDYuOTMzMkMwLjUzNTE1NiAzLjM5ODU4IDMuNDAwNTMgMC41MzMyMDMgNi45MzUxNiAwLjUzMzIwM0MxMC40Njk4IDAuNTMzMjAzIDEzLjMzNTIgMy4zOTg1OCAxMy4zMzUyIDYuOTMzMkMxMy4zMzUyIDEwLjQ2NzggMTAuNDY5OCAxMy4zMzMyIDYuOTM1MTYgMTMuMzMzMlonIHN0cm9rZT0nJTIzODk4ODkxJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjkzMzEgNC4yNjc1OEw3Ljk5OTc0IDExLjczNDJMMS4wNjY0MSA0LjI2NzU4JyBzdHJva2U9JyUyMzg5ODg5MScgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBlPXJlcXVpcmUoXCJyZWFjdFwiKTtmdW5jdGlvbiBoKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgaz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpoLGw9ZS51c2VTdGF0ZSxtPWUudXNlRWZmZWN0LG49ZS51c2VMYXlvdXRFZmZlY3QscD1lLnVzZURlYnVnVmFsdWU7ZnVuY3Rpb24gcShhLGIpe3ZhciBkPWIoKSxmPWwoe2luc3Q6e3ZhbHVlOmQsZ2V0U25hcHNob3Q6Yn19KSxjPWZbMF0uaW5zdCxnPWZbMV07bihmdW5jdGlvbigpe2MudmFsdWU9ZDtjLmdldFNuYXBzaG90PWI7cihjKSYmZyh7aW5zdDpjfSl9LFthLGQsYl0pO20oZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KTtyZXR1cm4gYShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pfSl9LFthXSk7cChkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHIoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBkPWIoKTtyZXR1cm4hayhhLGQpfWNhdGNoKGYpe3JldHVybiEwfX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIGIoKX12YXIgdT1cInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/dDpxO2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9dm9pZCAwIT09ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT9lLnVzZVN5bmNFeHRlcm5hbFN0b3JlOnU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8qXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgSmF2YVNjcmlwdCBNRDVcbiAqXG4gKiBNb2RpZmljYXRpb24gb2YgSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShtc2cubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlc1tpXSA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZDVUb0hleEVuY29kZWRBcnJheSh3b3Jkc1RvTWQ1KGJ5dGVzVG9Xb3JkcyhieXRlcyksIGJ5dGVzLmxlbmd0aCAqIDgpKTtcbn1cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYW4gYXJyYXkgb2YgYnl0ZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNVRvSGV4RW5jb2RlZEFycmF5KGlucHV0KSB7XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBjb25zdCBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuICBjb25zdCBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGgzMjsgaSArPSA4KSB7XG4gICAgY29uc3QgeCA9IGlucHV0W2kgPj4gNV0gPj4+IGkgJSAzMiAmIDB4ZmY7XG4gICAgY29uc3QgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgcmV0dXJuIChpbnB1dExlbmd0aDggKyA2NCA+Pj4gOSA8PCA0KSArIDE0ICsgMTtcbn1cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICovXG5cblxuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICBsZXQgYSA9IDE3MzI1ODQxOTM7XG4gIGxldCBiID0gLTI3MTczMzg3OTtcbiAgbGV0IGMgPSAtMTczMjU4NDE5NDtcbiAgbGV0IGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIGNvbnN0IG9sZGEgPSBhO1xuICAgIGNvbnN0IG9sZGIgPSBiO1xuICAgIGNvbnN0IG9sZGMgPSBjO1xuICAgIGNvbnN0IG9sZGQgPSBkO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMl0sIDksIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgNV0sIDQsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2ldLCAxMSwgLTM1ODUzNzIyMik7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcbiAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZUFkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBieXRlcyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkcyhpbnB1dCkge1xuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuZ3RoOCkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0W2kgLyA4XSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICBjb25zdCBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIGNvbnN0IG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gbXN3IDw8IDE2IHwgbHN3ICYgMHhmZmZmO1xufVxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFJvdGF0ZUxlZnQobnVtLCBjbnQpIHtcbiAgcmV0dXJuIG51bSA8PCBjbnQgfCBudW0gPj4+IDMyIC0gY250O1xufVxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1Z2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBkIHwgYyAmIH5kLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBtZDU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG52YXIgX2RlZmF1bHQgPSB7XG4gIHJhbmRvbVVVSURcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gcGFyc2UodXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgbGV0IHY7XG4gIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gUGFyc2UgIyMjIyMjIyMtLi4uLi0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLSMjIyMtLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLSMjIyMtLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0jIyMjLS4uLi4uLi4uLi4uLlxuXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLS4uLi4tIyMjIyMjIyMjIyMjXG4gIC8vIChVc2UgXCIvXCIgdG8gYXZvaWQgMzItYml0IHRydW5jYXRpb24gd2hlbiBiaXQtc2hpZnRpbmcgaGlnaC1vcmRlciBieXRlcylcblxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxuXG52YXIgX2RlZmF1bHQgPSBwYXJzZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBybmc7XG4vLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgY29uc3QgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcblxuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICBjb25zdCBsID0gYnl0ZXMubGVuZ3RoIC8gNCArIDI7XG4gIGNvbnN0IE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIGFycltqXSA9IGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tpICogNjQgKyBqICogNCArIDJdIDw8IDggfCBieXRlc1tpICogNjQgKyBqICogNCArIDNdO1xuICAgIH1cblxuICAgIE1baV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgVyA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgIH1cblxuICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgIH1cblxuICAgIGxldCBhID0gSFswXTtcbiAgICBsZXQgYiA9IEhbMV07XG4gICAgbGV0IGMgPSBIWzJdO1xuICAgIGxldCBkID0gSFszXTtcbiAgICBsZXQgZSA9IEhbNF07XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICBjb25zdCBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbdF0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG5cbiAgICBIWzBdID0gSFswXSArIGEgPj4+IDA7XG4gICAgSFsxXSA9IEhbMV0gKyBiID4+PiAwO1xuICAgIEhbMl0gPSBIWzJdICsgYyA+Pj4gMDtcbiAgICBIWzNdID0gSFszXSArIGQgPj4+IDA7XG4gICAgSFs0XSA9IEhbNF0gKyBlID4+PiAwO1xuICB9XG5cbiAgcmV0dXJuIFtIWzBdID4+IDI0ICYgMHhmZiwgSFswXSA+PiAxNiAmIDB4ZmYsIEhbMF0gPj4gOCAmIDB4ZmYsIEhbMF0gJiAweGZmLCBIWzFdID4+IDI0ICYgMHhmZiwgSFsxXSA+PiAxNiAmIDB4ZmYsIEhbMV0gPj4gOCAmIDB4ZmYsIEhbMV0gJiAweGZmLCBIWzJdID4+IDI0ICYgMHhmZiwgSFsyXSA+PiAxNiAmIDB4ZmYsIEhbMl0gPj4gOCAmIDB4ZmYsIEhbMl0gJiAweGZmLCBIWzNdID4+IDI0ICYgMHhmZiwgSFszXSA+PiAxNiAmIDB4ZmYsIEhbM10gPj4gOCAmIDB4ZmYsIEhbM10gJiAweGZmLCBIWzRdID4+IDI0ICYgMHhmZiwgSFs0XSA+PiAxNiAmIDB4ZmYsIEhbNF0gPj4gOCAmIDB4ZmYsIEhbNF0gJiAweGZmXTtcbn1cblxudmFyIF9kZWZhdWx0ID0gc2hhMTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy51bnNhZmVTdHJpbmdpZnkgPSB1bnNhZmVTdHJpbmdpZnk7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzdHJpbmdpZnk7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9tZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWQ1LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjMgPSAoMCwgX3YuZGVmYXVsdCkoJ3YzJywgMHgzMCwgX21kLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjM7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9uYXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25hdGl2ZS5qc1wiKSk7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKHJuZHMpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2NDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfc2hhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGExLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjUgPSAoMCwgX3YuZGVmYXVsdCkoJ3Y1JywgMHg1MCwgX3NoYS5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHY1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlZ2V4LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIF9yZWdleC5kZWZhdWx0LnRlc3QodXVpZCk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZhbGlkYXRlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwiX2luaGVyaXRzTG9vc2UiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl9fcHJvdG9fXyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZXhjbHVkZWQiLCJzb3VyY2VLZXlzIiwia2V5cyIsImluZGV4T2YiLCJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiYXIiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImVycm9yIiwidXNlUHJvbWlzZSIsIl90aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJTV1JHbG9iYWxTdGF0ZSIsIldlYWtNYXAiLCJFTVBUWV9DQUNIRSIsIklOSVRJQUxfQ0FDSEUiLCJub29wIiwiVU5ERUZJTkVEIiwiT0JKRUNUIiwiaXNVbmRlZmluZWQiLCJpc0Z1bmN0aW9uIiwibWVyZ2VPYmplY3RzIiwiYSIsImIiLCJTVFJfVU5ERUZJTkVEIiwiaXNXaW5kb3dEZWZpbmVkIiwid2luZG93IiwiaXNEb2N1bWVudERlZmluZWQiLCJjcmVhdGVDYWNoZUhlbHBlciIsImNhY2hlIiwic3RhdGUiLCJnZXQiLCJpbmZvIiwicHJldiIsInRhYmxlIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJ0eXBlIiwiaXNEYXRlIiwiRGF0ZSIsImluZGV4IiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0IiwiQXJyYXkiLCJzb3J0Iiwib25saW5lIiwib25XaW5kb3dFdmVudCIsIm9mZldpbmRvd0V2ZW50IiwiYmluZCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19SRUFDVF9MRUdBQ1kiLCJJU19TRVJWRVIiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImluY2x1ZGVzIiwiZWZmZWN0aXZlVHlwZSIsInNhdmVEYXRhIiwiZXJyIiwiYXJncyIsImlzQXJyYXkiLCJfX3RpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsIk1VVEFURV9FVkVOVCIsImNvbnN0YW50cyIsImFzeW5jIiwiaW50ZXJuYWxNdXRhdGUiLCJfa2V5IiwiX2RhdGEiLCJfb3B0cyIsInBvcHVsYXRlQ2FjaGUiLCJ0aHJvd09uRXJyb3IiLCJyZXZhbGlkYXRlIiwicm9sbGJhY2tPbkVycm9yT3B0aW9uIiwicm9sbGJhY2tPbkVycm9yIiwib3B0aW1pc3RpY0RhdGEiLCJrZXlGaWx0ZXIiLCJtYXRjaGVkS2V5cyIsIml0Iiwia2V5SXQiLCJ0ZXN0IiwiX2siLCJhbGwiLCJtYXAiLCJtdXRhdGVCeUtleSIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIk1VVEFUSU9OIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJzdGFydFJldmFsaWRhdGUiLCJiZWZvcmVNdXRhdGlvblRzIiwiaGFzT3B0aW1pc3RpY0RhdGEiLCJkaXNwbGF5ZWREYXRhIiwiY3VycmVudERhdGEiLCJfYyIsImNvbW1pdHRlZERhdGEiLCJjYXRjaCIsInJlcyIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpYmUiLCJzdWJzIiwic3BsaWNlIiwic2V0dGVyIiwiZm4iLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicHJvcHMiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsInUxIiwiZjEiLCJ1MiIsImYyIiwibWVyZ2VDb25maWdzIiwiY2FjaGVDb250ZXh0UmVmIiwiY2FjaGVDb250ZXh0IiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwiX19hc3NpZ24iLCJzIiwicCIsIl9fY3JlYXRlQmluZGluZyIsImsyIiwiZW51bWVyYWJsZSIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9fZXNNb2R1bGUiLCJleHBvcnRzIiwiSGludCIsInJlYWN0XzEiLCJ1dGlsc18xIiwiX2IiLCJjaGlsZCIsImRlZmF1bHQiLCJDaGlsZHJlbiIsIm9ubHkiLCJjaGlsZHJlbiIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZUhpbnQiLCJhbGxvd1RhYkZpbGwiLCJhbGxvd0VudGVyRmlsbCIsIm9uRmlsbCIsIm9uSGludCIsInZhbHVlTW9kaWZpZXIiLCJjaGlsZFByb3BzIiwibWFpbklucHV0UmVmIiwiaGludFdyYXBwZXJSZWYiLCJoaW50UmVmIiwidW5Nb2RpZmllZElucHV0VGV4dCIsInNldFVubW9kaWZpZWRJbnB1dFRleHQiLCJfZCIsInRleHQiLCJzZXRUZXh0IiwiX2UiLCJoaW50Iiwic2V0SGludCIsIl9mIiwibWF0Y2giLCJzZXRNYXRjaCIsIl9nIiwiY2hhbmdlRXZlbnQiLCJzZXRDaGFuZ2VFdmVudCIsImR1cGxpY2F0ZSIsImdldEZpcnN0RHVwbGljYXRlT3B0aW9uIiwiY29uc29sZSIsIndhcm4iLCJpbnB1dFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlSGludCIsInNldEhpbnRUZXh0QW5kSWQiLCJmaWx0ZXIiLCJ4Iiwic3RhcnRzV2l0aCIsInNvcnRBc2MiLCJnZXRNYXRjaCIsInNsaWNlIiwiaGFuZGxlT25GaWxsIiwibmV3VW5Nb2RpZmllZFRleHQiLCJvbkNoYW5nZSIsInN0eWxlIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJsaW5lSGVpZ2h0IiwiYm94U2l6aW5nIiwibWFyZ2luIiwiaW50ZXJwb2xhdGVTdHlsZSIsInBhZGRpbmciLCJib3JkZXJTdHlsZSIsImJvcmRlcldpZHRoIiwiY2hpbGRSZWYiLCJjbG9uZUVsZW1lbnQiLCJtYWluSW5wdXQiLCJwZXJzaXN0IiwibW9kaWZpZWRWYWx1ZSIsIm9uQmx1ciIsInJlbGF0ZWRUYXJnZXQiLCJvbkZvY3VzIiwib25LZXlEb3duIiwiY2FyZXRJc0F0VGV4dEVuZCIsImN1cnJlbnRUYXJnZXQiLCJzZWxlY3Rpb25FbmQiLCJwcmV2ZW50RGVmYXVsdCIsIm1lcmdlUmVmcyIsImNsYXNzTmFtZSIsInBvc2l0aW9uIiwiRnJhZ21lbnQiLCJkaXNwbGF5IiwicG9pbnRlckV2ZW50cyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwiYm94U2hhZG93IiwiY29sb3IiLCJ0b3AiLCJsZWZ0IiwidmlzaWJpbGl0eSIsIndoaXRlU3BhY2UiLCJvbkNsaWNrIiwiaGludENhcmV0UG9zaXRpb24iLCJmb2N1cyIsImNhcmV0UG9zaXRpb24iLCJzZXRTZWxlY3Rpb25SYW5nZSIsImJhY2tncm91bmQiLCJvdXRsaW5lIiwiYm9yZGVyIiwiY2FyZXRDb2xvciIsImRlZmF1bHRWYWx1ZSIsInRhYkluZGV4IiwicmVmcyIsIl9pIiwiZmlsdGVyZWRSZWZzIiwiQm9vbGVhbiIsImluc3QiLCJmaWx0ZXJlZFJlZnNfMSIsInN0eWxlcyIsImF0dHIiLCJzdWJhdHRyIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwiZGlyIiwiam9pbiIsImFycmF5IiwidHJhY2tlciIsImlzZmYiLCJ1c2VyQWdlbnQiLCJhZGRFdmVudCIsIm9iamVjdCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJnZXRLZXlzIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiX21vZGlmaWVyIiwic2hpZnQiLCJhbHQiLCJvcHRpb24iLCJjdHJsIiwiY29udHJvbCIsImNtZCIsImNvbW1hbmQiLCJtb2RpZmllck1hcCIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ0cmlnZ2VyIiwiZmluZCIsIml0ZW0iLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsImlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQiLCJldiIsInVzZUhvdGtleXMiLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsIl9yZWYkY3VycmVudCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiLCJyZXBsYWNlQ2xhc3NOYW1lIiwib3JpZ0NsYXNzIiwiY2xhc3NUb1JlbW92ZSIsImRpc2FibGVkIiwiZm9yY2VSZWZsb3ciLCJub2RlIiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiY29udGV4dCIsImluaXRpYWxTdGF0dXMiLCJhcHBlYXIiLCJpc01vdW50aW5nIiwiYXBwZWFyU3RhdHVzIiwiaW4iLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJldlN0YXRlIiwiX3Byb3RvIiwiY29tcG9uZW50RGlkTW91bnQiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJtb3VudGluZyIsIm5vZGVSZWYiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsInNldFN0YXRlIiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwib25FeGl0ZWQiLCJjYW5jZWwiLCJuZXh0U3RhdGUiLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0IiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImNsYXNzZXMiLCJjIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwic2V0QXR0cmlidXRlIiwiYmFzZVZhbCIsIkNTU1RyYW5zaXRpb24iLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJjbGFzc05hbWVzIiwiaXNTdHJpbmdDbGFzc05hbWVzIiwiYmFzZUNsYXNzTmFtZSIsImFjdGl2ZUNsYXNzTmFtZSIsImRvbmVDbGFzc05hbWUiLCJwaGFzZSIsImFkZCIsImhhc0NsYXNzIiwiX2FkZENsYXNzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiYmFzZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwicHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwiaGFzUHJldiIsImhhc05leHQiLCJwcmV2Q2hpbGQiLCJpc0xlYXZpbmciLCJ2YWx1ZXMiLCJUcmFuc2l0aW9uR3JvdXAiLCJoYW5kbGVFeGl0ZWQiLCJjb250ZXh0VmFsdWUiLCJmaXJzdFJlbmRlciIsIm1vdW50ZWQiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwiQ29tcG9uZW50IiwiY29tcG9uZW50IiwiY2hpbGRGYWN0b3J5IiwiUmVwbGFjZVRyYW5zaXRpb24iLCJfYXJncyIsImhhbmRsZUVudGVyIiwiX2xlbjIiLCJfa2V5MiIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiX2xlbjMiLCJfa2V5MyIsImhhbmRsZUVudGVyZWQiLCJfbGVuNCIsIl9rZXk0IiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJpZHgiLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJmaXJzdCIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsIm5hbWUiLCJjYiIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm1vZGUiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJjcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJpbnN0YW5jZSIsImNsYXNzQ2FsbENoZWNrIiwiZ2V0UHJvdG90eXBlT2YiLCJfbGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsIl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJfbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyIsIl9vbkl0ZW1zUmVuZGVyZWQiLCJ2aXNpYmxlU3RhcnRJbmRleCIsInZpc2libGVTdG9wSW5kZXgiLCJfZW5zdXJlUm93c0xvYWRlZCIsIl9zZXRSZWYiLCJsaXN0UmVmIiwiX2xpc3RSZWYiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsIm9uSXRlbXNSZW5kZXJlZCIsInN0YXJ0SW5kZXgiLCJzdG9wSW5kZXgiLCJfcHJvcHMiLCJpc0l0ZW1Mb2FkZWQiLCJpdGVtQ291bnQiLCJfcHJvcHMkbWluaW11bUJhdGNoU2kiLCJtaW5pbXVtQmF0Y2hTaXplIiwiX3Byb3BzJHRocmVzaG9sZCIsInRocmVzaG9sZCIsInVubG9hZGVkUmFuZ2VzIiwicmFuZ2VTdGFydEluZGV4IiwicmFuZ2VTdG9wSW5kZXgiLCJfaW5kZXgiLCJwb3RlbnRpYWxTdG9wSW5kZXgiLCJtaW4iLCJtYXgiLCJfaW5kZXgyIiwiX2luZGV4MyIsInNjYW5Gb3JVbmxvYWRlZFJhbmdlcyIsInNvbWUiLCJzdGFydE9yU3RvcCIsIl9sb2FkVW5sb2FkZWRSYW5nZXMiLCJsb2FkTW9yZUl0ZW1zIiwibG9hZE1vcmVSb3dzIiwiX2xvb3AiLCJsYXN0UmVuZGVyZWRTdGFydEluZGV4IiwibGFzdFJlbmRlcmVkU3RvcEluZGV4IiwicmVzZXRBZnRlckluZGV4IiwiX2dldEl0ZW1TdHlsZUNhY2hlIiwiZm9yY2VVcGRhdGUiLCJQdXJlQ29tcG9uZW50Iiwic2FmZUlzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJhcmVJbnB1dHNFcXVhbCIsIm5ld0lucHV0cyIsImxhc3RJbnB1dHMiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwibm93IiwicGVyZm9ybWFuY2UiLCJjYW5jZWxUaW1lb3V0IiwidGltZW91dElEIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpZCIsInJlcXVlc3RUaW1lb3V0IiwiZGVsYXkiLCJzdGFydCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpY2siLCJzaXplIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsInJlY2FsY3VsYXRlIiwiZGl2Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJkaXJlY3Rpb24iLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwiZGVmYXVsdEl0ZW1LZXkiLCJjb2x1bW5JbmRleCIsInJvd0luZGV4IiwiY3JlYXRlR3JpZENvbXBvbmVudCIsIl9jbGFzcyIsImdldENvbHVtbk9mZnNldCIsImdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCIsImdldEVzdGltYXRlZFRvdGFsV2lkdGgiLCJnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQiLCJnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQiLCJnZXRSb3dIZWlnaHQiLCJnZXRSb3dPZmZzZXQiLCJnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImluaXRJbnN0YW5jZVByb3BzIiwic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsInZhbGlkYXRlUHJvcHMiLCJHcmlkIiwiX2luc3RhbmNlUHJvcHMiLCJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsIl9vdXRlclJlZiIsImlzU2Nyb2xsaW5nIiwiaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxMZWZ0IiwiaW5pdGlhbFNjcm9sbFRvcCIsInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsInZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCJvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJvdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIm92ZXJzY2FuUm93U3RhcnRJbmRleCIsIm92ZXJzY2FuUm93U3RvcEluZGV4IiwidmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwidmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJ2aXNpYmxlUm93U3RvcEluZGV4IiwiX2NhbGxPblNjcm9sbCIsIm9uU2Nyb2xsIiwiX2dldEl0ZW1TdHlsZSIsImNvbHVtbldpZHRoIiwicm93SGVpZ2h0IiwiaXRlbVN0eWxlQ2FjaGUiLCJfb2Zmc2V0IiwiaXNSdGwiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFdpZHRoIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsInNjcm9sbFRvIiwic2Nyb2xsVG9JdGVtIiwiX3JlZjQkYWxpZ24iLCJhbGlnbiIsIl90aGlzJHByb3BzMiIsImNvbHVtbkNvdW50Iiwicm93Q291bnQiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJfdGhpcyRzdGF0ZTIiLCJfdGhpcyRwcm9wczQiLCJpbm5lclJlZiIsImlubmVyRWxlbWVudFR5cGUiLCJpbm5lclRhZ05hbWUiLCJpdGVtRGF0YSIsIl90aGlzJHByb3BzNCRpdGVtS2V5IiwiaXRlbUtleSIsIm91dGVyRWxlbWVudFR5cGUiLCJvdXRlclRhZ05hbWUiLCJ1c2VJc1Njcm9sbGluZyIsIl90aGlzJF9nZXRIb3Jpem9udGFsUiIsIl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciIsImNvbHVtblN0YXJ0SW5kZXgiLCJjb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4iLCJfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyIiwicm93U3RhcnRJbmRleCIsInJvd1N0b3BJbmRleCIsIml0ZW1zIiwiX3Jvd0luZGV4IiwiX2NvbHVtbkluZGV4IiwiZXN0aW1hdGVkVG90YWxXaWR0aCIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwid2lsbENoYW5nZSIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwib2Zmc2V0IiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwiaXRlbVNpemUiLCJsYXN0TWVhc3VyZWRJbmRleCIsImZpbmROZWFyZXN0SXRlbSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoIiwiaGlnaCIsImxvdyIsIm1pZGRsZSIsImZsb29yIiwiY3VycmVudE9mZnNldCIsImludGVydmFsIiwiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCJzY3JvbGxPZmZzZXQiLCJlc3RpbWF0ZWRUb3RhbFNpemUiLCJtYXhPZmZzZXQiLCJtaW5PZmZzZXQiLCJyb3VuZCIsIlZhcmlhYmxlU2l6ZUdyaWQiLCJyZXNldEFmdGVyQ29sdW1uSW5kZXgiLCJzaG91bGRGb3JjZVVwZGF0ZSIsInJlc2V0QWZ0ZXJJbmRpY2VzIiwicmVzZXRBZnRlclJvd0luZGV4IiwiX3JlZjYkc2hvdWxkRm9yY2VVcGRhIiwiX3JlZjciLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSIsImRlZmF1bHRJdGVtS2V5JDEiLCJjcmVhdGVMaXN0Q29tcG9uZW50IiwiZ2V0SXRlbU9mZnNldCIsImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsImdldEl0ZW1TaXplIiwiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJMaXN0Iiwic2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbE9mZnNldCIsIm92ZXJzY2FuU3RhcnRJbmRleCIsIm92ZXJzY2FuU3RvcEluZGV4IiwibGF5b3V0IiwiaXNIb3Jpem9udGFsIiwib2Zmc2V0SG9yaXpvbnRhbCIsIl9vblNjcm9sbEhvcml6b250YWwiLCJfb25TY3JvbGxWZXJ0aWNhbCIsIl9ldmVudCRjdXJyZW50VGFyZ2V0MiIsInZhbGlkYXRlU2hhcmVkUHJvcHMkMSIsIl90aGlzJHByb3BzNSRpdGVtS2V5IiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kIiwiX2dldFJhbmdlVG9SZW5kZXIiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyIiwiX292ZXJzY2FuU3RhcnRJbmRleCIsIl9vdmVyc2NhblN0b3BJbmRleCIsIl92aXNpYmxlU3RhcnRJbmRleCIsIl92aXNpYmxlU3RvcEluZGV4IiwiX3Njcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxPZmZzZXQiLCJnZXRJdGVtTWV0YWRhdGEkMSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxIiwiZXN0aW1hdGVkSXRlbVNpemUiLCJ0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMiLCJWYXJpYWJsZVNpemVMaXN0IiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbSQxIiwiRml4ZWRTaXplR3JpZCIsImxhc3RDb2x1bW5PZmZzZXQiLCJtaWRkbGVPZmZzZXQiLCJjZWlsIiwiX3JlZjgiLCJsYXN0Um93T2Zmc2V0IiwiX3JlZjkiLCJfcmVmMTAiLCJudW1WaXNpYmxlQ29sdW1ucyIsIl9yZWYxMSIsIl9yZWYxMiIsIm51bVZpc2libGVSb3dzIiwiX3JlZjEzIiwiRml4ZWRTaXplTGlzdCIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInJlZ2V4IiwicGFyZW50cyIsInBzIiwicGFyZW50Tm9kZSIsImdldFByb3BlcnR5VmFsdWUiLCJzY3JvbGwiLCJIVE1MRWxlbWVudCIsIlNWR0VsZW1lbnQiLCJzY3JvbGxpbmdFbGVtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwiY29udGFpbmVyIiwibGVmdE9mZnNldCIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJidXR0b25CYWRnZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJMYWJlbCIsImlucHV0UmVmIiwiY2hlY2tib3giLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiZm9vdGVyIiwib3BlbiIsIm5vQ2xvc2VJY29uIiwiZHJhd2VyRW50ZXIiLCJlbnRlckFjdGl2ZSIsImRyYXdlckVudGVyQWN0aXZlIiwiZW50ZXJEb25lIiwiZHJhd2VyRW50ZXJEb25lIiwiZHJhd2VyRXhpdCIsImV4aXRBY3RpdmUiLCJkcmF3ZXJFeGl0QWN0aXZlIiwiZXhpdERvbmUiLCJkcmF3ZXJFeGl0RG9uZSIsImRyYXdlciIsImRyYXdlckNvbnRlbnQiLCJkcmF3ZXJIZWFkZXJDb250ZW50IiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uQ29udGVudCIsImRyYXdlckhlYWRlckNsb3NlSWNvbiIsIkljb24iLCJzcmMiLCJkcmF3ZXJNYWluIiwiZHJhd2VyRm9vdGVyIiwiaXNEaXNhYmxlZCIsIkJ1dHRvbiIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJzZXRJc09wZW4iLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwiYnV0dG9uIiwiQ2xpY2thYmxlIiwiTWVudSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJEcm9wZG93biIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImljb24iLCJjcm9zc09yaWdpbiIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJoYXNPdmVybGF5Iiwib3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJQbGFjZW1lbnRDb250ZXh0IiwiRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsIm1lbnVJdGVtIiwibWVudUxpbmtJdGVtIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4IiwibW9kYWwiLCJtb2RhbEJ1dHRvbiIsImFwcGVuZERpZ2l0IiwibnVtYmVyIiwiZGlnaXQiLCJwb3BEaWdpdCIsImV2ZW50RGlnaXRLZXlzIiwiTnVtcGFkIiwiY3JlYXRlRW1pdE51bWJlckhhbmRsZXIiLCJuZXdOdW1iZXIiLCJOdW1wYWRLZXlzIiwiZmlsbCIsIm51bXBhZFZhbHVlIiwibnVtcGFkIiwicGFyc2VJbnQiLCJudW1iZXJzIiwiaXNGaXhlZCIsInNob3dFeHBhbmRlZEdyb3VwIiwiU2VsZWN0Q29udGV4dCIsImV4cGFuZGVkIiwidG9nZ2xlRXhwYW5kIiwiaGFuZGxlR3JvdXBDbGljayIsIkljb25CdXR0b24iLCJPcHRpb24iLCJzZWxlY3RlZE9wdGlvbnMiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsImlzQ2hlY2tlZCIsImNoZWNrYm94Q29udGFpbmVyIiwiQ2hlY2tib3giLCJpc09wdGlvbiIsIm9uRmlsdGVyIiwic2VsZWN0QWxsQ2hlY2tlZCIsInRvZ2dsZVNlbGVjdEFsbENoZWNrZWQiLCJzZWFyY2hLZXl3b3JkIiwic2VsZWN0QWxsIiwic2V0U2VsZWN0ZWRPcHRpb25zIiwiaGFzR3JvdXBPcHRpb24iLCJmaWx0ZXJPcHRpb25zIiwia2V5d29yZCIsInRyaW0iLCJmaWx0ZXJlZE9wdGlvbnMiLCJyZWR1Y2UiLCJmaWx0ZXJlZCIsImdyb3VwT3B0aW9uIiwiZmlsdGVyZWRHcm91cE9wdGlvbnMiLCJmaWx0ZXJlZE9wdGlvbnNDb3VudCIsIm5leHRPcHRpb24iLCJzZWxlY3RlZE9wdGlvbnNDb3VudCIsInNlbGVjdGVkT3B0aW9uIiwiZmlsdGVyZWRPcHRpb24iLCJoYW5kbGVTZWxlY3RBbGxDbGljayIsIm9wdGlvbnNUb1NlbGVjdCIsImZsYXQiLCJzZWxlY3RBbGxDb250YWluZXIiLCJHcm91cE9wdGlvbiIsIm5vT3B0aW9ucyIsInNldFNlYXJjaEtleXdvcmQiLCJoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlIiwiaGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2siLCJpY29uU2VhcmNoQ29udGFpbmVyIiwiVGV4dElucHV0IiwicmVzZXRCdXR0b24iLCJzY3JvbGxNZW51SW50b1ZpZXciLCJzaG93U2VsZWN0ZWRBc1RhZ3MiLCJzaG93U2VhcmNoIiwib3BlbmVkIiwidG9nZ2xlT3BlbmVkIiwiY29udGVudFJlZiIsIm9uUmVzaXplIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImJsb2NrIiwiUk8iLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJkaXNjb25uZWN0IiwiaGFuZGxlT3BlblNlbGVjdCIsIlNlbGVjdENvbnRleHRQcm92aWRlciIsIlNlbGVjdG9yIiwiaXNEcm9wZG93bk9wZW5lZCIsImljb25CdXR0b24iLCJzZWFyY2hDb250YWluZXIiLCJTZWFyY2giLCJPcHRpb25MaXN0IiwiaW5pdGlhbFN0YXRlIiwidXBkYXRlZFNlbGVjdGVkT3B0aW9ucyIsImhhbmRsZVRhZ0NsaWNrIiwiaGFuZGxlVGFnQ2xvc2UiLCJwbGFjZWhvbGRlclRvU2hvdyIsInNob3dBc1RhZ3MiLCJ0YWdXcmFwcGVyIiwiVGFnIiwiY2xvc2FibGUiLCJzaG93QXNUZXh0IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJST1dfSEVJR0hUIiwiaGVhZGVySGVpZ2h0IiwiSEVBREVSX0hFSUdIVCIsImRpc2FibGVMYXp5TG9hZGVyIiwiYWN0aXZlUm93cyIsIml0ZW1zQ291bnQiLCJpc0hlYWRlclN0aWNreSIsImhhc1ZpcnR1YWxTY3JvbGwiLCJzZXRTY3JvbGxUb3AiLCJyZW5kZXJSb3ciLCJyb3ciLCJoYW5kbGVMaXN0U2Nyb2xsIiwibG9hZE1vcmUiLCJJVEVNU19MT0FERUQiLCJwbGFjZWhvbGRlckNvbnRhaW5lciIsInNjcm9sbGJhckNvbnRhaW5lciIsImJvcmRlckJvdHRvbSIsImNvbHVtbiIsIm9uU29ydCIsInNvcnRhYmxlIiwic29ydGVkIiwiZGVmYXVsdFNvcnRPcmRlciIsInRpdGxlIiwiU29ydE9yZGVyIiwiREVTQyIsInNvcnRPcmRlciIsInNldFNvcnRPcmRlciIsImhhbmRsZVNvcnRDb2x1bW4iLCJuZXdTb3J0T3JkZXIiLCJBU0MiLCJjZWxsUHJvcHMiLCJ0YWJsZUhlYWRlckNlbGwiLCJzb3J0SWNvblZpc2libGUiLCJoYW5kbGVSb3dDbGljayIsImRhdGFJbmRleCIsIm9uRGVsZXRlIiwiY2xvc2VCdXR0b24iLCJwYXR0ZXJuIiwid2l0aFNjcm9sbCIsImlucHV0TW9kZSIsInRhZ09wdGlvbnMiLCJ0YWdzIiwic2V0VGFncyIsInRhZ3NBcnIiLCJ0YWciLCJoYW5kbGVUZXh0Q2hhbmdlIiwiaGFuZGxlVGFnRGVsZXRlIiwidXBkYXRlZFRhZ3MiLCJoYW5kbGVUYWdBZGQiLCJ0cmltbWVkVGV4dCIsImhhbmRsZUtleURvd24iLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJzY3JvbGxhYmxlIiwidGFnSW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwic2hvd1Rvb2x0aXAiLCJwb3NpdGlvblN0eWxlcyIsInNldFBvc2l0aW9uU3R5bGVzIiwidG9vbHRpcElzVmlzaWJsZSIsInNldFRvb2x0aXBJc1Zpc2libGUiLCJ0aW1lclJlZiIsInVwZGF0ZVBvc2l0aW9uU3R5bGVzIiwicmVjdCIsIm5ld1Bvc2l0aW9uU3R5bGVzIiwic2Nyb2xsWSIsInNjcm9sbFgiLCJtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Ub3VjaFN0YXJ0SGFuZGxlciIsImNsZWFyVGltZW91dCIsIm9uVG91Y2hFbmRIYW5kbGVyIiwic2Nyb2xsYWJsZVBhcmVudCIsImhpZGVUb29sdGlwIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaEVuZCIsImNyZWF0ZVBvcnRhbCIsInRvb2x0aXAiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJpcyIsImwiLCJ1c2VEZWJ1Z1ZhbHVlIiwiZ2V0U25hcHNob3QiLCJkIiwidSIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwibW9kdWxlIiwiX25pbCIsIl9wYXJzZSIsIl9zdHJpbmdpZnkiLCJfdiIsIl92MiIsIl92MyIsIl92NCIsIl92YWxpZGF0ZSIsIl92ZXJzaW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImdldE91dHB1dExlbmd0aCIsImlucHV0TGVuZ3RoOCIsInNhZmVBZGQiLCJsc3ciLCJtZDVjbW4iLCJxIiwibnVtIiwiY250IiwibWQ1ZmYiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJieXRlcyIsIm1zZyIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiVWludDhBcnJheSIsIm91dHB1dCIsImxlbmd0aDMyIiwiaGV4VGFiIiwiaGV4IiwiY2hhckF0IiwibWQ1VG9IZXhFbmNvZGVkQXJyYXkiLCJvbGRhIiwib2xkYiIsIm9sZGMiLCJvbGRkIiwid29yZHNUb01kNSIsImxlbmd0aDgiLCJVaW50MzJBcnJheSIsImJ5dGVzVG9Xb3JkcyIsIl9kZWZhdWx0IiwicmFuZG9tVVVJRCIsImNyeXB0byIsInV1aWQiLCJhcnIiLCJnZXRSYW5kb21WYWx1ZXMiLCJybmRzOCIsInoiLCJST1RMIiwiSyIsIkgiLCJOIiwiTSIsImoiLCJwb3ciLCJXIiwiVCIsInVuc2FmZVN0cmluZ2lmeSIsImJ5dGVUb0hleCIsIl9ybmciLCJfbm9kZUlkIiwiX2Nsb2Nrc2VxIiwiX2xhc3RNU2VjcyIsIl9sYXN0TlNlY3MiLCJidWYiLCJjbG9ja3NlcSIsInNlZWRCeXRlcyIsInJuZyIsIm1zZWNzIiwibnNlY3MiLCJkdCIsInRsIiwidG1oIiwiX21kIiwiVVJMIiwiRE5TIiwidmVyc2lvbiIsImhhc2hmdW5jIiwiZ2VuZXJhdGVVVUlEIiwibmFtZXNwYWNlIiwiX25hbWVzcGFjZSIsInN0ciIsInN0cmluZ1RvQnl0ZXMiLCJfbmF0aXZlIiwicm5kcyIsIl9zaGEiLCJfcmVnZXgiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJ0b1N0cmluZ1RhZyIsIl9fd2VicGFja19leHBvcnRzX18iXSwic291cmNlUm9vdCI6IiJ9
|