UNPKG

lfi

Version:

A lazy functional iteration library supporting sync, async, and concurrent iteration.

2 lines 194 kB
let e=/*@__PURE__*/(()=>{try{return eval(""),!0}catch{return!1}})(),t=()=>{},a=e=>e,r=e=>()=>e,n=e=>({[Symbol.iterator]:e}),i=(e,t)=>n(()=>({next:t(e[Symbol.iterator]())})),l=e=>({[Symbol.asyncIterator]:e}),o=/*@__PURE__*/Symbol("concurIterator"),f=e=>({[o]:e}),u=e=>!(!e||"function"!=typeof e.then),c=(e,t)=>u(e)?e.then(t):Promise.resolve(t(e)),s=e=>{if(1>=e.length||d.has(e))return e;let t=y(e,(...t)=>t.length<e.length?s(e.bind(null,...t)):e(...t));return d.add(t),t},y=(e,t)=>Object.defineProperties(t,{length:{value:e.length},name:{value:e.name}}),d=/*@__PURE__*/new WeakSet,w=(e,...t)=>{for(let a of t)e=a(e);return e},m=(...t)=>{switch(t.length){case 0:return a;case 1:return t[0];case 2:{let[e,a]=t;return t=>a(e(t))}case 3:{let[e,a,r]=t;return t=>r(a(e(t)))}case 4:{let[e,a,r,n]=t;return t=>n(r(a(e(t))))}case 5:{let[e,a,r,n,i]=t;return t=>i(n(r(a(e(t)))))}case 6:{let[e,a,r,n,i,l]=t;return t=>l(i(n(r(a(e(t))))))}default:return e?Function(...t.map((e,t)=>"f"+t),"return v=>"+t.reduce((e,t,a)=>`f${a}(${e})`,"v"))(...t):e=>w(e,...t)}},b=(e,t)=>e[Symbol.asyncIterator]?e:e[Symbol.iterator]?S(e):_(e,t),S=e=>l(()=>{let t=e[Symbol.iterator]();return{next:()=>{let e=t.next();return e.done?Promise.resolve(e):c(e.value,e=>({value:e}))}}}),_=(e,{backpressureStrategy:t}={})=>l(()=>{let a,r,n=[],i=!1,{bufferLimit:l,handleOverflow:f}=h(t);e[o](e=>{if(!r){if(n.length<l)n.push(e);else try{f(n,e)}catch(e){r=e}if(a){let e=a;a=void 0,e.resolve()}}}).then(()=>{i=!0,a?.resolve()}).catch(e=>{r=e,a?.resolve()});let u=()=>{if(n.length)return{value:n.shift()};if(r)throw r;return i?{done:i}:null};return{next:async()=>u()||(a=Promise.withResolvers(),await a.promise,u())}}),h=(e={})=>{let a,{bufferLimit:r=1/0,overflowStrategy:n="error"}=e;switch(n){case"drop-first":a=(e,t)=>{e.shift(),e.push(t)};break;case"drop-last":a=t;break;case"error":a=()=>{throw Error("Buffer limit exceeded")}}return{bufferLimit:r,handleOverflow:a}},v=e=>e[o]?e:e[Symbol.iterator]?f(async t=>{let a=[];for(let r of e){let e=p(t,r);u(e)&&a.push(e)}return g(await Promise.allSettled(a))}):f(async t=>{let a=[];for await(let r of e){let e=p(t,r);u(e)&&a.push(e)}g(await Promise.allSettled(a))}),p=(e,t)=>{if(u(t))return t.then(e);try{return e(t)}catch(e){return Promise.reject(e)}},g=e=>{let t=e.flatMap(e=>"rejected"===e.status?[e.reason]:[]);switch(t.length){case 0:return;case 1:throw t[0];default:throw new AggregateError(t,"Concur iterable rejected")}},P={done:!0},x={next:()=>P},k={next:()=>Promise.resolve(P)},z=/*@__PURE__*/r(/*@__PURE__*/n(()=>x)),E=/*@__PURE__*/r(/*@__PURE__*/l(()=>k)),j=/*@__PURE__*/r(/*@__PURE__*/f(t)),O=e=>n(()=>e[Symbol.iterator]()),W=e=>l(()=>e[Symbol.asyncIterator]()),$=e=>f(t=>e[o](t)),A=/*@__PURE__*/s((e,t)=>i(t,t=>()=>{let a=t.next();return a.done?a:{value:e(a.value)}})),M=/*@__PURE__*/s((e,t)=>l(async function*(){for await(let a of t)yield e(a)})),L=/*@__PURE__*/s((e,t)=>f(a=>t[o](async t=>a(await e(t))))),N=/*@__PURE__*/s((e,t)=>i(t,t=>{let a;return()=>{for(;;){if(!a){let r=t.next();if(r.done)return r;a=e(r.value)[Symbol.iterator]()}let r=a.next();if(!r.done)return r;a=void 0}}})),I=/*@__PURE__*/s((e,t)=>l(async function*(){for await(let a of t)yield*await e(a)})),B=/*@__PURE__*/s((e,t)=>f(a=>t[o](async t=>v(await e(t))[o](a)))),C=/*@__PURE__*/N(a),D=/*@__PURE__*/I(a),F=/*@__PURE__*/B(a),q=/*@__PURE__*/s(e=>n(function*(){let t=0;for(let a of e)yield[t++,a]})),G=/*@__PURE__*/s(e=>l(async function*(){let t=0;for await(let a of e)yield[t++,a]})),H=/*@__PURE__*/s(e=>f(async t=>{let a=0;await e[o](e=>t([a++,e]))})),J=/*@__PURE__*/s((e,t)=>A(t=>(e(t),t),t)),K=e=>s((t,a)=>e(async e=>(await t(e),e),a)),Q=/*@__PURE__*/K(M),R=/*@__PURE__*/K(L),T=/*@__PURE__*/s((e,t)=>{for(let a of t)e(a)}),U=/*@__PURE__*/s(async(e,t)=>{for await(let a of t)await e(a)}),V=/*@__PURE__*/s((e,t)=>t[o](e)),X=e=>a=>e(t,a),Y=/*@__PURE__*/X(T),Z=/*@__PURE__*/X(U),ee=/*@__PURE__*/X(V),te=e=>{let t=[],a=e[Symbol.iterator]();return n(()=>{let e=0;return{next:()=>{if(e<t.length)return{value:t[e++]};let r=a.next();return r.done||(t.push(r.value),e++),r}}})},ae=e=>{let t=[],a=e[Symbol.asyncIterator]();return l(()=>{let e=0;return{next:async()=>{if(e<t.length)return{value:t[e++]};let r=await a.next();return r.done||(t.push(r.value),e++),r}}})},re=e=>{let t,a=[],r=[],n=!1;return f(async i=>{n||(r.push(i),t||(t=V(async e=>{a.push(e),await V(t=>t(e),v(r))},e).then(()=>n=!0))),await Promise.all([V(i,v(a)),t])})},ne=/*@__PURE__*/s((e,t)=>{let a=t[Symbol.iterator](),{done:r,value:n}=a.next();return r||!a.next().done?e():n}),ie=/*@__PURE__*/s(async(e,t)=>{let a=t[Symbol.asyncIterator](),{done:r,value:n}=await a.next();return r||!(await a.next()).done?e():n}),le=/*@__PURE__*/s((e,a)=>{let r=async()=>e();return new Promise(e=>{let n,i;V(async t=>{i?n||(n=!0,e(r())):i={value:t}},a).catch(t).then(()=>{n||e(i?i.value:r())})})}),oe=()=>{throw Error("Did not contain exactly one value")},fe=/*@__PURE__*/ne(oe),ue=/*@__PURE__*/ie(oe),ce=/*@__PURE__*/le(oe),se=/*@__PURE__*/s(e=>{let t=e[Symbol.iterator](),{done:a,value:r}=t.next();return a?[z(),z()]:[O([r]),n(()=>t)]}),ye=/*@__PURE__*/s(async e=>{let t=e[Symbol.asyncIterator](),{done:a,value:r}=await t.next();return a?[E(),E()]:[b([r]),l(()=>t)]}),de=/*@__PURE__*/s((e,t)=>{let{finish:a,...r}=me(t);return{...r,finish:t=>e(a(t))}}),we=/*@__PURE__*/s((e,t)=>{let{finish:a,...r}=me(t);return{...r,finish:async t=>e(await a(t))}}),me=e=>{let t={finish:a};if("function"==typeof e)return t.add=e,t;for(let a of be){let r=e[a];r&&(t[a]=r.bind(e))}return t},be=["create","add","get","finish","combine"],Se={},_e=/*@__PURE__*/s((e,t)=>{let{create:a,add:r,finish:i}=me(e);return a?he(a(),r,i,t):n(function*(){let[e,a]=se(t);yield*A(e=>he(e,r,i,a),e)})}),he=(e,t,a,r)=>{for(let a of r)e=t(e,a);return a(e)},ve=/*@__PURE__*/s((e,t)=>{let{create:a,add:r,combine:n,finish:i}=me(e),o=v(t);return a?n?Pe(a,r,n,i,o):xe(a,r,i,o):l(async function*(){yield*await ge(r,i,o)})}),pe=/*@__PURE__*/s((e,t)=>{let{create:a,add:r,combine:n,finish:i}=me(e);return a?n?Pe(a,r,n,i,t):xe(a,r,i,t):f(async e=>{let a=await ge(r,i,t);a.length&&await e(a[0])})}),ge=async(e,t,a)=>{let r=[];return await V(async t=>{for(;r.length;)t=await e(t,r.pop());r.push(t)},a),r.length?[await t(r[0])]:r},Pe=async(e,t,a,r,n)=>{let i=[e()];return await V(async r=>{let n=await t(await(i.length?i.pop():e()),r);for(;i.length;)n=await a(n,i.pop());i.push(n)},n),r(await i[0])},xe=async(e,t,a,r)=>{let n=Promise.resolve(e());return await r[o](e=>{n=n.then(a=>t(a,e))}),a(await n)},ke=/*@__PURE__*/r(/*@__PURE__*/me({create:()=>[],add:(e,t)=>(e.push(t),e)})),ze=(e,t)=>e.add(t),Ee=/*@__PURE__*/r(/*@__PURE__*/me({create:()=>new Set,add:ze})),je=/*@__PURE__*/r(/*@__PURE__*/me({create:()=>new WeakSet,add:ze})),Oe=/*@__PURE__*/r(/*@__PURE__*/me({create:()=>({}),add:(e,[t,a])=>Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:a}),get:(e,t)=>We.call(e,t)?e[t]:Se})),We=/*@__PURE__*/(()=>({}.hasOwnProperty))(),$e={add:(e,[t,a])=>e.set(t,a),get:(e,t)=>e.has(t)?e.get(t):Se},Ae=/*@__PURE__*/r(/*@__PURE__*/me(/*@__PURE__*/(()=>({create:()=>new Map,...$e}))())),Me=/*@__PURE__*/r(/*@__PURE__*/me(/*@__PURE__*/(()=>({create:()=>new WeakMap,...$e}))())),Le=/*@__PURE__*/s((e,t)=>{let{create:a,add:r,finish:n}=me(e),{create:i,add:l,get:o}=me(t);return{create:()=>({e:i(),t:[]}),add:(e,[t,n])=>{let i=o(e.e,t);return i===Se?(i=a?r(a(),n):n,e.t.push(t)):i=r(i,n),e.e=l(e.e,[t,i]),e},finish:({e,t})=>t.reduce((e,t)=>l(e,[t,n(o(e,t))]),e)}}),Ne=e=>{let t=Array.isArray(e)?t=>_e(ke(),A(([,e])=>t(e),e)):t=>_e(Oe(),A(([e,a])=>[e,t(a)],e));e=Object.entries(e).map(([e,t])=>[e,me(t)]);let a=(t,a)=>{for(let[r,n]of e)t[r]=a(t[r],n);return t},r=(e,t)=>a(e,(e,{add:a})=>a(e,t)),n=e=>a(e,(e,{finish:t})=>t(e));return e.every(([,{create:e}])=>e)?{create:()=>t(({create:e})=>e()),add:r,finish:n}:{add:(e,a)=>r(Be(e,t),a),finish:e=>(e=n(Be(e,t)),Ie.delete(e),e)}},Ie=/*@__PURE__*/new WeakSet,Be=(e,t)=>{if(Ie.has(e))return e;let a=t(({create:t,add:a})=>t?a(t(),e):e);return Ie.add(a),a},Ce=e=>({create:t,add:(t,a)=>void 0===t?a+"":t+""+e+a,finish:e=>e??""}),De=e=>s((t,a)=>e(Ce(t),a)),Fe=/*@__PURE__*/De(_e),qe=/*@__PURE__*/De(ve),Ge=/*@__PURE__*/De(pe),He=/*@__PURE__*/s((e,t)=>i(t,t=>()=>{let a=t.next();for(;!a.done&&!e(a.value);)a=t.next();return a})),Je=e=>s((t,a)=>e(async e=>await t(e)?[e]:[],a)),Ke=/*@__PURE__*/Je(I),Qe=/*@__PURE__*/Je(B),Re=/*@__PURE__*/s((e,t)=>N(t=>Ue(e(t)),t)),Te=e=>s((t,a)=>e(async e=>Ue(await t(e)),a)),Ue=e=>null==e?[]:[e],Ve=/*@__PURE__*/Te(I),Xe=/*@__PURE__*/Te(B),Ye=e=>s((t,a)=>{let r=new Set(t);return e(e=>!r.has(e),a)}),Ze=/*@__PURE__*/Ye(He),et=/*@__PURE__*/Ye(Ke),tt=/*@__PURE__*/Ye(Qe),at=/*@__PURE__*/s((e,t)=>n(function*(){let a=new Set;for(let r of t){let t=e(r);a.has(t)||(a.add(t),yield r)}})),rt=/*@__PURE__*/s((e,t)=>l(async function*(){let a=new Set;for await(let r of t){let t=await e(r);a.has(t)||(a.add(t),yield r)}})),nt=/*@__PURE__*/s((e,t)=>f(a=>{let r=new Set;return V(async t=>{let n=await e(t);r.has(n)||(r.add(n),await a(t))},t)})),it=/*@__PURE__*/at(a),lt=/*@__PURE__*/rt(a),ot=/*@__PURE__*/nt(a),ft=/*@__PURE__*/s((e,t)=>n(function*(){for(let a of t)if(e(a))return void(yield a)})),ut=/*@__PURE__*/s((e,t)=>l(async function*(){for await(let a of t)if(await e(a))return void(yield a)})),ct=/*@__PURE__*/s((e,t)=>f(a=>new Promise((r,n)=>{let i=!1;V(async t=>{i||!await e(t)||i||(i=!0,await a(t),r())},t).then(r,n)}))),st=/*@__PURE__*/s((e,t)=>n(function*(){let a;for(let r of t)e(r)&&(a={value:r});a&&(yield a.value)})),yt=/*@__PURE__*/s((e,t)=>l(async function*(){let a;for await(let r of t)await e(r)&&(a={value:r});a&&(yield a.value)})),dt=/*@__PURE__*/s((e,t)=>f(async a=>{let r;try{await V(async t=>{await e(t)&&(r={value:t})},t)}catch(e){if(!r)throw e}r&&await a(r.value)})),wt=({a:e,r:t})=>a=>Object.entries(a).every(([a,r])=>e(a,r)||mt(`\`${a}\` must be ${t}: ${r}`)),mt=e=>{throw Error(e)},bt=/*@__PURE__*/wt({a:(e,t)=>Number.isSafeInteger(t),r:"an integer"}),St=/*@__PURE__*/wt({a:(e,t)=>bt({[e]:t})&&t>=0,r:"a non-negative integer"}),_t=/*@__PURE__*/wt({a:(e,t)=>bt({[e]:t})&&t>0,r:"a positive integer"}),ht=/*@__PURE__*/wt({a:(e,{n:t,i:a})=>t[a]()!=t[a](),r:"a pure iterable"}),vt=/*@__PURE__*/wt({a:(e,[t,a])=>a>=t,r:"a range"}),pt=e=>t=>n(()=>(t[e]?.()??Object[e](t))[Symbol.iterator]()),gt=/*@__PURE__*/pt("keys"),Pt=/*@__PURE__*/pt("values"),xt=/*@__PURE__*/pt("entries"),kt=/*@__PURE__*/s((e,t)=>n(function*(){for(let a=t;null!=a;a=e(a))yield a})),zt=/*@__PURE__*/s((e,t)=>l(async function*(){for(let a=t;null!=a;a=await e(a))yield a})),Et=e=>n(function*(){for(;;)yield e}),jt=e=>(ht({iterable:{n:e,i:Symbol.iterator}}),n(function*(){let t=e[Symbol.iterator](),{value:a,done:r}=t.next();if(!r)for(yield a,yield*n(()=>t);;)yield*e})),Ot=e=>(ht({asyncIterable:{n:e,i:Symbol.asyncIterator}}),l(async function*(){let t=e[Symbol.asyncIterator](),{value:a,done:r}=await t.next();if(!r)for(yield a,yield*{[Symbol.asyncIterator]:()=>t};;)yield*e})),Wt=(e,t,a)=>n(t>e?function*(){for(let r=e;t>r;r+=a)yield r}:function*(){for(let r=e;r>t;r-=a)yield r}),$t=(e,t,a)=>n(t>e?function*(){for(let r=e;t>=r;r+=a)yield r}:function*(){for(let r=e;r>=t;r-=a)yield r}),At=e=>s((t,a)=>{bt({start:t,end:a});let r=e(t,a,1);return r.step=r=>(_t({step:r}),e(t,a,r)),r}),Mt=/*@__PURE__*/At(Wt),Lt=/*@__PURE__*/At($t),Nt=/*@__PURE__*/s((e,t)=>{for(let a of t)if(!e(a))return!1;return!0}),It=/*@__PURE__*/s(async(e,t)=>{for await(let a of t)if(!await e(a))return!1;return!0}),Bt=/*@__PURE__*/s((e,t)=>new Promise((a,r)=>{let n=!1;V(async t=>{n||await e(t)||n||(n=!0,a(!1))},t).then(()=>a(!0),r)})),Ct=/*@__PURE__*/s((e,t)=>{for(let a of t)if(e(a))return!0;return!1}),Dt=/*@__PURE__*/s(async(e,t)=>{for await(let a of t)if(await e(a))return!0;return!1}),Ft=/*@__PURE__*/s((e,t)=>new Promise((a,r)=>{let n=!1;V(async t=>{n||!await e(t)||n||(n=!0,a(!0))},t).then(()=>a(!1),r)})),qt=/*@__PURE__*/s((e,t)=>!Ct(e,t)),Gt=e=>s(async(t,a)=>!await e(t,a)),Ht=/*@__PURE__*/Gt(Dt),Jt=/*@__PURE__*/Gt(Ft),Kt=e=>s((t,a)=>e(e=>Object.is(e,t),a)),Qt=/*@__PURE__*/Kt(Ct),Rt=/*@__PURE__*/Kt(Dt),Tt=/*@__PURE__*/Kt(Ft),Ut=/*@__PURE__*/s((e,t)=>n(function*(){let a=!0;for(let r of t)a&&e(r)||(a=!1,yield r)})),Vt=/*@__PURE__*/s((e,t)=>l(async function*(){let a=!0;for await(let r of t)a&&await e(r)&&a||(a=!1,yield r)})),Xt=/*@__PURE__*/s((e,t)=>f(a=>{let r=!0;return V(async t=>{r&&await e(t)&&r||(r=!1,await a(t))},t)})),Yt=/*@__PURE__*/s((e,t)=>n(function*(){for(let a of t){if(!e(a))break;yield a}})),Zt=/*@__PURE__*/s((e,t)=>l(async function*(){for await(let a of t){if(!await e(a))break;yield a}})),ea=/*@__PURE__*/s((e,t)=>f(a=>new Promise((r,n)=>{let i=!0;V(async t=>{i&&await e(t)&&i?await a(t):(i=!1,r())},t).then(r,n)}))),ta=(e,t,a)=>s((r,n)=>(St({count:r}),w(a(n),e(([e])=>r>e),t(([,e])=>e)))),aa=/*@__PURE__*/ta(Ut,A,q),ra=/*@__PURE__*/ta(Vt,M,G),na=/*@__PURE__*/ta(Xt,L,H),ia=/*@__PURE__*/ta(Yt,A,q),la=/*@__PURE__*/ta(Zt,M,G),oa=/*@__PURE__*/ta(ea,L,H),fa=/*@__PURE__*/ia(1),ua=/*@__PURE__*/la(1),ca=/*@__PURE__*/oa(1),sa=/*@__PURE__*/st(()=>!0),ya=/*@__PURE__*/yt(()=>!0),da=/*@__PURE__*/dt(()=>!0),wa=(e,t,a)=>s((r,n,i)=>(St({start:r}),St({end:n}),vt({"start,end":[r,n]}),r===n?e:w(i,t(r),a(n-r)))),ma=/*@__PURE__*/wa(/*@__PURE__*/z(),aa,ia),ba=/*@__PURE__*/wa(/*@__PURE__*/E(),ra,la),Sa=/*@__PURE__*/wa(/*@__PURE__*/j(),na,oa),_a=e=>s((t,a)=>(St({index:t}),e(t,t+1,a))),ha=/*@__PURE__*/_a(ma),va=/*@__PURE__*/_a(ba),pa=/*@__PURE__*/_a(Sa),ga=/*@__PURE__*/s((e,t)=>(_t({size:e}),n(function*(){let a=[];for(let r of t)a.push(r),a.length<e||(yield a,a=[]);a.length&&(yield a)}))),Pa=/*@__PURE__*/s((e,t)=>(_t({size:e}),l(async function*(){let a=[];for await(let r of t)a.push(r),a.length<e||(yield a,a=[]);a.length&&(yield a)}))),xa=/*@__PURE__*/s((e,t)=>(_t({size:e}),f(async a=>{let r=[];await V(async t=>{if(r.push(t),r.length<e)return;let n=r;r=[],await a(n)},t),r.length&&await a(r)}))),ka=/*@__PURE__*/s((e,t)=>{let{l:a,o:r,f:i}=ja(e);return _t({size:a}),n(function*(){let e=Oa(a);for(let n of t)(e.u(n)===a||r)&&(yield e.c());i&&(yield*e.f(r))})}),za=/*@__PURE__*/s((e,t)=>{let{l:a,o:r,f:n}=ja(e);return _t({size:a}),l(async function*(){let e=Oa(a);for await(let n of t)(e.u(n)===a||r)&&(yield e.c());n&&(yield*e.f(r))})}),Ea=/*@__PURE__*/s((e,t)=>{let{l:a,o:r,f:n}=ja(e);return _t({size:a}),f(async e=>{let i=Oa(a);await V(async t=>{(i.u(t)===a||r)&&await e(i.c())},t),n&&await Promise.all(A(e,i.f(r)))})}),ja=e=>{let{size:t,partialStart:a=!1,partialEnd:r=!1}="number"==typeof e?{size:e}:e;return{l:t,o:a,f:r}},Oa=e=>{let t=0,a=0,r=Array.from({length:e});return{u:n=>(r[t]=n,t=(t+1)%e,a=Math.min(a+1,e),a),c:(n=0)=>{let i=e-a+t+n;return Array.from({length:a-n},(t,a)=>r[(i+a)%e])},*f(t){for(let r=e>a&&!t?0:1;a>r;r++)yield this.c(r)}}},Wa=(...e)=>C(e),$a=(...e)=>D(b(e)),Aa=(...e)=>F(v(e)),Ma=(...e)=>n(function*(){if(0===e.length)return;let t=e.map(e=>e[Symbol.iterator]()),a=e.map(()=>{});for(;t.every((e,t)=>{let r=e.next();return a[t]=r.value,!r.done});)yield[...a]}),La=(...e)=>l(async function*(){if(0===e.length)return;let t=e.map(e=>b(e)[Symbol.asyncIterator]()),a=e.map(()=>{});for(;await Bt(async([e,t])=>{let r=await t.next();return a[e]=r.value,!r.done},v(t.entries()));)yield[...a]}),Na=(...e)=>f(t=>new Promise((a,r)=>{if(0===e.length)return void a();let n=e.map(()=>[]),i=[],l=1/0,o=!1;Promise.all(A(async([r,f])=>{let u=n[r];await V(async r=>{if(o)return;let f=u.length;if(f>=l)return;if(u.push(r),f<i.length||i.push(e.length),i[f]--,0!==f||0!==i[0])return;i.shift();let c=n.map(e=>e.shift());l--,await t(c),o||0!==l||(o=!0,a())},v(f)),u.length>0?l=Math.min(l,u.length):(o=!0,a())},e.entries())).then(()=>a(),r)})),Ia=/*@__PURE__*/r({create:()=>0,add:e=>e+1}),Ba=/*@__PURE__*/_e(/*@__PURE__*/Ia()),Ca=/*@__PURE__*/ve(/*@__PURE__*/Ia()),Da=/*@__PURE__*/pe(/*@__PURE__*/Ia()),Fa=/*@__PURE__*/r({create:()=>0,add:(e,t)=>e+t}),qa=/*@__PURE__*/_e(/*@__PURE__*/Fa()),Ga=/*@__PURE__*/ve(/*@__PURE__*/Fa()),Ha=/*@__PURE__*/pe(/*@__PURE__*/Fa()),Ja=/*@__PURE__*/r(/*@__PURE__*/de(([e,t])=>0===t?NaN:e/t,/*@__PURE__*/Ne([/*@__PURE__*/Fa(),/*@__PURE__*/Ia()]))),Ka=/*@__PURE__*/_e(/*@__PURE__*/Ja()),Qa=/*@__PURE__*/ve(/*@__PURE__*/Ja()),Ra=/*@__PURE__*/pe(/*@__PURE__*/Ja()),Ta=/*@__PURE__*/new WeakSet,Ua=e=>{if(Ta.has(e))return e;let t={s:e,y:e};return Ta.add(t),t},Va=e=>Ta.has(e)?{min:e.s,max:e.y}:{min:e,max:e},Xa=e=>me((t,a)=>e(t,a)>0?a:t),Ya=e=>me((t,a)=>0>e(t,a)?a:t),Za=e=>de(Va,(t,a)=>{let r=Ua(t);return 0>e(a,r.s)?r.s=a:e(a,r.y)>0&&(r.y=a),r}),er=e=>me(async(t,a)=>await e(t,a)>0?a:t),tr=e=>me(async(t,a)=>0>await e(t,a)?a:t),ar=e=>{let t=er(e).add,a=tr(e).add;return we(Va,async(r,n)=>{let i=Ua(r);return Ta.has(n)?[i.s,i.y]=await Promise.all([t(n.s,i.s),a(n.y,i.y)]):0>await e(n,i.s)?i.s=n:await e(n,i.y)>0&&(i.y=n),i})},rr=e=>t=>e((e,a)=>t(e)-t(a)),nr=/*@__PURE__*/rr(Xa),ir=/*@__PURE__*/rr(Ya),lr=/*@__PURE__*/rr(Za),or=e=>t=>e(async(e,a)=>{let[r,n]=await Promise.all([t(e),t(a)]);return r-n}),fr=/*@__PURE__*/or(er),ur=/*@__PURE__*/or(tr),cr=/*@__PURE__*/or(ar),sr=/*@__PURE__*/r(/*@__PURE__*/nr(a)),yr=/*@__PURE__*/r(/*@__PURE__*/ir(a)),dr=/*@__PURE__*/r(/*@__PURE__*/lr(a)),wr=(e,t)=>s((a,r)=>e(t(a),r)),mr=/*@__PURE__*/wr(_e,Xa),br=/*@__PURE__*/wr(_e,Ya),Sr=/*@__PURE__*/wr(_e,Za),_r=/*@__PURE__*/wr(ve,er),hr=/*@__PURE__*/wr(ve,tr),vr=/*@__PURE__*/wr(ve,ar),pr=/*@__PURE__*/wr(pe,er),gr=/*@__PURE__*/wr(pe,tr),Pr=/*@__PURE__*/wr(pe,ar),xr=/*@__PURE__*/wr(_e,nr),kr=/*@__PURE__*/wr(_e,ir),zr=/*@__PURE__*/wr(_e,lr),Er=/*@__PURE__*/wr(ve,fr),jr=/*@__PURE__*/wr(ve,ur),Or=/*@__PURE__*/wr(ve,cr),Wr=/*@__PURE__*/wr(pe,fr),$r=/*@__PURE__*/wr(pe,ur),Ar=/*@__PURE__*/wr(pe,cr),Mr=/*@__PURE__*/xr(a),Lr=/*@__PURE__*/kr(a),Nr=/*@__PURE__*/zr(a),Ir=/*@__PURE__*/Er(a),Br=/*@__PURE__*/jr(a),Cr=/*@__PURE__*/Or(a),Dr=/*@__PURE__*/Wr(a),Fr=/*@__PURE__*/$r(a),qr=/*@__PURE__*/Ar(a);export{Se as NO_ENTRY,Nt as all,It as allAsync,Bt as allConcur,Ct as any,Dt as anyAsync,Ft as anyConcur,b as asAsync,v as asConcur,ha as at,va as atAsync,pa as atConcur,te as cache,ae as cacheAsync,re as cacheConcur,ga as chunk,Pa as chunkAsync,xa as chunkConcur,m as compose,Wa as concat,$a as concatAsync,Aa as concatConcur,o as concurIteratorSymbol,Y as consume,Z as consumeAsync,ee as consumeConcur,Ba as count,Ca as countAsync,Da as countConcur,s as curry,jt as cycle,Ot as cycleAsync,aa as drop,ra as dropAsync,na as dropConcur,Ut as dropWhile,Vt as dropWhileAsync,Xt as dropWhileConcur,J as each,Q as eachAsync,R as eachConcur,z as empty,E as emptyAsync,j as emptyConcur,xt as entries,Ze as exclude,et as excludeAsync,tt as excludeConcur,He as filter,Ke as filterAsync,Qe as filterConcur,Re as filterMap,Ve as filterMapAsync,Xe as filterMapConcur,ft as find,ut as findAsync,ct as findConcur,st as findLast,yt as findLastAsync,dt as findLastConcur,fa as first,ua as firstAsync,ca as firstConcur,N as flatMap,I as flatMapAsync,B as flatMapConcur,C as flatten,D as flattenAsync,F as flattenConcur,T as forEach,U as forEachAsync,V as forEachConcur,kt as generate,zt as generateAsync,fe as get,ue as getAsync,ce as getConcur,Qt as includes,Rt as includesAsync,Tt as includesConcur,q as index,G as indexAsync,H as indexConcur,Fe as join,qe as joinAsync,Ge as joinConcur,gt as keys,sa as last,ya as lastAsync,da as lastConcur,A as map,M as mapAsync,we as mapAsyncReducer,L as mapConcur,de as mapReducer,Lr as max,Br as maxAsync,br as maxBy,hr as maxByAsync,gr as maxByConcur,Fr as maxConcur,kr as maxWith,jr as maxWithAsync,$r as maxWithConcur,Ka as mean,Qa as meanAsync,Ra as meanConcur,Mr as min,Ir as minAsync,mr as minBy,_r as minByAsync,pr as minByConcur,Dr as minConcur,Nr as minMax,Cr as minMaxAsync,Sr as minMaxBy,vr as minMaxByAsync,Pr as minMaxByConcur,qr as minMaxConcur,zr as minMaxWith,Or as minMaxWithAsync,Ar as minMaxWithConcur,xr as minWith,Er as minWithAsync,Wr as minWithConcur,se as next,ye as nextAsync,qt as none,Ht as noneAsync,Jt as noneConcur,me as normalizeReducer,O as opaque,W as opaqueAsync,$ as opaqueConcur,ne as or,ie as orAsync,le as orConcur,w as pipe,Lt as rangeTo,Mt as rangeUntil,_e as reduce,ve as reduceAsync,pe as reduceConcur,Et as repeat,ma as slice,ba as sliceAsync,Sa as sliceConcur,qa as sum,Ga as sumAsync,Ha as sumConcur,ia as take,la as takeAsync,oa as takeConcur,Yt as takeWhile,Zt as takeWhileAsync,ea as takeWhileConcur,ke as toArray,Ia as toCount,Le as toGrouped,Ce as toJoin,Ae as toMap,yr as toMax,Ya as toMaxBy,tr as toMaxByAsync,ir as toMaxWith,ur as toMaxWithAsync,Ja as toMean,sr as toMin,Xa as toMinBy,er as toMinByAsync,dr as toMinMax,Za as toMinMaxBy,ar as toMinMaxByAsync,lr as toMinMaxWith,cr as toMinMaxWithAsync,nr as toMinWith,fr as toMinWithAsync,Ne as toMultiple,Oe as toObject,Ee as toSet,Fa as toSum,Me as toWeakMap,je as toWeakSet,it as unique,lt as uniqueAsync,at as uniqueBy,rt as uniqueByAsync,nt as uniqueByConcur,ot as uniqueConcur,Pt as values,ka as window,za as windowAsync,Ea as windowConcur,Ma as zip,La as zipAsync,Na as zipConcur}; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJpdGVyYWJsZSIsImluZGV4IiwiaXRlcmFibGUiLCJpdGVyYXRvciIsInJlc3VsdCIsImVycm9yIiwiaXRlcmFibGUiLCJyZXN1bHQiLCJpdGVyYXRvciIsImluZGV4IiwiaXRlcmFibGUiLCJtYXAiLCJmb3JFYWNoIiwiY2FjaGUiLCJpdGVyYXRvciIsImluZGV4IiwicmVzdWx0IiwiYXN5bmNJdGVyYXRvciIsImFwcGx5IiwiaXRlcmF0b3IiLCJpdGVyYWJsZSIsImFzeW5jSXRlcmF0b3IiLCJyZXN1bHQiLCJlcnJvciIsIml0ZXJhYmxlIiwiZmlyc3QiLCJhZGQiLCJhY2MiLCJmaW5pc2giLCJyZWR1Y2UiLCJpdGVyYWJsZSIsIml0ZXJhYmxlIiwicmVzdWx0IiwiaXRlcmF0b3IiLCJmbGF0TWFwIiwiZmlsdGVyIiwibGFzdCIsImVycm9yIiwiaXRlcmFibGUiLCJpdGVyYXRvciIsImFzeW5jSXRlcmF0b3IiLCJpdGVyYWJsZSIsImFueSIsIml0ZXJhYmxlIiwiaW5kZXgiLCJjb3VudCIsIm1hcCIsImVtcHR5IiwiZHJvcCIsInRha2UiLCJzbGljZSIsImNodW5rIiwid2luZG93IiwidmFsdWVzIiwicmVzdWx0IiwiaXRlcmF0b3IiLCJhc3luY0l0ZXJhdG9yIiwic3VtIiwiY291bnQiLCJtaW5NYXgiLCJyZWR1Y2UiLCJpdGVyYWJsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC9oZWxwZXJzLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvY29yZS5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL3RyYW5zZm9ybXMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9zaWRlLWVmZmVjdHMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9vcHRpb25hbHMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9yZWR1Y2Vycy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL2NvbGxlY3Rpb25zLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvZmlsdGVycy5qcyIsIi4uL3NyYy9pbnRlcm5hbC9wcmVjb25kaXRpb25zLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvZ2VuZXJhdG9ycy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL3ByZWRpY2F0ZXMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9zcGxpY2VzLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvc3RhdGlzdGljcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY2FuRXZhbCA9ICgoKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV2YWwsIHN0eWxpc3RpYy9xdW90ZXNcbiAgICBldmFsKCcnKVxuICAgIHJldHVybiB0cnVlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8qIGM4IGlnbm9yZSBlbmQgKi9cbn0pKClcblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5leHBvcnQgY29uc3QgaWRlbnRpdHkgPSB2YWx1ZSA9PiB2YWx1ZVxuXG5leHBvcnQgY29uc3QgdGh1bmsgPSB2YWx1ZSA9PiAoKSA9PiB2YWx1ZVxuXG5leHBvcnQgY29uc3QgY3JlYXRlSXRlcmFibGUgPSBmbiA9PiAoeyBbU3ltYm9sLml0ZXJhdG9yXTogZm4gfSlcblxuZXhwb3J0IGNvbnN0IG1hcEl0ZXJhYmxlID0gKGl0ZXJhYmxlLCBmbikgPT5cbiAgY3JlYXRlSXRlcmFibGUoKCkgPT4gKHsgbmV4dDogZm4oaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpKSB9KSlcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFzeW5jSXRlcmFibGUgPSBmbiA9PiAoeyBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiBmbiB9KVxuXG5leHBvcnQgY29uc3QgY29uY3VySXRlcmF0b3JTeW1ib2wgPSBTeW1ib2woYGNvbmN1ckl0ZXJhdG9yYClcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbmN1ckl0ZXJhYmxlID0gZm4gPT4gKHsgW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXTogZm4gfSlcblxuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSB2YWx1ZSA9PlxuICBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBgZnVuY3Rpb25gKVxuXG4vKipcbiAqIEEgZmFzdGVyIHZlcnNpb24gb2YgYFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbih0aGVuKWAsIHdoaWNoIGlzIG11Y2ggc2xvd2VyXG4gKiBpbiBiZW5jaG1hcmtzIGJlY2F1c2UgaXQgcGVyZm9ybXMgbmF0aXZlIHByb21pc2Ugbm9ybWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRoZW5hYmxlVGhlbiA9ICh2YWx1ZSwgdGhlbikgPT5cbiAgaXNUaGVuYWJsZSh2YWx1ZSkgPyB2YWx1ZS50aGVuKHRoZW4pIDogUHJvbWlzZS5yZXNvbHZlKHRoZW4odmFsdWUpKVxuXG5leHBvcnQgY29uc3QgY3VycnkgPSBmbiA9PiB7XG4gIGlmIChmbi5sZW5ndGggPD0gMSB8fCBjdXJyaWVkRnVuY3Rpb25zLmhhcyhmbikpIHtcbiAgICByZXR1cm4gZm5cbiAgfVxuXG4gIGNvbnN0IGN1cnJpZWQgPSB3cmFwRnVuY3Rpb24oZm4sICguLi5hcmdzKSA9PlxuICAgIGFyZ3MubGVuZ3RoIDwgZm4ubGVuZ3RoID8gY3VycnkoZm4uYmluZChudWxsLCAuLi5hcmdzKSkgOiBmbiguLi5hcmdzKSxcbiAgKVxuICBjdXJyaWVkRnVuY3Rpb25zLmFkZChjdXJyaWVkKVxuXG4gIHJldHVybiBjdXJyaWVkXG59XG5cbmNvbnN0IHdyYXBGdW5jdGlvbiA9IChwcmV2aW91c0ZuLCBuZXdGbikgPT5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmV3Rm4sIHtcbiAgICBsZW5ndGg6IHsgdmFsdWU6IHByZXZpb3VzRm4ubGVuZ3RoIH0sXG4gICAgbmFtZTogeyB2YWx1ZTogcHJldmlvdXNGbi5uYW1lIH0sXG4gIH0pXG5cbmNvbnN0IGN1cnJpZWRGdW5jdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4iLCJpbXBvcnQge1xuICBjYW5FdmFsLFxuICBjb25jdXJJdGVyYXRvclN5bWJvbCxcbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSxcbiAgY3JlYXRlQ29uY3VySXRlcmFibGUsXG4gIGNyZWF0ZUl0ZXJhYmxlLFxuICBpZGVudGl0eSxcbiAgaXNUaGVuYWJsZSxcbiAgbm9vcCxcbiAgdGhlbmFibGVUaGVuLFxuICB0aHVuayxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcblxuZXhwb3J0IHsgY29uY3VySXRlcmF0b3JTeW1ib2wsIGN1cnJ5IH0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcblxuZXhwb3J0IGNvbnN0IHBpcGUgPSAodmFsdWUsIC4uLmZucykgPT4ge1xuICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgIHZhbHVlID0gZm4odmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBjb25zdCBjb21wb3NlID0gKC4uLmZucykgPT4ge1xuICBzd2l0Y2ggKGZucy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gaWRlbnRpdHlcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZm5zWzBdXG4gICAgY2FzZSAyOiB7XG4gICAgICBjb25zdCBbZm4wLCBmbjFdID0gZm5zXG4gICAgICByZXR1cm4gdmFsdWUgPT4gZm4xKGZuMCh2YWx1ZSkpXG4gICAgfVxuICAgIGNhc2UgMzoge1xuICAgICAgY29uc3QgW2ZuMCwgZm4xLCBmbjJdID0gZm5zXG4gICAgICByZXR1cm4gdmFsdWUgPT4gZm4yKGZuMShmbjAodmFsdWUpKSlcbiAgICB9XG4gICAgY2FzZSA0OiB7XG4gICAgICBjb25zdCBbZm4wLCBmbjEsIGZuMiwgZm4zXSA9IGZuc1xuICAgICAgcmV0dXJuIHZhbHVlID0+IGZuMyhmbjIoZm4xKGZuMCh2YWx1ZSkpKSlcbiAgICB9XG4gICAgY2FzZSA1OiB7XG4gICAgICBjb25zdCBbZm4wLCBmbjEsIGZuMiwgZm4zLCBmbjRdID0gZm5zXG4gICAgICByZXR1cm4gdmFsdWUgPT4gZm40KGZuMyhmbjIoZm4xKGZuMCh2YWx1ZSkpKSkpXG4gICAgfVxuICAgIGNhc2UgNjoge1xuICAgICAgY29uc3QgW2ZuMCwgZm4xLCBmbjIsIGZuMywgZm40LCBmbjVdID0gZm5zXG4gICAgICByZXR1cm4gdmFsdWUgPT4gZm41KGZuNChmbjMoZm4yKGZuMShmbjAodmFsdWUpKSkpKSlcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjYW5FdmFsXG4gICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAgICAgbmV3IEZ1bmN0aW9uKFxuICAgICAgICAgICAgLi4uZm5zLm1hcCgoXywgaW5kZXgpID0+IGBmJHtpbmRleH1gKSxcbiAgICAgICAgICAgIGByZXR1cm4gdj0+JHtmbnMucmVkdWNlKChhY2MsIF8sIGluZGV4KSA9PiBgZiR7aW5kZXh9KCR7YWNjfSlgLCBgdmApfWAsXG4gICAgICAgICAgKSguLi5mbnMpXG4gICAgICAgIDogdmFsdWUgPT4gcGlwZSh2YWx1ZSwgLi4uZm5zKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhc0FzeW5jID0gKGl0ZXJhYmxlLCBvcHRpb25zKSA9PiB7XG4gIGlmIChpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gaXRlcmFibGVcbiAgfVxuXG4gIGlmIChpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGFzQXN5bmNGcm9tU3luYyhpdGVyYWJsZSlcbiAgfVxuXG4gIHJldHVybiBhc0FzeW5jRnJvbUNvbmN1cihpdGVyYWJsZSwgb3B0aW9ucylcbn1cblxuY29uc3QgYXNBc3luY0Zyb21TeW5jID0gaXRlcmFibGUgPT5cbiAgLy8gV2Ugd3JpdGUgdGhpcyBpbnN0ZWFkIG9mIGAoKSA9PiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClgIHNvIHRoYXQgd2VcbiAgLy8gaGFuZGxlIHRoZSBjYXNlIG9mIHRoZSBpdGVyYWJsZSBjb250YWluaW5nIHByb21pc2VzLCBlYWNoIG9mIHdoaWNoIHNob3VsZFxuICAvLyBiZSBhd2FpdGVkLCBhbmQgc28gdGhhdCB3ZSBhcmUgY29tcGxpYW50IHdpdGggdGhlIGFzeW5jIGl0ZXJhdGlvbiBwcm90b2NvbCxcbiAgLy8gd2hpY2ggcmVxdWlyZXMgcmV0dXJuaW5nIGEgcHJvbWlzZS5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVGhpcyBsb2dpYyBjb3VsZCBiZSB3cml0dGVuIG1vcmUgc2ltcGx5LCBidXQgbWluaW1pemluZyBob3cgb2Z0ZW5cbiAgICAgIC8vIHdlIHVzZSBgYXdhaXRgIHJlc3VsdHMgaW4gbW9yZSBwZXJmb3JtYW50IGl0ZXJhdGlvbi5cbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIHJldHVybiByZXN1bHQuZG9uZVxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICA6IHRoZW5hYmxlVGhlbihyZXN1bHQudmFsdWUsIHZhbHVlID0+ICh7IHZhbHVlIH0pKVxuICAgICAgfSxcbiAgICB9XG4gIH0pXG5cbmNvbnN0IGFzQXN5bmNGcm9tQ29uY3VyID0gKGNvbmN1ckl0ZXJhYmxlLCB7IGJhY2twcmVzc3VyZVN0cmF0ZWd5IH0gPSB7fSkgPT5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiB7XG4gICAgLy8gVE9ETzogVXNlIGEgcXVldWUgaGVyZS5cbiAgICBjb25zdCBidWZmZXIgPSBbXVxuICAgIGxldCBkb25lID0gZmFsc2VcbiAgICBsZXQgYnVmZmVyUmVzb2x2ZXJzXG4gICAgbGV0IGRlZmVycmVkRXJyb3JcblxuICAgIGNvbnN0IHsgYnVmZmVyTGltaXQsIGhhbmRsZU92ZXJmbG93IH0gPVxuICAgICAgbm9ybWFsaXplQmFja3ByZXNzdXJlU3RyYXRlZ3koYmFja3ByZXNzdXJlU3RyYXRlZ3kpXG4gICAgY29uY3VySXRlcmFibGVbY29uY3VySXRlcmF0b3JTeW1ib2xdKHZhbHVlID0+IHtcbiAgICAgIGlmIChkZWZlcnJlZEVycm9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IGJ1ZmZlckxpbWl0KSB7XG4gICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBoYW5kbGVPdmVyZmxvdyhidWZmZXIsIHZhbHVlKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGRlZmVycmVkRXJyb3IgPSBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXJSZXNvbHZlcnMpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gYnVmZmVyUmVzb2x2ZXJzXG4gICAgICAgIGJ1ZmZlclJlc29sdmVycyA9IHVuZGVmaW5lZFxuICAgICAgICByZXNvbHZlcnMucmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgYnVmZmVyUmVzb2x2ZXJzPy5yZXNvbHZlKClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBkZWZlcnJlZEVycm9yID0gZXJyb3JcbiAgICAgICAgYnVmZmVyUmVzb2x2ZXJzPy5yZXNvbHZlKClcbiAgICAgIH0pXG5cbiAgICBjb25zdCBuZXh0UmVzdWx0ID0gKCkgPT4ge1xuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGJ1ZmZlci5zaGlmdCgpIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmVycmVkRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZGVmZXJyZWRFcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm4geyBkb25lIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXh0UmVzdWx0KClcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlclJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVycygpXG4gICAgICAgIGF3YWl0IGJ1ZmZlclJlc29sdmVycy5wcm9taXNlXG5cbiAgICAgICAgcmV0dXJuIG5leHRSZXN1bHQoKVxuICAgICAgfSxcbiAgICB9XG4gIH0pXG5cbmNvbnN0IG5vcm1hbGl6ZUJhY2twcmVzc3VyZVN0cmF0ZWd5ID0gKHN0cmF0ZWd5ID0ge30pID0+IHtcbiAgY29uc3QgeyBidWZmZXJMaW1pdCA9IEluZmluaXR5LCBvdmVyZmxvd1N0cmF0ZWd5ID0gYGVycm9yYCB9ID0gc3RyYXRlZ3lcbiAgbGV0IGhhbmRsZU92ZXJmbG93XG4gIHN3aXRjaCAob3ZlcmZsb3dTdHJhdGVneSkge1xuICAgIGNhc2UgYGRyb3AtZmlyc3RgOlxuICAgICAgaGFuZGxlT3ZlcmZsb3cgPSAoYnVmZmVyLCB2YWx1ZSkgPT4ge1xuICAgICAgICBidWZmZXIuc2hpZnQoKVxuICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSBgZHJvcC1sYXN0YDpcbiAgICAgIGhhbmRsZU92ZXJmbG93ID0gbm9vcFxuICAgICAgYnJlYWtcbiAgICBjYXNlIGBlcnJvcmA6XG4gICAgICBoYW5kbGVPdmVyZmxvdyA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWZmZXIgbGltaXQgZXhjZWVkZWRgKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgfVxuXG4gIHJldHVybiB7IGJ1ZmZlckxpbWl0LCBoYW5kbGVPdmVyZmxvdyB9XG59XG5cbmV4cG9ydCBjb25zdCBhc0NvbmN1ciA9IGl0ZXJhYmxlID0+IHtcbiAgaWYgKGl0ZXJhYmxlW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXSkge1xuICAgIHJldHVybiBpdGVyYWJsZVxuICB9XG5cbiAgaWYgKGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gY3JlYXRlQ29uY3VySXRlcmFibGUoYXN5bmMgYXBwbHkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzYWZlQXBwbHkoYXBwbHksIHZhbHVlKVxuICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kbGVQcm9taXNlUmVzdWx0cyhhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3JlYXRlQ29uY3VySXRlcmFibGUoYXN5bmMgYXBwbHkgPT4ge1xuICAgIC8vIE5PVEU6IFdlIGNhbid0IHVzZSBgQXJyYXkuZnJvbUFzeW5jKGl0ZXJhYmxlLCBtYXBwZXIpYCBoZXJlIGJlY2F1c2Ugd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIGF3YWl0IHRoZSByZXN1bHQgb2YgYG1hcHBlcmAgYmVmb3JlIG1vdmluZyBvbnRvIHRoZSBuZXh0XG4gICAgLy8gdmFsdWUgaW4gdGhlIGl0ZXJhYmxlLlxuICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBzYWZlQXBwbHkoYXBwbHksIHZhbHVlKVxuICAgICAgaWYgKGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHJlc3VsdClcbiAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlUHJvbWlzZVJlc3VsdHMoYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKSlcbiAgfSlcbn1cblxuY29uc3Qgc2FmZUFwcGx5ID0gKGFwcGx5LCB2YWx1ZSkgPT4ge1xuICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudGhlbihhcHBseSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KHZhbHVlKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgfVxufVxuXG5jb25zdCBoYW5kbGVQcm9taXNlUmVzdWx0cyA9IHJlc3VsdHMgPT4ge1xuICBjb25zdCBlcnJvcnMgPSByZXN1bHRzLmZsYXRNYXAocmVzdWx0ID0+XG4gICAgcmVzdWx0LnN0YXR1cyA9PT0gYHJlamVjdGVkYCA/IFtyZXN1bHQucmVhc29uXSA6IFtdLFxuICApXG4gIHN3aXRjaCAoZXJyb3JzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVyblxuICAgIGNhc2UgMTpcbiAgICAgIHRocm93IGVycm9yc1swXVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBgQ29uY3VyIGl0ZXJhYmxlIHJlamVjdGVkYClcbiAgfVxufVxuXG5jb25zdCByZXN1bHQgPSB7IGRvbmU6IHRydWUgfVxuY29uc3QgaXRlcmF0b3IgPSB7IG5leHQ6ICgpID0+IHJlc3VsdCB9XG5jb25zdCBhc3luY0l0ZXJhdG9yID0geyBuZXh0OiAoKSA9PiBQcm9taXNlLnJlc29sdmUocmVzdWx0KSB9XG5cbmV4cG9ydCBjb25zdCBlbXB0eSA9IHRodW5rKGNyZWF0ZUl0ZXJhYmxlKCgpID0+IGl0ZXJhdG9yKSlcbmV4cG9ydCBjb25zdCBlbXB0eUFzeW5jID0gdGh1bmsoY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiBhc3luY0l0ZXJhdG9yKSlcbmV4cG9ydCBjb25zdCBlbXB0eUNvbmN1ciA9IHRodW5rKGNyZWF0ZUNvbmN1ckl0ZXJhYmxlKG5vb3ApKVxuXG5leHBvcnQgY29uc3Qgb3BhcXVlID0gaXRlcmFibGUgPT5cbiAgY3JlYXRlSXRlcmFibGUoKCkgPT4gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpKVxuZXhwb3J0IGNvbnN0IG9wYXF1ZUFzeW5jID0gYXN5bmNJdGVyYWJsZSA9PlxuICBjcmVhdGVBc3luY0l0ZXJhYmxlKCgpID0+IGFzeW5jSXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkpXG5leHBvcnQgY29uc3Qgb3BhcXVlQ29uY3VyID0gY29uY3VySXRlcmFibGUgPT5cbiAgY3JlYXRlQ29uY3VySXRlcmFibGUoYXBwbHkgPT4gY29uY3VySXRlcmFibGVbY29uY3VySXRlcmF0b3JTeW1ib2xdKGFwcGx5KSlcbiIsImltcG9ydCB7XG4gIGNvbmN1ckl0ZXJhdG9yU3ltYm9sLFxuICBjcmVhdGVBc3luY0l0ZXJhYmxlLFxuICBjcmVhdGVDb25jdXJJdGVyYWJsZSxcbiAgY3JlYXRlSXRlcmFibGUsXG4gIGN1cnJ5LFxuICBpZGVudGl0eSxcbiAgbWFwSXRlcmFibGUsXG59IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMuanMnXG5pbXBvcnQgeyBhc0NvbmN1ciB9IGZyb20gJy4vY29yZS5qcydcblxuZXhwb3J0IGNvbnN0IG1hcCA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIG1hcEl0ZXJhYmxlKGl0ZXJhYmxlLCBpdGVyYXRvciA9PiAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG4gICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0IDogeyB2YWx1ZTogZm4ocmVzdWx0LnZhbHVlKSB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgbWFwQXN5bmMgPSBjdXJyeSgoZm4sIGFzeW5jSXRlcmFibGUpID0+XG4gIGNyZWF0ZUFzeW5jSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGFzeW5jSXRlcmFibGUpIHtcbiAgICAgIHlpZWxkIGZuKHZhbHVlKVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBtYXBDb25jdXIgPSBjdXJyeSgoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PlxuICBjcmVhdGVDb25jdXJJdGVyYWJsZShhcHBseSA9PlxuICAgIGNvbmN1ckl0ZXJhYmxlW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXShhc3luYyB2YWx1ZSA9PiBhcHBseShhd2FpdCBmbih2YWx1ZSkpKSxcbiAgKSxcbilcblxuZXhwb3J0IGNvbnN0IGZsYXRNYXAgPSBjdXJyeSgoZm4sIGl0ZXJhYmxlKSA9PlxuICBtYXBJdGVyYWJsZShpdGVyYWJsZSwgaXRlcmF0b3IgPT4ge1xuICAgIGxldCBzdWJJdGVyYXRvclxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoIXN1Ykl0ZXJhdG9yKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG4gICAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHN1Ykl0ZXJhdG9yID0gZm4ocmVzdWx0LnZhbHVlKVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBzdWJJdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgc3ViSXRlcmF0b3IgPSB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgZmxhdE1hcEFzeW5jID0gY3VycnkoKGZuLCBhc3luY0l0ZXJhYmxlKSA9PlxuICBjcmVhdGVBc3luY0l0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBhc3luY0l0ZXJhYmxlKSB7XG4gICAgICB5aWVsZCogYXdhaXQgZm4odmFsdWUpXG4gICAgfVxuICB9KSxcbilcblxuZXhwb3J0IGNvbnN0IGZsYXRNYXBDb25jdXIgPSBjdXJyeSgoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PlxuICBjcmVhdGVDb25jdXJJdGVyYWJsZShhcHBseSA9PlxuICAgIGNvbmN1ckl0ZXJhYmxlW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXShhc3luYyB2YWx1ZSA9PlxuICAgICAgYXNDb25jdXIoYXdhaXQgZm4odmFsdWUpKVtjb25jdXJJdGVyYXRvclN5bWJvbF0oYXBwbHkpLFxuICAgICksXG4gICksXG4pXG5cbmV4cG9ydCBjb25zdCBmbGF0dGVuID0gZmxhdE1hcChpZGVudGl0eSlcbmV4cG9ydCBjb25zdCBmbGF0dGVuQXN5bmMgPSBmbGF0TWFwQXN5bmMoaWRlbnRpdHkpXG5leHBvcnQgY29uc3QgZmxhdHRlbkNvbmN1ciA9IGZsYXRNYXBDb25jdXIoaWRlbnRpdHkpXG5cbmV4cG9ydCBjb25zdCBpbmRleCA9IGN1cnJ5KGl0ZXJhYmxlID0+XG4gIGNyZWF0ZUl0ZXJhYmxlKGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgIHlpZWxkIFtpbmRleCsrLCB2YWx1ZV1cbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgaW5kZXhBc3luYyA9IGN1cnJ5KGFzeW5jSXRlcmFibGUgPT5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZShhc3luYyBmdW5jdGlvbiogKCkge1xuICAgIGxldCBpbmRleCA9IDBcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGFzeW5jSXRlcmFibGUpIHtcbiAgICAgIHlpZWxkIFtpbmRleCsrLCB2YWx1ZV1cbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgaW5kZXhDb25jdXIgPSBjdXJyeShjb25jdXJJdGVyYWJsZSA9PlxuICBjcmVhdGVDb25jdXJJdGVyYWJsZShhc3luYyBhcHBseSA9PiB7XG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGF3YWl0IGNvbmN1ckl0ZXJhYmxlW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXSh2YWx1ZSA9PiBhcHBseShbaW5kZXgrKywgdmFsdWVdKSlcbiAgfSksXG4pXG4iLCJpbXBvcnQge1xuICBjb25jdXJJdGVyYXRvclN5bWJvbCxcbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSxcbiAgY3JlYXRlQ29uY3VySXRlcmFibGUsXG4gIGNyZWF0ZUl0ZXJhYmxlLFxuICBjdXJyeSxcbiAgbm9vcCxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcbmltcG9ydCB7IGFzQ29uY3VyIH0gZnJvbSAnLi9jb3JlLmpzJ1xuaW1wb3J0IHsgbWFwLCBtYXBBc3luYywgbWFwQ29uY3VyIH0gZnJvbSAnLi90cmFuc2Zvcm1zLmpzJ1xuXG5leHBvcnQgY29uc3QgZWFjaCA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIG1hcCh2YWx1ZSA9PiB7XG4gICAgZm4odmFsdWUpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0sIGl0ZXJhYmxlKSxcbilcblxuY29uc3QgY3JlYXRlQXN5bmNFYWNoID0gbWFwID0+XG4gIGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gICAgbWFwKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgIGF3YWl0IGZuKHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSwgaXRlcmFibGUpLFxuICApXG5cbmV4cG9ydCBjb25zdCBlYWNoQXN5bmMgPSBjcmVhdGVBc3luY0VhY2gobWFwQXN5bmMpXG5leHBvcnQgY29uc3QgZWFjaENvbmN1ciA9IGNyZWF0ZUFzeW5jRWFjaChtYXBDb25jdXIpXG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoID0gY3VycnkoKGZuLCBpdGVyYWJsZSkgPT4ge1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgZm4odmFsdWUpXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoQXN5bmMgPSBjdXJyeShhc3luYyAoZm4sIGFzeW5jSXRlcmFibGUpID0+IHtcbiAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBhc3luY0l0ZXJhYmxlKSB7XG4gICAgYXdhaXQgZm4odmFsdWUpXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoQ29uY3VyID0gY3VycnkoKGZuLCBjb25jdXJJdGVyYWJsZSkgPT5cbiAgY29uY3VySXRlcmFibGVbY29uY3VySXRlcmF0b3JTeW1ib2xdKGZuKSxcbilcblxuY29uc3QgY3JlYXRlQ29uc3VtZSA9IGZvckVhY2ggPT4gaXRlcmFibGUgPT4gZm9yRWFjaChub29wLCBpdGVyYWJsZSlcblxuZXhwb3J0IGNvbnN0IGNvbnN1bWUgPSBjcmVhdGVDb25zdW1lKGZvckVhY2gpXG5leHBvcnQgY29uc3QgY29uc3VtZUFzeW5jID0gY3JlYXRlQ29uc3VtZShmb3JFYWNoQXN5bmMpXG5leHBvcnQgY29uc3QgY29uc3VtZUNvbmN1ciA9IGNyZWF0ZUNvbnN1bWUoZm9yRWFjaENvbmN1cilcblxuZXhwb3J0IGNvbnN0IGNhY2hlID0gaXRlcmFibGUgPT4ge1xuICBjb25zdCBjYWNoZSA9IFtdXG4gIGNvbnN0IGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpXG5cbiAgcmV0dXJuIGNyZWF0ZUl0ZXJhYmxlKCgpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4IDwgY2FjaGUubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGNhY2hlW2luZGV4KytdIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnB1c2gocmVzdWx0LnZhbHVlKVxuICAgICAgICBpbmRleCsrXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0sXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgY2FjaGVBc3luYyA9IGFzeW5jSXRlcmFibGUgPT4ge1xuICBjb25zdCBjYWNoZSA9IFtdXG4gIGNvbnN0IGFzeW5jSXRlcmF0b3IgPSBhc3luY0l0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG5cbiAgcmV0dXJuIGNyZWF0ZUFzeW5jSXRlcmFibGUoKCkgPT4ge1xuICAgIGxldCBpbmRleCA9IDBcbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPCBjYWNoZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogY2FjaGVbaW5kZXgrK10gfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFzeW5jSXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5wdXNoKHJlc3VsdC52YWx1ZSlcbiAgICAgICAgaW5kZXgrK1xuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9LFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGNhY2hlQ29uY3VyID0gY29uY3VySXRlcmFibGUgPT4ge1xuICBsZXQgcHJvbWlzZVxuICBjb25zdCBjYWNoZSA9IFtdXG4gIGNvbnN0IGFwcGx5cyA9IFtdXG4gIGxldCBpc1Jlc29sdmVkID0gZmFsc2VcblxuICByZXR1cm4gY3JlYXRlQ29uY3VySXRlcmFibGUoYXN5bmMgYXBwbHkgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgYXBwbHlzLnB1c2goYXBwbHkpXG5cbiAgICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgICBwcm9taXNlID0gZm9yRWFjaENvbmN1cihhc3luYyB2YWx1ZSA9PiB7XG4gICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSlcbiAgICAgICAgICBhd2FpdCBmb3JFYWNoQ29uY3VyKGFwcGx5ID0+IGFwcGx5KHZhbHVlKSwgYXNDb25jdXIoYXBwbHlzKSlcbiAgICAgICAgfSwgY29uY3VySXRlcmFibGUpLnRoZW4oKCkgPT4gKGlzUmVzb2x2ZWQgPSB0cnVlKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbZm9yRWFjaENvbmN1cihhcHBseSwgYXNDb25jdXIoY2FjaGUpKSwgcHJvbWlzZV0pXG4gIH0pXG59XG4iLCJpbXBvcnQge1xuICBjcmVhdGVBc3luY0l0ZXJhYmxlLFxuICBjcmVhdGVJdGVyYWJsZSxcbiAgY3VycnksXG4gIG5vb3AsXG59IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMuanMnXG5pbXBvcnQgeyBhc0FzeW5jLCBlbXB0eSwgZW1wdHlBc3luYywgb3BhcXVlIH0gZnJvbSAnLi9jb3JlLmpzJ1xuaW1wb3J0IHsgZm9yRWFjaENvbmN1ciB9IGZyb20gJy4vc2lkZS1lZmZlY3RzLmpzJ1xuXG5leHBvcnQgY29uc3Qgb3IgPSBjdXJyeSgoZm4sIGl0ZXJhYmxlKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpXG4gIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGl0ZXJhdG9yLm5leHQoKVxuICByZXR1cm4gZG9uZSB8fCAhaXRlcmF0b3IubmV4dCgpLmRvbmUgPyBmbigpIDogdmFsdWVcbn0pXG5cbmV4cG9ydCBjb25zdCBvckFzeW5jID0gY3VycnkoYXN5bmMgKGZuLCBhc3luY0l0ZXJhYmxlKSA9PiB7XG4gIGNvbnN0IGFzeW5jSXRlcmF0b3IgPSBhc3luY0l0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGFzeW5jSXRlcmF0b3IubmV4dCgpXG5cbiAgcmV0dXJuIGRvbmUgfHwgIShhd2FpdCBhc3luY0l0ZXJhdG9yLm5leHQoKSkuZG9uZSA/IGZuKCkgOiB2YWx1ZVxufSlcblxuZXhwb3J0IGNvbnN0IG9yQ29uY3VyID0gY3VycnkoKGZuLCBjb25jdXJJdGVyYWJsZSkgPT4ge1xuICBjb25zdCBhc3luY0ZuID0gYXN5bmMgKCkgPT4gZm4oKVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbGV0IHJlc29sdmVkXG4gICAgbGV0IHJlc3VsdFxuXG4gICAgZm9yRWFjaENvbmN1cihhc3luYyB2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB7IHZhbHVlIH1cbiAgICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZVxuICAgICAgICByZXNvbHZlKGFzeW5jRm4oKSlcbiAgICAgIH1cbiAgICB9LCBjb25jdXJJdGVyYWJsZSlcbiAgICAgIC5jYXRjaChub29wKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQgPyByZXN1bHQudmFsdWUgOiBhc3luY0ZuKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH0pXG59KVxuXG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGNvbnRhaW4gZXhhY3RseSBvbmUgdmFsdWVgKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0ID0gb3IoZXJyb3IpXG5leHBvcnQgY29uc3QgZ2V0QXN5bmMgPSBvckFzeW5jKGVycm9yKVxuZXhwb3J0IGNvbnN0IGdldENvbmN1ciA9IG9yQ29uY3VyKGVycm9yKVxuXG5leHBvcnQgY29uc3QgbmV4dCA9IGN1cnJ5KGl0ZXJhYmxlID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gaXRlcmF0b3IubmV4dCgpXG5cbiAgcmV0dXJuIGRvbmVcbiAgICA/IFtlbXB0eSgpLCBlbXB0eSgpXVxuICAgIDogW29wYXF1ZShbdmFsdWVdKSwgY3JlYXRlSXRlcmFibGUoKCkgPT4gaXRlcmF0b3IpXVxufSlcblxuZXhwb3J0IGNvbnN0IG5leHRBc3luYyA9IGN1cnJ5KGFzeW5jIGFzeW5jSXRlcmFibGUgPT4ge1xuICBjb25zdCBhc3luY0l0ZXJhdG9yID0gYXN5bmNJdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBhc3luY0l0ZXJhdG9yLm5leHQoKVxuXG4gIHJldHVybiBkb25lXG4gICAgPyBbZW1wdHlBc3luYygpLCBlbXB0eUFzeW5jKCldXG4gICAgOiBbYXNBc3luYyhbdmFsdWVdKSwgY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiBhc3luY0l0ZXJhdG9yKV1cbn0pXG4iLCJpbXBvcnQge1xuICBjb25jdXJJdGVyYXRvclN5bWJvbCxcbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSxcbiAgY3JlYXRlQ29uY3VySXRlcmFibGUsXG4gIGNyZWF0ZUl0ZXJhYmxlLFxuICBjdXJyeSxcbiAgaWRlbnRpdHksXG59IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMuanMnXG5pbXBvcnQgeyBhc0NvbmN1ciB9IGZyb20gJy4vY29yZS5qcydcbmltcG9ydCB7IG5leHQgfSBmcm9tICcuL29wdGlvbmFscy5qcydcbmltcG9ydCB7IGZvckVhY2hDb25jdXIgfSBmcm9tICcuL3NpZGUtZWZmZWN0cy5qcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy5qcydcblxuZXhwb3J0IGNvbnN0IG1hcFJlZHVjZXIgPSBjdXJyeSgoZm4sIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgeyBmaW5pc2gsIC4uLnJlc3RSZWR1Y2VyIH0gPSBub3JtYWxpemVSZWR1Y2VyKHJlZHVjZXIpXG4gIHJldHVybiB7IC4uLnJlc3RSZWR1Y2VyLCBmaW5pc2g6IHZhbHVlID0+IGZuKGZpbmlzaCh2YWx1ZSkpIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBtYXBBc3luY1JlZHVjZXIgPSBjdXJyeSgoZm4sIGFzeW5jUmVkdWNlcikgPT4ge1xuICBjb25zdCB7IGZpbmlzaCwgLi4ucmVzdEFzeW5jUmVkdWNlciB9ID0gbm9ybWFsaXplUmVkdWNlcihhc3luY1JlZHVjZXIpXG4gIHJldHVybiB7IC4uLnJlc3RBc3luY1JlZHVjZXIsIGZpbmlzaDogYXN5bmMgdmFsdWUgPT4gZm4oYXdhaXQgZmluaXNoKHZhbHVlKSkgfVxufSlcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVJlZHVjZXIgPSByZWR1Y2VyID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFJlZHVjZXIgPSB7IGZpbmlzaDogaWRlbnRpdHkgfVxuICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IGBmdW5jdGlvbmApIHtcbiAgICBub3JtYWxpemVkUmVkdWNlci5hZGQgPSByZWR1Y2VyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRSZWR1Y2VyXG4gIH1cblxuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgUkVEVUNFUl9NRVRIT0RfTkFNRVMpIHtcbiAgICBjb25zdCBtZXRob2QgPSByZWR1Y2VyW21ldGhvZE5hbWVdXG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgbm9ybWFsaXplZFJlZHVjZXJbbWV0aG9kTmFtZV0gPSBtZXRob2QuYmluZChyZWR1Y2VyKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkUmVkdWNlclxufVxuXG5jb25zdCBSRURVQ0VSX01FVEhPRF9OQU1FUyA9IFtgY3JlYXRlYCwgYGFkZGAsIGBnZXRgLCBgZmluaXNoYCwgYGNvbWJpbmVgXVxuXG5leHBvcnQgY29uc3QgTk9fRU5UUlkgPSB7fVxuXG5leHBvcnQgY29uc3QgcmVkdWNlID0gY3VycnkoKHJlZHVjZXIsIGl0ZXJhYmxlKSA9PiB7XG4gIGNvbnN0IHsgY3JlYXRlLCBhZGQsIGZpbmlzaCB9ID0gbm9ybWFsaXplUmVkdWNlcihyZWR1Y2VyKVxuICBpZiAoY3JlYXRlKSB7XG4gICAgcmV0dXJuIHJlZHVjZUludGVybmFsKGNyZWF0ZSgpLCBhZGQsIGZpbmlzaCwgaXRlcmFibGUpXG4gIH1cblxuICByZXR1cm4gY3JlYXRlSXRlcmFibGUoZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBbZmlyc3QsIHJlc3RdID0gbmV4dChpdGVyYWJsZSlcbiAgICB5aWVsZCogbWFwKHZhbHVlID0+IHJlZHVjZUludGVybmFsKHZhbHVlLCBhZGQsIGZpbmlzaCwgcmVzdCksIGZpcnN0KVxuICB9KVxufSlcblxuY29uc3QgcmVkdWNlSW50ZXJuYWwgPSAoYWNjLCBhZGQsIGZpbmlzaCwgaXRlcmFibGUpID0+IHtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgIGFjYyA9IGFkZChhY2MsIHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIGZpbmlzaChhY2MpXG59XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VBc3luYyA9IGN1cnJ5KChhc3luY1JlZHVjZXIsIGFzeW5jSXRlcmFibGUpID0+IHtcbiAgY29uc3QgeyBjcmVhdGUsIGFkZCwgY29tYmluZSwgZmluaXNoIH0gPSBub3JtYWxpemVSZWR1Y2VyKGFzeW5jUmVkdWNlcilcbiAgY29uc3QgY29uY3VySXRlcmFibGUgPSBhc0NvbmN1cihhc3luY0l0ZXJhYmxlKVxuICBpZiAoIWNyZWF0ZSkge1xuICAgIHJldHVybiBjcmVhdGVBc3luY0l0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCogYXdhaXQgcmVkdWNlQ29uY3VyV2l0aG91dENyZWF0ZShhZGQsIGZpbmlzaCwgY29uY3VySXRlcmFibGUpXG4gICAgfSlcbiAgfVxuICBpZiAoIWNvbWJpbmUpIHtcbiAgICByZXR1cm4gcmVkdWNlQ29uY3VyV2l0aENyZWF0ZVdpdGhvdXRDb21iaW5lKFxuICAgICAgY3JlYXRlLFxuICAgICAgYWRkLFxuICAgICAgZmluaXNoLFxuICAgICAgY29uY3VySXRlcmFibGUsXG4gICAgKVxuICB9XG4gIHJldHVybiByZWR1Y2VDb25jdXJXaXRoQ3JlYXRlV2l0aENvbWJpbmUoXG4gICAgY3JlYXRlLFxuICAgIGFkZCxcbiAgICBjb21iaW5lLFxuICAgIGZpbmlzaCxcbiAgICBjb25jdXJJdGVyYWJsZSxcbiAgKVxufSlcblxuZXhwb3J0IGNvbnN0IHJlZHVjZUNvbmN1ciA9IGN1cnJ5KChhc3luY1JlZHVjZXIsIGNvbmN1ckl0ZXJhYmxlKSA9PiB7XG4gIGNvbnN0IHsgY3JlYXRlLCBhZGQsIGNvbWJpbmUsIGZpbmlzaCB9ID0gbm9ybWFsaXplUmVkdWNlcihhc3luY1JlZHVjZXIpXG4gIGlmICghY3JlYXRlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbmN1ckl0ZXJhYmxlKGFzeW5jIGFwcGx5ID0+IHtcbiAgICAgIGNvbnN0IGFjY3MgPSBhd2FpdCByZWR1Y2VDb25jdXJXaXRob3V0Q3JlYXRlKGFkZCwgZmluaXNoLCBjb25jdXJJdGVyYWJsZSlcbiAgICAgIGlmIChhY2NzLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCBhcHBseShhY2NzWzBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgaWYgKCFjb21iaW5lKSB7XG4gICAgcmV0dXJuIHJlZHVjZUNvbmN1cldpdGhDcmVhdGVXaXRob3V0Q29tYmluZShcbiAgICAgIGNyZWF0ZSxcbiAgICAgIGFkZCxcbiAgICAgIGZpbmlzaCxcbiAgICAgIGNvbmN1ckl0ZXJhYmxlLFxuICAgIClcbiAgfVxuICByZXR1cm4gcmVkdWNlQ29uY3VyV2l0aENyZWF0ZVdpdGhDb21iaW5lKFxuICAgIGNyZWF0ZSxcbiAgICBhZGQsXG4gICAgY29tYmluZSxcbiAgICBmaW5pc2gsXG4gICAgY29uY3VySXRlcmFibGUsXG4gIClcbn0pXG5cbmNvbnN0IHJlZHVjZUNvbmN1cldpdGhvdXRDcmVhdGUgPSBhc3luYyAoYWRkLCBmaW5pc2gsIGNvbmN1ckl0ZXJhYmxlKSA9PiB7XG4gIGNvbnN0IGFjY3MgPSBbXVxuXG4gIGF3YWl0IGZvckVhY2hDb25jdXIoYXN5bmMgYWNjID0+IHtcbiAgICB3aGlsZSAoYWNjcy5sZW5ndGgpIHtcbiAgICAgIGFjYyA9IGF3YWl0IGFkZChhY2MsIGFjY3MucG9wKCkpXG4gICAgfVxuXG4gICAgYWNjcy5wdXNoKGFjYylcbiAgfSwgY29uY3VySXRlcmFibGUpXG5cbiAgcmV0dXJuIGFjY3MubGVuZ3RoID8gW2F3YWl0IGZpbmlzaChhY2NzWzBdKV0gOiBhY2NzXG59XG5cbmNvbnN0IHJlZHVjZUNvbmN1cldpdGhDcmVhdGVXaXRoQ29tYmluZSA9IGFzeW5jIChcbiAgY3JlYXRlLFxuICBhZGQsXG4gIGNvbWJpbmUsXG4gIGZpbmlzaCxcbiAgY29uY3VySXRlcmFibGUsXG4pID0+IHtcbiAgY29uc3QgYWNjcyA9IFtjcmVhdGUoKV1cblxuICBhd2FpdCBmb3JFYWNoQ29uY3VyKGFzeW5jIHZhbHVlID0+IHtcbiAgICBsZXQgYWNjID0gYXdhaXQgYWRkKGF3YWl0IChhY2NzLmxlbmd0aCA/IGFjY3MucG9wKCkgOiBjcmVhdGUoKSksIHZhbHVlKVxuXG4gICAgd2hpbGUgKGFjY3MubGVuZ3RoKSB7XG4gICAgICBhY2MgPSBhd2FpdCBjb21iaW5lKGFjYywgYWNjcy5wb3AoKSlcbiAgICB9XG5cbiAgICBhY2NzLnB1c2goYWNjKVxuICB9LCBjb25jdXJJdGVyYWJsZSlcblxuICByZXR1cm4gZmluaXNoKGF3YWl0IGFjY3NbMF0pXG59XG5cbmNvbnN0IHJlZHVjZUNvbmN1cldpdGhDcmVhdGVXaXRob3V0Q29tYmluZSA9IGFzeW5jIChcbiAgY3JlYXRlLFxuICBhZGQsXG4gIGZpbmlzaCxcbiAgY29uY3VySXRlcmFibGUsXG4pID0+IHtcbiAgbGV0IGFjY1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY3JlYXRlKCkpXG4gIGF3YWl0IGNvbmN1ckl0ZXJhYmxlW2NvbmN1ckl0ZXJhdG9yU3ltYm9sXSh2YWx1ZSA9PiB7XG4gICAgYWNjUHJvbWlzZSA9IGFjY1Byb21pc2UudGhlbihhY2MgPT4gYWRkKGFjYywgdmFsdWUpKVxuICB9KVxuICByZXR1cm4gZmluaXNoKGF3YWl0IGFjY1Byb21pc2UpXG59XG4iLCJpbXBvcnQgeyBjdXJyeSwgbm9vcCwgdGh1bmsgfSBmcm9tICcuLi9pbnRlcm5hbC9oZWxwZXJzLmpzJ1xuaW1wb3J0IHtcbiAgTk9fRU5UUlksXG4gIG5vcm1hbGl6ZVJlZHVjZXIsXG4gIHJlZHVjZSxcbiAgcmVkdWNlQXN5bmMsXG4gIHJlZHVjZUNvbmN1cixcbn0gZnJvbSAnLi9yZWR1Y2Vycy5qcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy5qcydcblxuZXhwb3J0IGNvbnN0IHRvQXJyYXkgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7XG4gICAgY3JlYXRlOiAoKSA9PiBbXSxcbiAgICBhZGQ6IChhY2MsIHZhbHVlKSA9PiB7XG4gICAgICBhY2MucHVzaCh2YWx1ZSlcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LFxuICB9KSxcbilcblxuY29uc3Qgc2V0QWRkID0gKGFjYywgdmFsdWUpID0+IGFjYy5hZGQodmFsdWUpXG5leHBvcnQgY29uc3QgdG9TZXQgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7IGNyZWF0ZTogKCkgPT4gbmV3IFNldCgpLCBhZGQ6IHNldEFkZCB9KSxcbilcbmV4cG9ydCBjb25zdCB0b1dlYWtTZXQgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7IGNyZWF0ZTogKCkgPT4gbmV3IFdlYWtTZXQoKSwgYWRkOiBzZXRBZGQgfSksXG4pXG5cbmV4cG9ydCBjb25zdCB0b09iamVjdCA9IHRodW5rKFxuICBub3JtYWxpemVSZWR1Y2VyKHtcbiAgICBjcmVhdGU6ICgpID0+ICh7fSksXG4gICAgYWRkOiAoYWNjLCBba2V5LCB2YWx1ZV0pID0+XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWNjLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9KSxcbiAgICBnZXQ6IChhY2MsIGtleSkgPT4gKGhhc093bi5jYWxsKG