@drincs/pixi-vn 1.5.13 → 1.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +8 -3
  2. package/dist/canvas.cjs +3 -2
  3. package/dist/canvas.d.cts +46 -105
  4. package/dist/canvas.d.ts +46 -105
  5. package/dist/canvas.mjs +3 -2
  6. package/dist/characters.cjs +2 -1
  7. package/dist/characters.mjs +2 -1
  8. package/dist/chunk-46QBDRUK.mjs +2 -0
  9. package/dist/chunk-52EK6LYW.mjs +2 -0
  10. package/dist/chunk-INJYRMJ3.mjs +2 -0
  11. package/dist/{chunk-TTRUPDAB.mjs → chunk-JJFD2BVW.mjs} +2 -1
  12. package/dist/chunk-JJFD2BVW.mjs.map +1 -0
  13. package/dist/chunk-OXRIVLY2.mjs +2 -0
  14. package/dist/chunk-SOFV7YZ5.mjs +2 -0
  15. package/dist/chunk-XZMYXKAY.mjs +2 -0
  16. package/dist/core.cjs +1 -0
  17. package/dist/core.d.cts +399 -0
  18. package/dist/core.d.ts +399 -0
  19. package/dist/core.mjs +1 -0
  20. package/dist/history.cjs +2 -1
  21. package/dist/history.d.cts +1 -1
  22. package/dist/history.d.ts +1 -1
  23. package/dist/history.mjs +2 -1
  24. package/dist/index.cjs +3 -2
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.cts +9 -10
  27. package/dist/index.d.ts +9 -10
  28. package/dist/index.mjs +3 -2
  29. package/dist/index.mjs.map +1 -0
  30. package/dist/motion.cjs +2 -0
  31. package/dist/motion.cjs.map +1 -0
  32. package/dist/motion.d.cts +96 -0
  33. package/dist/motion.d.ts +96 -0
  34. package/dist/motion.mjs +2 -0
  35. package/dist/motion.mjs.map +1 -0
  36. package/dist/narration.cjs +3 -2
  37. package/dist/narration.mjs +3 -2
  38. package/dist/pixi/browser.js +170 -167
  39. package/dist/sound.cjs +2 -1
  40. package/dist/sound.mjs +2 -1
  41. package/dist/storage.cjs +2 -1
  42. package/dist/storage.mjs +2 -1
  43. package/dist/vite-listener.cjs +2 -1
  44. package/dist/vite-listener.cjs.map +1 -0
  45. package/dist/vite-listener.mjs +2 -1
  46. package/dist/vite-listener.mjs.map +1 -0
  47. package/dist/vite.cjs +2 -1
  48. package/dist/vite.cjs.map +1 -0
  49. package/dist/vite.mjs +2 -1
  50. package/dist/vite.mjs.map +1 -0
  51. package/package.json +27 -10
  52. package/dist/chunk-6GO4XVS7.mjs +0 -1
  53. package/dist/chunk-6IVCTY6P.mjs +0 -1
  54. package/dist/chunk-GNJIUFU2.mjs +0 -1
  55. package/dist/chunk-HVEJJGVC.mjs +0 -1
  56. package/dist/chunk-XDBHD3IV.mjs +0 -1
  57. package/dist/chunk-XSN6P5JL.mjs +0 -0
  58. package/dist/unifier.cjs +0 -1
  59. package/dist/unifier.mjs +0 -1
package/dist/storage.cjs CHANGED
@@ -1 +1,2 @@
1
- 'use strict';var unifier=require('@drincs/pixi-vn/unifier');var Jt=Object.defineProperty;var Vt=l=>{throw TypeError(l)};var qt=(l,t,i)=>t in l?Jt(l,t,{enumerable:true,configurable:true,writable:true,value:i}):l[t]=i;var m=(l,t,i)=>qt(l,typeof t!="symbol"?t+"":t,i),Gt=(l,t,i)=>t.has(l)||Vt("Cannot "+i);var e=(l,t,i)=>(Gt(l,t,"read from private field"),i?i.call(l):t.get(l)),_=(l,t,i)=>t.has(l)?Vt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(l):t.set(l,i),c=(l,t,i,s)=>(Gt(l,t,"write to private field"),t.set(l,i),i),n=(l,t,i)=>(Gt(l,t,"access private method"),i);var At=(l,t,i,s)=>({set _(r){c(l,t,r);},get _(){return e(l,t,s)}});var ht;(r=>(r.log=(a,...o)=>console.log(`[Pixi\u2019VN] ${a}`,...o),r.warn=(a,...o)=>console.warn(`[Pixi\u2019VN] ${a}`,...o),r.error=(a,...o)=>console.error(`[Pixi\u2019VN] ${a}`,...o),r.info=(a,...o)=>console.info(`[Pixi\u2019VN] ${a}`,...o)))(ht||(ht={}));function xt(l){try{if(typeof l>"u")return l;let t=JSON.stringify(l);return JSON.parse(t)}catch(t){throw ht.error("Error creating exportable element",l,t),new Error("[Pixi\u2019VN] Error creating exportable element")}}var Qt=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Kt=new Set,Mt=typeof process=="object"&&process?process:{},Ht=(l,t,i,s)=>{typeof Mt.emitWarning=="function"?Mt.emitWarning(l,t,i,s):console.error(`[${i}] ${t}: ${l}`);},zt=globalThis.AbortController,Pt=globalThis.AbortSignal;if(typeof zt>"u"){Pt=class{constructor(){m(this,"onabort");m(this,"_onabort",[]);m(this,"reason");m(this,"aborted",false);}addEventListener(i,s){this._onabort.push(s);}},zt=class{constructor(){m(this,"signal",new Pt);t();}abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=true;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i);}}};let l=Mt.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=false,Ht("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t));};}var Zt=l=>!Kt.has(l);var it=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),$t=l=>it(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?Rt:null:null,Rt=class extends Array{constructor(l){super(l),this.fill(0);}},k,pt,kt=(k=class{constructor(t,i){m(this,"heap");m(this,"length");if(!e(k,pt))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(t),this.length=0;}static create(t){let i=$t(t);if(!i)return [];c(k,pt,true);let s=new k(t,i);return c(k,pt,false),s}push(t){this.heap[this.length++]=t;}pop(){return this.heap[--this.length]}},pt=new WeakMap,_(k,pt,false),k),jt,Yt,Y,U,K,nt,H,_t,mt,$,x,B,A,w,g,I,N,D,R,X,F,J,q,W,V,Q,at,G,St,h,Lt,lt,tt,Tt,P,Xt,ct,Et,vt,st,rt,Ut,Ft,Dt,b,Nt,yt,ot,Wt,bt,Bt=(bt=class{constructor(t){_(this,h);_(this,Y);_(this,U);_(this,K);_(this,nt);_(this,H);_(this,_t);_(this,mt);_(this,$);m(this,"ttl");m(this,"ttlResolution");m(this,"ttlAutopurge");m(this,"updateAgeOnGet");m(this,"updateAgeOnHas");m(this,"allowStale");m(this,"noDisposeOnSet");m(this,"noUpdateTTL");m(this,"maxEntrySize");m(this,"sizeCalculation");m(this,"noDeleteOnFetchRejection");m(this,"noDeleteOnStaleGet");m(this,"allowStaleOnFetchAbort");m(this,"allowStaleOnFetchRejection");m(this,"ignoreFetchAbort");_(this,x);_(this,B);_(this,A);_(this,w);_(this,g);_(this,I);_(this,N);_(this,D);_(this,R);_(this,X);_(this,F);_(this,J);_(this,q);_(this,W);_(this,V);_(this,Q);_(this,at);_(this,G);_(this,St);_(this,lt,()=>{});_(this,tt,()=>{});_(this,Tt,()=>{});_(this,P,()=>false);_(this,ct,t=>{});_(this,Et,(t,i,s)=>{});_(this,vt,(t,i,s,r)=>{if(s||r)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});m(this,jt,"LRUCache");let{max:i=0,ttl:s,ttlResolution:r=1,ttlAutopurge:a,updateAgeOnGet:o,updateAgeOnHas:f,allowStale:u,dispose:S,onInsert:M,disposeAfter:y,noDisposeOnSet:et,noUpdateTTL:j,maxSize:Z=0,maxEntrySize:T=0,sizeCalculation:E,fetchMethod:p,memoMethod:z,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:wt,ignoreFetchAbort:ut,perf:gt}=t;if(gt!==void 0&&typeof gt?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(c(this,$,gt??Qt),i!==0&&!it(i))throw new TypeError("max option must be a nonnegative integer");let dt=i?$t(i):Array;if(!dt)throw new Error("invalid max value: "+i);if(c(this,Y,i),c(this,U,Z),this.maxEntrySize=T||e(this,U),this.sizeCalculation=E,this.sizeCalculation){if(!e(this,U)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(z!==void 0&&typeof z!="function")throw new TypeError("memoMethod must be a function if defined");if(c(this,mt,z),p!==void 0&&typeof p!="function")throw new TypeError("fetchMethod must be a function if specified");if(c(this,_t,p),c(this,at,!!p),c(this,A,new Map),c(this,w,new Array(i).fill(void 0)),c(this,g,new Array(i).fill(void 0)),c(this,I,new dt(i)),c(this,N,new dt(i)),c(this,D,0),c(this,R,0),c(this,X,kt.create(i)),c(this,x,0),c(this,B,0),typeof S=="function"&&c(this,K,S),typeof M=="function"&&c(this,nt,M),typeof y=="function"?(c(this,H,y),c(this,F,[])):(c(this,H,void 0),c(this,F,void 0)),c(this,Q,!!e(this,K)),c(this,St,!!e(this,nt)),c(this,G,!!e(this,H)),this.noDisposeOnSet=!!et,this.noUpdateTTL=!!j,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!v,this.allowStaleOnFetchAbort=!!wt,this.ignoreFetchAbort=!!ut,this.maxEntrySize!==0){if(e(this,U)!==0&&!it(e(this,U)))throw new TypeError("maxSize must be a positive integer if specified");if(!it(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");n(this,h,Xt).call(this);}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!f,this.ttlResolution=it(r)||r===0?r:1,this.ttlAutopurge=!!a,this.ttl=s||0,this.ttl){if(!it(this.ttl))throw new TypeError("ttl must be a positive integer if specified");n(this,h,Lt).call(this);}if(e(this,Y)===0&&this.ttl===0&&e(this,U)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!e(this,Y)&&!e(this,U)){let It="LRU_CACHE_UNBOUNDED";Zt(It)&&(Kt.add(It),Ht("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",It,bt));}}get perf(){return e(this,$)}static unsafeExposeInternals(t){return {starts:e(t,q),ttls:e(t,W),autopurgeTimers:e(t,V),sizes:e(t,J),keyMap:e(t,A),keyList:e(t,w),valList:e(t,g),next:e(t,I),prev:e(t,N),get head(){return e(t,D)},get tail(){return e(t,R)},free:e(t,X),isBackgroundFetch:i=>{var s;return n(s=t,h,b).call(s,i)},backgroundFetch:(i,s,r,a)=>{var o;return n(o=t,h,Dt).call(o,i,s,r,a)},moveToTail:i=>{var s;return n(s=t,h,yt).call(s,i)},indexes:i=>{var s;return n(s=t,h,st).call(s,i)},rindexes:i=>{var s;return n(s=t,h,rt).call(s,i)},isStale:i=>{var s;return e(s=t,P).call(s,i)}}}get max(){return e(this,Y)}get maxSize(){return e(this,U)}get calculatedSize(){return e(this,B)}get size(){return e(this,x)}get fetchMethod(){return e(this,_t)}get memoMethod(){return e(this,mt)}get dispose(){return e(this,K)}get onInsert(){return e(this,nt)}get disposeAfter(){return e(this,H)}getRemainingTTL(t){return e(this,A).has(t)?1/0:0}*entries(){for(let t of n(this,h,st).call(this))e(this,g)[t]!==void 0&&e(this,w)[t]!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield [e(this,w)[t],e(this,g)[t]]);}*rentries(){for(let t of n(this,h,rt).call(this))e(this,g)[t]!==void 0&&e(this,w)[t]!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield [e(this,w)[t],e(this,g)[t]]);}*keys(){for(let t of n(this,h,st).call(this)){let i=e(this,w)[t];i!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield i);}}*rkeys(){for(let t of n(this,h,rt).call(this)){let i=e(this,w)[t];i!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield i);}}*values(){for(let t of n(this,h,st).call(this))e(this,g)[t]!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield e(this,g)[t]);}*rvalues(){for(let t of n(this,h,rt).call(this))e(this,g)[t]!==void 0&&!n(this,h,b).call(this,e(this,g)[t])&&(yield e(this,g)[t]);}[(Yt=Symbol.iterator,jt=Symbol.toStringTag,Yt)](){return this.entries()}find(t,i={}){for(let s of n(this,h,st).call(this)){let r=e(this,g)[s],a=n(this,h,b).call(this,r)?r.__staleWhileFetching:r;if(a!==void 0&&t(a,e(this,w)[s],this))return this.get(e(this,w)[s],i)}}forEach(t,i=this){for(let s of n(this,h,st).call(this)){let r=e(this,g)[s],a=n(this,h,b).call(this,r)?r.__staleWhileFetching:r;a!==void 0&&t.call(i,a,e(this,w)[s],this);}}rforEach(t,i=this){for(let s of n(this,h,rt).call(this)){let r=e(this,g)[s],a=n(this,h,b).call(this,r)?r.__staleWhileFetching:r;a!==void 0&&t.call(i,a,e(this,w)[s],this);}}purgeStale(){let t=false;for(let i of n(this,h,rt).call(this,{allowStale:true}))e(this,P).call(this,i)&&(n(this,h,ot).call(this,e(this,w)[i],"expire"),t=true);return t}info(t){let i=e(this,A).get(t);if(i===void 0)return;let s=e(this,g)[i],r=n(this,h,b).call(this,s)?s.__staleWhileFetching:s;if(r===void 0)return;let a={value:r};if(e(this,W)&&e(this,q)){let o=e(this,W)[i],f=e(this,q)[i];if(o&&f){let u=o-(e(this,$).now()-f);a.ttl=u,a.start=Date.now();}}return e(this,J)&&(a.size=e(this,J)[i]),a}dump(){let t=[];for(let i of n(this,h,st).call(this,{allowStale:true})){let s=e(this,w)[i],r=e(this,g)[i],a=n(this,h,b).call(this,r)?r.__staleWhileFetching:r;if(a===void 0||s===void 0)continue;let o={value:a};if(e(this,W)&&e(this,q)){o.ttl=e(this,W)[i];let f=e(this,$).now()-e(this,q)[i];o.start=Math.floor(Date.now()-f);}e(this,J)&&(o.size=e(this,J)[i]),t.unshift([s,o]);}return t}load(t){this.clear();for(let[i,s]of t){if(s.start){let r=Date.now()-s.start;s.start=e(this,$).now()-r;}this.set(i,s.value,s);}}set(t,i,s={}){var et,j,Z,T;if(i===void 0)return this.delete(t),this;let{ttl:r=this.ttl,start:a,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:f=this.sizeCalculation,status:u}=s,{noUpdateTTL:S=this.noUpdateTTL}=s,M=e(this,vt).call(this,t,i,s.size||0,f);if(this.maxEntrySize&&M>this.maxEntrySize)return u&&(u.set="miss",u.maxEntrySizeExceeded=true),n(this,h,ot).call(this,t,"set"),this;let y=e(this,x)===0?void 0:e(this,A).get(t);if(y===void 0)y=e(this,x)===0?e(this,R):e(this,X).length!==0?e(this,X).pop():e(this,x)===e(this,Y)?n(this,h,Ft).call(this,false):e(this,x),e(this,w)[y]=t,e(this,g)[y]=i,e(this,A).set(t,y),e(this,I)[e(this,R)]=y,e(this,N)[y]=e(this,R),c(this,R,y),At(this,x)._++,e(this,Et).call(this,y,M,u),u&&(u.set="add"),S=false,e(this,St)&&((et=e(this,nt))==null||et.call(this,i,t,"add"));else {n(this,h,yt).call(this,y);let E=e(this,g)[y];if(i!==E){if(e(this,at)&&n(this,h,b).call(this,E)){E.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:p}=E;p!==void 0&&!o&&(e(this,Q)&&((j=e(this,K))==null||j.call(this,p,t,"set")),e(this,G)&&e(this,F)?.push([p,t,"set"]));}else o||(e(this,Q)&&((Z=e(this,K))==null||Z.call(this,E,t,"set")),e(this,G)&&e(this,F)?.push([E,t,"set"]));if(e(this,ct).call(this,y),e(this,Et).call(this,y,M,u),e(this,g)[y]=i,u){u.set="replace";let p=E&&n(this,h,b).call(this,E)?E.__staleWhileFetching:E;p!==void 0&&(u.oldValue=p);}}else u&&(u.set="update");e(this,St)&&this.onInsert?.(i,t,i===E?"update":"replace");}if(r!==0&&!e(this,W)&&n(this,h,Lt).call(this),e(this,W)&&(S||e(this,Tt).call(this,y,r,a),u&&e(this,tt).call(this,u,y)),!o&&e(this,G)&&e(this,F)){let E=e(this,F),p;for(;p=E?.shift();)(T=e(this,H))==null||T.call(this,...p);}return this}pop(){var t;try{for(;e(this,x);){let i=e(this,g)[e(this,D)];if(n(this,h,Ft).call(this,!0),n(this,h,b).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(e(this,G)&&e(this,F)){let i=e(this,F),s;for(;s=i?.shift();)(t=e(this,H))==null||t.call(this,...s);}}}has(t,i={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:r}=i,a=e(this,A).get(t);if(a!==void 0){let o=e(this,g)[a];if(n(this,h,b).call(this,o)&&o.__staleWhileFetching===void 0)return false;if(e(this,P).call(this,a))r&&(r.has="stale",e(this,tt).call(this,r,a));else return s&&e(this,lt).call(this,a),r&&(r.has="hit",e(this,tt).call(this,r,a)),true}else r&&(r.has="miss");return false}peek(t,i={}){let{allowStale:s=this.allowStale}=i,r=e(this,A).get(t);if(r===void 0||!s&&e(this,P).call(this,r))return;let a=e(this,g)[r];return n(this,h,b).call(this,a)?a.__staleWhileFetching:a}async fetch(t,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:f=this.noDisposeOnSet,size:u=0,sizeCalculation:S=this.sizeCalculation,noUpdateTTL:M=this.noUpdateTTL,noDeleteOnFetchRejection:y=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:et=this.allowStaleOnFetchRejection,ignoreFetchAbort:j=this.ignoreFetchAbort,allowStaleOnFetchAbort:Z=this.allowStaleOnFetchAbort,context:T,forceRefresh:E=false,status:p,signal:z}=i;if(!e(this,at))return p&&(p.fetch="get"),this.get(t,{allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:a,status:p});let L={allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:a,ttl:o,noDisposeOnSet:f,size:u,sizeCalculation:S,noUpdateTTL:M,noDeleteOnFetchRejection:y,allowStaleOnFetchRejection:et,allowStaleOnFetchAbort:Z,ignoreFetchAbort:j,status:p,signal:z},C=e(this,A).get(t);if(C===void 0){p&&(p.fetch="miss");let v=n(this,h,Dt).call(this,t,C,L,T);return v.__returned=v}else {let v=e(this,g)[C];if(n(this,h,b).call(this,v)){let dt=s&&v.__staleWhileFetching!==void 0;return p&&(p.fetch="inflight",dt&&(p.returnedStale=true)),dt?v.__staleWhileFetching:v.__returned=v}let wt=e(this,P).call(this,C);if(!E&&!wt)return p&&(p.fetch="hit"),n(this,h,yt).call(this,C),r&&e(this,lt).call(this,C),p&&e(this,tt).call(this,p,C),v;let ut=n(this,h,Dt).call(this,t,C,L,T),gt=ut.__staleWhileFetching!==void 0&&s;return p&&(p.fetch=wt?"stale":"refresh",gt&&wt&&(p.returnedStale=true)),gt?ut.__staleWhileFetching:ut.__returned=ut}}async forceFetch(t,i={}){let s=await this.fetch(t,i);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(t,i={}){let s=e(this,mt);if(!s)throw new Error("no memoMethod provided to constructor");let{context:r,forceRefresh:a,...o}=i,f=this.get(t,o);if(!a&&f!==void 0)return f;let u=s(t,f,{options:o,context:r});return this.set(t,u,o),u}get(t,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,status:o}=i,f=e(this,A).get(t);if(f!==void 0){let u=e(this,g)[f],S=n(this,h,b).call(this,u);return o&&e(this,tt).call(this,o,f),e(this,P).call(this,f)?(o&&(o.get="stale"),S?(o&&s&&u.__staleWhileFetching!==void 0&&(o.returnedStale=true),s?u.__staleWhileFetching:void 0):(a||n(this,h,ot).call(this,t,"expire"),o&&s&&(o.returnedStale=true),s?u:void 0)):(o&&(o.get="hit"),S?u.__staleWhileFetching:(n(this,h,yt).call(this,f),r&&e(this,lt).call(this,f),u))}else o&&(o.get="miss");}delete(t){return n(this,h,ot).call(this,t,"delete")}clear(){return n(this,h,Wt).call(this,"delete")}},Y=new WeakMap,U=new WeakMap,K=new WeakMap,nt=new WeakMap,H=new WeakMap,_t=new WeakMap,mt=new WeakMap,$=new WeakMap,x=new WeakMap,B=new WeakMap,A=new WeakMap,w=new WeakMap,g=new WeakMap,I=new WeakMap,N=new WeakMap,D=new WeakMap,R=new WeakMap,X=new WeakMap,F=new WeakMap,J=new WeakMap,q=new WeakMap,W=new WeakMap,V=new WeakMap,Q=new WeakMap,at=new WeakMap,G=new WeakMap,St=new WeakMap,h=new WeakSet,Lt=function(){let t=new Rt(e(this,Y)),i=new Rt(e(this,Y));c(this,W,t),c(this,q,i);let s=this.ttlAutopurge?new Array(e(this,Y)):void 0;c(this,V,s),c(this,Tt,(o,f,u=e(this,$).now())=>{if(i[o]=f!==0?u:0,t[o]=f,s?.[o]&&(clearTimeout(s[o]),s[o]=void 0),f!==0&&s){let S=setTimeout(()=>{e(this,P).call(this,o)&&n(this,h,ot).call(this,e(this,w)[o],"expire");},f+1);S.unref&&S.unref(),s[o]=S;}}),c(this,lt,o=>{i[o]=t[o]!==0?e(this,$).now():0;}),c(this,tt,(o,f)=>{if(t[f]){let u=t[f],S=i[f];if(!u||!S)return;o.ttl=u,o.start=S,o.now=r||a();let M=o.now-S;o.remainingTTL=u-M;}});let r=0,a=()=>{let o=e(this,$).now();if(this.ttlResolution>0){r=o;let f=setTimeout(()=>r=0,this.ttlResolution);f.unref&&f.unref();}return o};this.getRemainingTTL=o=>{let f=e(this,A).get(o);if(f===void 0)return 0;let u=t[f],S=i[f];if(!u||!S)return 1/0;let M=(r||a())-S;return u-M},c(this,P,o=>{let f=i[o],u=t[o];return !!u&&!!f&&(r||a())-f>u});},lt=new WeakMap,tt=new WeakMap,Tt=new WeakMap,P=new WeakMap,Xt=function(){let t=new Rt(e(this,Y));c(this,B,0),c(this,J,t),c(this,ct,i=>{c(this,B,e(this,B)-t[i]),t[i]=0;}),c(this,vt,(i,s,r,a)=>{if(n(this,h,b).call(this,s))return 0;if(!it(r))if(a){if(typeof a!="function")throw new TypeError("sizeCalculation must be a function");if(r=a(s,i),!it(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return r}),c(this,Et,(i,s,r)=>{if(t[i]=s,e(this,U)){let a=e(this,U)-t[i];for(;e(this,B)>a;)n(this,h,Ft).call(this,true);}c(this,B,e(this,B)+t[i]),r&&(r.entrySize=s,r.totalCalculatedSize=e(this,B));});},ct=new WeakMap,Et=new WeakMap,vt=new WeakMap,st=function*({allowStale:t=this.allowStale}={}){if(e(this,x))for(let i=e(this,R);!(!n(this,h,Ut).call(this,i)||((t||!e(this,P).call(this,i))&&(yield i),i===e(this,D)));)i=e(this,N)[i];},rt=function*({allowStale:t=this.allowStale}={}){if(e(this,x))for(let i=e(this,D);!(!n(this,h,Ut).call(this,i)||((t||!e(this,P).call(this,i))&&(yield i),i===e(this,R)));)i=e(this,I)[i];},Ut=function(t){return t!==void 0&&e(this,A).get(e(this,w)[t])===t},Ft=function(t){var a;let i=e(this,D),s=e(this,w)[i],r=e(this,g)[i];return e(this,at)&&n(this,h,b).call(this,r)?r.__abortController.abort(new Error("evicted")):(e(this,Q)||e(this,G))&&(e(this,Q)&&((a=e(this,K))==null||a.call(this,r,s,"evict")),e(this,G)&&e(this,F)?.push([r,s,"evict"])),e(this,ct).call(this,i),e(this,V)?.[i]&&(clearTimeout(e(this,V)[i]),e(this,V)[i]=void 0),t&&(e(this,w)[i]=void 0,e(this,g)[i]=void 0,e(this,X).push(i)),e(this,x)===1?(c(this,D,c(this,R,0)),e(this,X).length=0):c(this,D,e(this,I)[i]),e(this,A).delete(s),At(this,x)._--,i},Dt=function(t,i,s,r){let a=i===void 0?void 0:e(this,g)[i];if(n(this,h,b).call(this,a))return a;let o=new zt,{signal:f}=s;f?.addEventListener("abort",()=>o.abort(f.reason),{signal:o.signal});let u={signal:o.signal,options:s,context:r},S=(T,E=false)=>{let{aborted:p}=o.signal,z=s.ignoreFetchAbort&&T!==void 0,L=s.ignoreFetchAbort||!!(s.allowStaleOnFetchAbort&&T!==void 0);if(s.status&&(p&&!E?(s.status.fetchAborted=true,s.status.fetchError=o.signal.reason,z&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),p&&!z&&!E)return y(o.signal.reason,L);let C=j,v=e(this,g)[i];return (v===j||z&&E&&v===void 0)&&(T===void 0?C.__staleWhileFetching!==void 0?e(this,g)[i]=C.__staleWhileFetching:n(this,h,ot).call(this,t,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(t,T,u.options))),T},M=T=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=T),y(T,false)),y=(T,E)=>{let{aborted:p}=o.signal,z=p&&s.allowStaleOnFetchAbort,L=z||s.allowStaleOnFetchRejection,C=L||s.noDeleteOnFetchRejection,v=j;if(e(this,g)[i]===j&&(!C||!E&&v.__staleWhileFetching===void 0?n(this,h,ot).call(this,t,"fetch"):z||(e(this,g)[i]=v.__staleWhileFetching)),L)return s.status&&v.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),v.__staleWhileFetching;if(v.__returned===v)throw T},et=(T,E)=>{var z;let p=(z=e(this,_t))==null?void 0:z.call(this,t,a,u);p&&p instanceof Promise&&p.then(L=>T(L===void 0?void 0:L),E),o.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(T(void 0),s.allowStaleOnFetchAbort&&(T=L=>S(L,true)));});};s.status&&(s.status.fetchDispatched=true);let j=new Promise(et).then(S,M),Z=Object.assign(j,{__abortController:o,__staleWhileFetching:a,__returned:void 0});return i===void 0?(this.set(t,Z,{...u.options,status:void 0}),i=e(this,A).get(t)):e(this,g)[i]=Z,Z},b=function(t){if(!e(this,at))return false;let i=t;return !!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof zt},Nt=function(t,i){e(this,N)[i]=t,e(this,I)[t]=i;},yt=function(t){t!==e(this,R)&&(t===e(this,D)?c(this,D,e(this,I)[t]):n(this,h,Nt).call(this,e(this,N)[t],e(this,I)[t]),n(this,h,Nt).call(this,e(this,R),t),c(this,R,t));},ot=function(t,i){var r,a;let s=false;if(e(this,x)!==0){let o=e(this,A).get(t);if(o!==void 0)if(e(this,V)?.[o]&&(clearTimeout(e(this,V)?.[o]),e(this,V)[o]=void 0),s=true,e(this,x)===1)n(this,h,Wt).call(this,i);else {e(this,ct).call(this,o);let f=e(this,g)[o];if(n(this,h,b).call(this,f)?f.__abortController.abort(new Error("deleted")):(e(this,Q)||e(this,G))&&(e(this,Q)&&((r=e(this,K))==null||r.call(this,f,t,i)),e(this,G)&&e(this,F)?.push([f,t,i])),e(this,A).delete(t),e(this,w)[o]=void 0,e(this,g)[o]=void 0,o===e(this,R))c(this,R,e(this,N)[o]);else if(o===e(this,D))c(this,D,e(this,I)[o]);else {let u=e(this,N)[o];e(this,I)[u]=e(this,I)[o];let S=e(this,I)[o];e(this,N)[S]=e(this,N)[o];}At(this,x)._--,e(this,X).push(o);}}if(e(this,G)&&e(this,F)?.length){let o=e(this,F),f;for(;f=o?.shift();)(a=e(this,H))==null||a.call(this,...f);}return s},Wt=function(t){var i,s;for(let r of n(this,h,rt).call(this,{allowStale:true})){let a=e(this,g)[r];if(n(this,h,b).call(this,a))a.__abortController.abort(new Error("deleted"));else {let o=e(this,w)[r];e(this,Q)&&((i=e(this,K))==null||i.call(this,a,o,t)),e(this,G)&&e(this,F)?.push([a,o,t]);}}if(e(this,A).clear(),e(this,g).fill(void 0),e(this,w).fill(void 0),e(this,W)&&e(this,q)){e(this,W).fill(0),e(this,q).fill(0);for(let r of e(this,V)??[])r!==void 0&&clearTimeout(r);e(this,V)?.fill(void 0);}if(e(this,J)&&e(this,J).fill(0),c(this,D,0),c(this,R,0),e(this,X).length=0,c(this,B,0),c(this,x,0),e(this,G)&&e(this,F)){let r=e(this,F),a;for(;a=r?.shift();)(s=e(this,H))==null||s.call(this,...a);}},bt);var ft=class{constructor(t){m(this,"cache");m(this,"map",new Map);this.cache=new Bt({max:t.cacheSize}),this.map=new Map;}get[Symbol.iterator](){return this.map[Symbol.iterator]}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}clear(){return this.cache.clear(),this.map.clear()}delete(t){let i=this.map.delete(t);return i&&this.cache.delete(t),i}get forEach(){return this.map.forEach}get(t){let i=this.cache.get(t);return i||this.map.get(t)}has(t){return this.map.has(t)}set(t,i){return this.map.set(t,i),this.cache.set(t,i),this}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}};var O=class O{constructor(){}static clearOldTempVariables(t){O.tempStorageDeadlines.forEach((i,s)=>{i>t&&(O.tempStorage.delete(s),O.tempStorageDeadlines.delete(s),O.storage.cache.delete(s));});}static setVariable(t,i){let s=O.tempStorage.has(t);i==null?(O.storage.map.delete(t),!s&&O.storage.cache.delete(t)):(O.storage.map.set(t,i),!s&&O.storage.cache.set(t,i));}static getVariable(t){let i=O.storage.cache.get(t);return i===void 0&&(i=O.tempStorage.get(t)),i===void 0&&(i=O.storage.map.get(t)),i===void 0&&(i=O.default.get(t)),xt(i)}static removeVariable(t){O.storage.delete(t);}static setFlag(t,i){if(i)this.flags.includes(t)||this.flags.push(t);else {let s=this.flags.indexOf(t);s>-1&&this.flags.splice(s,1);}}static getFlag(t){return this.flags.includes(t)}};m(O,"storage",new ft({cacheSize:20})),m(O,"default",new ft({cacheSize:20})),m(O,"flags",Array()),m(O,"tempStorage",new Map),m(O,"tempStorageDeadlines",new Map);var d=O;var Ot=class{get storage(){return d.storage.map}get cache(){return d.storage.cache}get flags(){return d.flags}get tempStorage(){return d.tempStorage}get tempStorageDeadlines(){return d.tempStorageDeadlines}set default(t){Object.entries(t).forEach(([i,s])=>{d.default.set(i,s);});}set(t,i){return d.setVariable(t,i)}get(t){return d.getVariable(t)}remove(t){return d.removeVariable(t)}setTempVariable(t,i){if(i==null){this.removeTempVariable(t);return}else d.tempStorage.set(t,i),d.storage.cache.set(t,i),d.tempStorageDeadlines.has(t)||d.tempStorageDeadlines.set(t,unifier.GameUnifier.openedLabels);}removeTempVariable(t){d.tempStorage.has(t)&&(d.tempStorage.delete(t),d.tempStorageDeadlines.delete(t),d.storage.cache.delete(t));}setFlag(t,i){return d.setFlag(t,i)}getFlag(t){return d.getFlag(t)}clear(){this.storage.clear(),this.cache.clear(),d.flags=[],d.tempStorage.clear(),d.tempStorageDeadlines.clear();}export(){let t=[];[...this.storage.keys()].forEach(r=>{t.push({key:r,value:this.storage.get(r)});});let i=[];[...d.tempStorage.keys()].forEach(r=>{i.push({key:r,value:d.tempStorage.get(r)});});let s=[];return [...d.tempStorageDeadlines.keys()].forEach(r=>{s.push({key:r,value:d.tempStorageDeadlines.get(r)});}),xt({base:t,temp:i,tempDeadlines:s,flags:d.flags})}restore(t){this.clear();try{t?(Array.isArray(t)&&t.forEach(i=>{if(i.key==="___temp_storage___"){let s=i.value;Object.entries(s).forEach(([r,a])=>{d.tempStorage.set(r,a);});}else if(i.key==="___temp_storage_deadlines___"){let s=i.value;Object.entries(s).forEach(([r,a])=>{d.tempStorageDeadlines.set(r,a);});}else i.key==="___flags___"?i.value.forEach(r=>{d.flags.push(r);}):this.storage.set(i.key,i.value);}),"base"in t&&"temp"in t&&"tempDeadlines"in t?(t.base?.forEach(i=>{this.storage.set(i.key,i.value);}),t.temp?.forEach(i=>{d.tempStorage.set(i.key,i.value);}),t.tempDeadlines?.forEach(i=>{d.tempStorageDeadlines.set(i.key,i.value);})):Object.entries(t).forEach(([i,s])=>{i==="___temp_storage___"?Object.entries(s).forEach(([r,a])=>{d.tempStorage.set(r,a);}):i==="___temp_storage_deadlines___"?Object.entries(s).forEach(([r,a])=>{d.tempStorageDeadlines.set(r,a);}):i==="___flags___"?s.forEach(r=>{d.flags.push(r);}):this.storage.set(i,s);})):ht.warn("No storage data found");}catch(i){ht.error("Error importing data",i);}}};var Ct=class{constructor(t,i){m(this,"id");m(this,"categoryId");this.categoryId=t,this.id=i;}setStorageProperty(t,i){let s=d.getVariable(this.categoryId);s||(s={}),s.hasOwnProperty(this.id)||(s[this.id]={}),i==null?s[this.id].hasOwnProperty(t)&&delete s[this.id][t]:s[this.id]={...s[this.id],[t]:i},Object.keys(s[this.id]).length===0&&delete s[this.id],d.setVariable(this.categoryId,s);}getStorageProperty(t,i=this.id){let s=d.getVariable(this.categoryId);if(s&&s.hasOwnProperty(i)&&s[i].hasOwnProperty(t))return s[i][t]}};var ee={CURRENT_DIALOGUE_MEMORY_KEY:"___current_dialogue_memory___",LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY:"___last_dialogue_added_in_step_memory___",CURRENT_MENU_OPTIONS_MEMORY_KEY:"___current_menu_options_memory___",LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY:"___last_menu_options_added_in_step_memory___",CURRENT_INPUT_VALUE_MEMORY_KEY:"_input_value_",LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY:"___last_input_added_in_step_memory___",CURRENT_INPUT_INFO_MEMORY_KEY:"___current_input_info_memory___",CHARACTER_CATEGORY_KEY:"___character___",ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY:"___glue___",OPENED_LABELS_COUNTER_KEY:"___opened_labels_counter___",ALL_CHOICES_MADE_KEY:"___all_choices_made___",CURRENT_STEP_TIMES_COUNTER_KEY:"___current_step_times_counter___",LAST_STEP_GLUED:"___last_step_glued___"};var De=new Ot;exports.SYSTEM_RESERVED_STORAGE_KEYS=ee;exports.StorageManagerStatic=d;exports.StoredClassModel=Ct;exports.storage=De;
1
+ 'use strict';var core=require('@drincs/pixi-vn/core');var Jt=Object.defineProperty;var Vt=f=>{throw TypeError(f)};var qt=(f,t,i)=>t in f?Jt(f,t,{enumerable:true,configurable:true,writable:true,value:i}):f[t]=i;var m=(f,t,i)=>qt(f,typeof t!="symbol"?t+"":t,i),Gt=(f,t,i)=>t.has(f)||Vt("Cannot "+i);var e=(f,t,i)=>(Gt(f,t,"read from private field"),i?i.call(f):t.get(f)),_=(f,t,i)=>t.has(f)?Vt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(f):t.set(f,i),u=(f,t,i,s)=>(Gt(f,t,"write to private field"),t.set(f,i),i),h=(f,t,i)=>(Gt(f,t,"access private method"),i);var At=(f,t,i,s)=>({set _(r){u(f,t,r);},get _(){return e(f,t,s)}});var nt;(r=>(r.log=(o,...a)=>console.log(`[Pixi\u2019VN] ${o}`,...a),r.warn=(o,...a)=>console.warn(`[Pixi\u2019VN] ${o}`,...a),r.error=(o,...a)=>console.error(`[Pixi\u2019VN] ${o}`,...a),r.info=(o,...a)=>console.info(`[Pixi\u2019VN] ${o}`,...a)))(nt||(nt={}));function xt(f){try{if(typeof f>"u")return f;let t=JSON.stringify(f);return JSON.parse(t)}catch(t){throw nt.error("Error creating exportable element",f,t),new core.PixiError("not_json_serializable","Error creating exportable element")}}var Zt=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Kt=new Set,Mt=typeof process=="object"&&process?process:{},Ht=(f,t,i,s)=>{typeof Mt.emitWarning=="function"?Mt.emitWarning(f,t,i,s):console.error(`[${i}] ${t}: ${f}`);},zt=globalThis.AbortController,Pt=globalThis.AbortSignal;if(typeof zt>"u"){Pt=class{constructor(){m(this,"onabort");m(this,"_onabort",[]);m(this,"reason");m(this,"aborted",false);}addEventListener(i,s){this._onabort.push(s);}},zt=class{constructor(){m(this,"signal",new Pt);t();}abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=true;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i);}}};let f=Mt.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{f&&(f=false,Ht("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t));};}var kt=f=>!Kt.has(f);var it=f=>f&&f===Math.floor(f)&&f>0&&isFinite(f),$t=f=>it(f)?f<=Math.pow(2,8)?Uint8Array:f<=Math.pow(2,16)?Uint16Array:f<=Math.pow(2,32)?Uint32Array:f<=Number.MAX_SAFE_INTEGER?Rt:null:null,Rt=class extends Array{constructor(f){super(f),this.fill(0);}},k,pt,te=(k=class{constructor(t,i){m(this,"heap");m(this,"length");if(!e(k,pt))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(t),this.length=0;}static create(t){let i=$t(t);if(!i)return [];u(k,pt,true);let s=new k(t,i);return u(k,pt,false),s}push(t){this.heap[this.length++]=t;}pop(){return this.heap[--this.length]}},pt=new WeakMap,_(k,pt,false),k),jt,Yt,Y,U,K,ht,H,_t,mt,$,x,B,A,y,g,G,N,z,R,X,F,J,q,W,V,Q,at,M,St,n,Lt,lt,tt,Tt,P,Xt,ct,Et,vt,st,rt,Ut,Ft,Dt,w,Nt,yt,ot,Wt,bt,Bt=(bt=class{constructor(t){_(this,n);_(this,Y);_(this,U);_(this,K);_(this,ht);_(this,H);_(this,_t);_(this,mt);_(this,$);m(this,"ttl");m(this,"ttlResolution");m(this,"ttlAutopurge");m(this,"updateAgeOnGet");m(this,"updateAgeOnHas");m(this,"allowStale");m(this,"noDisposeOnSet");m(this,"noUpdateTTL");m(this,"maxEntrySize");m(this,"sizeCalculation");m(this,"noDeleteOnFetchRejection");m(this,"noDeleteOnStaleGet");m(this,"allowStaleOnFetchAbort");m(this,"allowStaleOnFetchRejection");m(this,"ignoreFetchAbort");_(this,x);_(this,B);_(this,A);_(this,y);_(this,g);_(this,G);_(this,N);_(this,z);_(this,R);_(this,X);_(this,F);_(this,J);_(this,q);_(this,W);_(this,V);_(this,Q);_(this,at);_(this,M);_(this,St);_(this,lt,()=>{});_(this,tt,()=>{});_(this,Tt,()=>{});_(this,P,()=>false);_(this,ct,t=>{});_(this,Et,(t,i,s)=>{});_(this,vt,(t,i,s,r)=>{if(s||r)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});m(this,jt,"LRUCache");let{max:i=0,ttl:s,ttlResolution:r=1,ttlAutopurge:o,updateAgeOnGet:a,updateAgeOnHas:l,allowStale:c,dispose:S,onInsert:D,disposeAfter:E,noDisposeOnSet:et,noUpdateTTL:j,maxSize:Z=0,maxEntrySize:T=0,sizeCalculation:b,fetchMethod:p,memoMethod:C,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:I,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:wt,ignoreFetchAbort:ut,perf:gt}=t;if(gt!==void 0&&typeof gt?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(u(this,$,gt??Zt),i!==0&&!it(i))throw new TypeError("max option must be a nonnegative integer");let dt=i?$t(i):Array;if(!dt)throw new Error("invalid max value: "+i);if(u(this,Y,i),u(this,U,Z),this.maxEntrySize=T||e(this,U),this.sizeCalculation=b,this.sizeCalculation){if(!e(this,U)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(C!==void 0&&typeof C!="function")throw new TypeError("memoMethod must be a function if defined");if(u(this,mt,C),p!==void 0&&typeof p!="function")throw new TypeError("fetchMethod must be a function if specified");if(u(this,_t,p),u(this,at,!!p),u(this,A,new Map),u(this,y,new Array(i).fill(void 0)),u(this,g,new Array(i).fill(void 0)),u(this,G,new dt(i)),u(this,N,new dt(i)),u(this,z,0),u(this,R,0),u(this,X,te.create(i)),u(this,x,0),u(this,B,0),typeof S=="function"&&u(this,K,S),typeof D=="function"&&u(this,ht,D),typeof E=="function"?(u(this,H,E),u(this,F,[])):(u(this,H,void 0),u(this,F,void 0)),u(this,Q,!!e(this,K)),u(this,St,!!e(this,ht)),u(this,M,!!e(this,H)),this.noDisposeOnSet=!!et,this.noUpdateTTL=!!j,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!v,this.allowStaleOnFetchAbort=!!wt,this.ignoreFetchAbort=!!ut,this.maxEntrySize!==0){if(e(this,U)!==0&&!it(e(this,U)))throw new TypeError("maxSize must be a positive integer if specified");if(!it(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");h(this,n,Xt).call(this);}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!I,this.updateAgeOnGet=!!a,this.updateAgeOnHas=!!l,this.ttlResolution=it(r)||r===0?r:1,this.ttlAutopurge=!!o,this.ttl=s||0,this.ttl){if(!it(this.ttl))throw new TypeError("ttl must be a positive integer if specified");h(this,n,Lt).call(this);}if(e(this,Y)===0&&this.ttl===0&&e(this,U)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!e(this,Y)&&!e(this,U)){let It="LRU_CACHE_UNBOUNDED";kt(It)&&(Kt.add(It),Ht("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",It,bt));}}get perf(){return e(this,$)}static unsafeExposeInternals(t){return {starts:e(t,q),ttls:e(t,W),autopurgeTimers:e(t,V),sizes:e(t,J),keyMap:e(t,A),keyList:e(t,y),valList:e(t,g),next:e(t,G),prev:e(t,N),get head(){return e(t,z)},get tail(){return e(t,R)},free:e(t,X),isBackgroundFetch:i=>{var s;return h(s=t,n,w).call(s,i)},backgroundFetch:(i,s,r,o)=>{var a;return h(a=t,n,Dt).call(a,i,s,r,o)},moveToTail:i=>{var s;return h(s=t,n,yt).call(s,i)},indexes:i=>{var s;return h(s=t,n,st).call(s,i)},rindexes:i=>{var s;return h(s=t,n,rt).call(s,i)},isStale:i=>{var s;return e(s=t,P).call(s,i)}}}get max(){return e(this,Y)}get maxSize(){return e(this,U)}get calculatedSize(){return e(this,B)}get size(){return e(this,x)}get fetchMethod(){return e(this,_t)}get memoMethod(){return e(this,mt)}get dispose(){return e(this,K)}get onInsert(){return e(this,ht)}get disposeAfter(){return e(this,H)}getRemainingTTL(t){return e(this,A).has(t)?1/0:0}*entries(){for(let t of h(this,n,st).call(this))e(this,g)[t]!==void 0&&e(this,y)[t]!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield [e(this,y)[t],e(this,g)[t]]);}*rentries(){for(let t of h(this,n,rt).call(this))e(this,g)[t]!==void 0&&e(this,y)[t]!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield [e(this,y)[t],e(this,g)[t]]);}*keys(){for(let t of h(this,n,st).call(this)){let i=e(this,y)[t];i!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield i);}}*rkeys(){for(let t of h(this,n,rt).call(this)){let i=e(this,y)[t];i!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield i);}}*values(){for(let t of h(this,n,st).call(this))e(this,g)[t]!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield e(this,g)[t]);}*rvalues(){for(let t of h(this,n,rt).call(this))e(this,g)[t]!==void 0&&!h(this,n,w).call(this,e(this,g)[t])&&(yield e(this,g)[t]);}[(Yt=Symbol.iterator,jt=Symbol.toStringTag,Yt)](){return this.entries()}find(t,i={}){for(let s of h(this,n,st).call(this)){let r=e(this,g)[s],o=h(this,n,w).call(this,r)?r.__staleWhileFetching:r;if(o!==void 0&&t(o,e(this,y)[s],this))return this.get(e(this,y)[s],i)}}forEach(t,i=this){for(let s of h(this,n,st).call(this)){let r=e(this,g)[s],o=h(this,n,w).call(this,r)?r.__staleWhileFetching:r;o!==void 0&&t.call(i,o,e(this,y)[s],this);}}rforEach(t,i=this){for(let s of h(this,n,rt).call(this)){let r=e(this,g)[s],o=h(this,n,w).call(this,r)?r.__staleWhileFetching:r;o!==void 0&&t.call(i,o,e(this,y)[s],this);}}purgeStale(){let t=false;for(let i of h(this,n,rt).call(this,{allowStale:true}))e(this,P).call(this,i)&&(h(this,n,ot).call(this,e(this,y)[i],"expire"),t=true);return t}info(t){let i=e(this,A).get(t);if(i===void 0)return;let s=e(this,g)[i],r=h(this,n,w).call(this,s)?s.__staleWhileFetching:s;if(r===void 0)return;let o={value:r};if(e(this,W)&&e(this,q)){let a=e(this,W)[i],l=e(this,q)[i];if(a&&l){let c=a-(e(this,$).now()-l);o.ttl=c,o.start=Date.now();}}return e(this,J)&&(o.size=e(this,J)[i]),o}dump(){let t=[];for(let i of h(this,n,st).call(this,{allowStale:true})){let s=e(this,y)[i],r=e(this,g)[i],o=h(this,n,w).call(this,r)?r.__staleWhileFetching:r;if(o===void 0||s===void 0)continue;let a={value:o};if(e(this,W)&&e(this,q)){a.ttl=e(this,W)[i];let l=e(this,$).now()-e(this,q)[i];a.start=Math.floor(Date.now()-l);}e(this,J)&&(a.size=e(this,J)[i]),t.unshift([s,a]);}return t}load(t){this.clear();for(let[i,s]of t){if(s.start){let r=Date.now()-s.start;s.start=e(this,$).now()-r;}this.set(i,s.value,s);}}set(t,i,s={}){var et,j,Z,T;if(i===void 0)return this.delete(t),this;let{ttl:r=this.ttl,start:o,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:c}=s,{noUpdateTTL:S=this.noUpdateTTL}=s,D=e(this,vt).call(this,t,i,s.size||0,l);if(this.maxEntrySize&&D>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=true),h(this,n,ot).call(this,t,"set"),this;let E=e(this,x)===0?void 0:e(this,A).get(t);if(E===void 0)E=e(this,x)===0?e(this,R):e(this,X).length!==0?e(this,X).pop():e(this,x)===e(this,Y)?h(this,n,Ft).call(this,false):e(this,x),e(this,y)[E]=t,e(this,g)[E]=i,e(this,A).set(t,E),e(this,G)[e(this,R)]=E,e(this,N)[E]=e(this,R),u(this,R,E),At(this,x)._++,e(this,Et).call(this,E,D,c),c&&(c.set="add"),S=false,e(this,St)&&((et=e(this,ht))==null||et.call(this,i,t,"add"));else {h(this,n,yt).call(this,E);let b=e(this,g)[E];if(i!==b){if(e(this,at)&&h(this,n,w).call(this,b)){b.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:p}=b;p!==void 0&&!a&&(e(this,Q)&&((j=e(this,K))==null||j.call(this,p,t,"set")),e(this,M)&&e(this,F)?.push([p,t,"set"]));}else a||(e(this,Q)&&((Z=e(this,K))==null||Z.call(this,b,t,"set")),e(this,M)&&e(this,F)?.push([b,t,"set"]));if(e(this,ct).call(this,E),e(this,Et).call(this,E,D,c),e(this,g)[E]=i,c){c.set="replace";let p=b&&h(this,n,w).call(this,b)?b.__staleWhileFetching:b;p!==void 0&&(c.oldValue=p);}}else c&&(c.set="update");e(this,St)&&this.onInsert?.(i,t,i===b?"update":"replace");}if(r!==0&&!e(this,W)&&h(this,n,Lt).call(this),e(this,W)&&(S||e(this,Tt).call(this,E,r,o),c&&e(this,tt).call(this,c,E)),!a&&e(this,M)&&e(this,F)){let b=e(this,F),p;for(;p=b?.shift();)(T=e(this,H))==null||T.call(this,...p);}return this}pop(){var t;try{for(;e(this,x);){let i=e(this,g)[e(this,z)];if(h(this,n,Ft).call(this,!0),h(this,n,w).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(e(this,M)&&e(this,F)){let i=e(this,F),s;for(;s=i?.shift();)(t=e(this,H))==null||t.call(this,...s);}}}has(t,i={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:r}=i,o=e(this,A).get(t);if(o!==void 0){let a=e(this,g)[o];if(h(this,n,w).call(this,a)&&a.__staleWhileFetching===void 0)return false;if(e(this,P).call(this,o))r&&(r.has="stale",e(this,tt).call(this,r,o));else return s&&e(this,lt).call(this,o),r&&(r.has="hit",e(this,tt).call(this,r,o)),true}else r&&(r.has="miss");return false}peek(t,i={}){let{allowStale:s=this.allowStale}=i,r=e(this,A).get(t);if(r===void 0||!s&&e(this,P).call(this,r))return;let o=e(this,g)[r];return h(this,n,w).call(this,o)?o.__staleWhileFetching:o}async fetch(t,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:l=this.noDisposeOnSet,size:c=0,sizeCalculation:S=this.sizeCalculation,noUpdateTTL:D=this.noUpdateTTL,noDeleteOnFetchRejection:E=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:et=this.allowStaleOnFetchRejection,ignoreFetchAbort:j=this.ignoreFetchAbort,allowStaleOnFetchAbort:Z=this.allowStaleOnFetchAbort,context:T,forceRefresh:b=false,status:p,signal:C}=i;if(!e(this,at))return p&&(p.fetch="get"),this.get(t,{allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:o,status:p});let L={allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:o,ttl:a,noDisposeOnSet:l,size:c,sizeCalculation:S,noUpdateTTL:D,noDeleteOnFetchRejection:E,allowStaleOnFetchRejection:et,allowStaleOnFetchAbort:Z,ignoreFetchAbort:j,status:p,signal:C},I=e(this,A).get(t);if(I===void 0){p&&(p.fetch="miss");let v=h(this,n,Dt).call(this,t,I,L,T);return v.__returned=v}else {let v=e(this,g)[I];if(h(this,n,w).call(this,v)){let dt=s&&v.__staleWhileFetching!==void 0;return p&&(p.fetch="inflight",dt&&(p.returnedStale=true)),dt?v.__staleWhileFetching:v.__returned=v}let wt=e(this,P).call(this,I);if(!b&&!wt)return p&&(p.fetch="hit"),h(this,n,yt).call(this,I),r&&e(this,lt).call(this,I),p&&e(this,tt).call(this,p,I),v;let ut=h(this,n,Dt).call(this,t,I,L,T),gt=ut.__staleWhileFetching!==void 0&&s;return p&&(p.fetch=wt?"stale":"refresh",gt&&wt&&(p.returnedStale=true)),gt?ut.__staleWhileFetching:ut.__returned=ut}}async forceFetch(t,i={}){let s=await this.fetch(t,i);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(t,i={}){let s=e(this,mt);if(!s)throw new Error("no memoMethod provided to constructor");let{context:r,forceRefresh:o,...a}=i,l=this.get(t,a);if(!o&&l!==void 0)return l;let c=s(t,l,{options:a,context:r});return this.set(t,c,a),c}get(t,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:a}=i,l=e(this,A).get(t);if(l!==void 0){let c=e(this,g)[l],S=h(this,n,w).call(this,c);return a&&e(this,tt).call(this,a,l),e(this,P).call(this,l)?(a&&(a.get="stale"),S?(a&&s&&c.__staleWhileFetching!==void 0&&(a.returnedStale=true),s?c.__staleWhileFetching:void 0):(o||h(this,n,ot).call(this,t,"expire"),a&&s&&(a.returnedStale=true),s?c:void 0)):(a&&(a.get="hit"),S?c.__staleWhileFetching:(h(this,n,yt).call(this,l),r&&e(this,lt).call(this,l),c))}else a&&(a.get="miss");}delete(t){return h(this,n,ot).call(this,t,"delete")}clear(){return h(this,n,Wt).call(this,"delete")}},Y=new WeakMap,U=new WeakMap,K=new WeakMap,ht=new WeakMap,H=new WeakMap,_t=new WeakMap,mt=new WeakMap,$=new WeakMap,x=new WeakMap,B=new WeakMap,A=new WeakMap,y=new WeakMap,g=new WeakMap,G=new WeakMap,N=new WeakMap,z=new WeakMap,R=new WeakMap,X=new WeakMap,F=new WeakMap,J=new WeakMap,q=new WeakMap,W=new WeakMap,V=new WeakMap,Q=new WeakMap,at=new WeakMap,M=new WeakMap,St=new WeakMap,n=new WeakSet,Lt=function(){let t=new Rt(e(this,Y)),i=new Rt(e(this,Y));u(this,W,t),u(this,q,i);let s=this.ttlAutopurge?new Array(e(this,Y)):void 0;u(this,V,s),u(this,Tt,(l,c,S=e(this,$).now())=>{i[l]=c!==0?S:0,t[l]=c,r(l,c);}),u(this,lt,l=>{i[l]=t[l]!==0?e(this,$).now():0,r(l,t[l]);});let r=this.ttlAutopurge?(l,c)=>{if(s?.[l]&&(clearTimeout(s[l]),s[l]=void 0),c&&c!==0&&s){let S=setTimeout(()=>{e(this,P).call(this,l)&&h(this,n,ot).call(this,e(this,y)[l],"expire");},c+1);S.unref&&S.unref(),s[l]=S;}}:()=>{};u(this,tt,(l,c)=>{if(t[c]){let S=t[c],D=i[c];if(!S||!D)return;l.ttl=S,l.start=D,l.now=o||a();let E=l.now-D;l.remainingTTL=S-E;}});let o=0,a=()=>{let l=e(this,$).now();if(this.ttlResolution>0){o=l;let c=setTimeout(()=>o=0,this.ttlResolution);c.unref&&c.unref();}return l};this.getRemainingTTL=l=>{let c=e(this,A).get(l);if(c===void 0)return 0;let S=t[c],D=i[c];if(!S||!D)return 1/0;let E=(o||a())-D;return S-E},u(this,P,l=>{let c=i[l],S=t[l];return !!S&&!!c&&(o||a())-c>S});},lt=new WeakMap,tt=new WeakMap,Tt=new WeakMap,P=new WeakMap,Xt=function(){let t=new Rt(e(this,Y));u(this,B,0),u(this,J,t),u(this,ct,i=>{u(this,B,e(this,B)-t[i]),t[i]=0;}),u(this,vt,(i,s,r,o)=>{if(h(this,n,w).call(this,s))return 0;if(!it(r))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(r=o(s,i),!it(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return r}),u(this,Et,(i,s,r)=>{if(t[i]=s,e(this,U)){let o=e(this,U)-t[i];for(;e(this,B)>o;)h(this,n,Ft).call(this,true);}u(this,B,e(this,B)+t[i]),r&&(r.entrySize=s,r.totalCalculatedSize=e(this,B));});},ct=new WeakMap,Et=new WeakMap,vt=new WeakMap,st=function*({allowStale:t=this.allowStale}={}){if(e(this,x))for(let i=e(this,R);!(!h(this,n,Ut).call(this,i)||((t||!e(this,P).call(this,i))&&(yield i),i===e(this,z)));)i=e(this,N)[i];},rt=function*({allowStale:t=this.allowStale}={}){if(e(this,x))for(let i=e(this,z);!(!h(this,n,Ut).call(this,i)||((t||!e(this,P).call(this,i))&&(yield i),i===e(this,R)));)i=e(this,G)[i];},Ut=function(t){return t!==void 0&&e(this,A).get(e(this,y)[t])===t},Ft=function(t){var o;let i=e(this,z),s=e(this,y)[i],r=e(this,g)[i];return e(this,at)&&h(this,n,w).call(this,r)?r.__abortController.abort(new Error("evicted")):(e(this,Q)||e(this,M))&&(e(this,Q)&&((o=e(this,K))==null||o.call(this,r,s,"evict")),e(this,M)&&e(this,F)?.push([r,s,"evict"])),e(this,ct).call(this,i),e(this,V)?.[i]&&(clearTimeout(e(this,V)[i]),e(this,V)[i]=void 0),t&&(e(this,y)[i]=void 0,e(this,g)[i]=void 0,e(this,X).push(i)),e(this,x)===1?(u(this,z,u(this,R,0)),e(this,X).length=0):u(this,z,e(this,G)[i]),e(this,A).delete(s),At(this,x)._--,i},Dt=function(t,i,s,r){let o=i===void 0?void 0:e(this,g)[i];if(h(this,n,w).call(this,o))return o;let a=new zt,{signal:l}=s;l?.addEventListener("abort",()=>a.abort(l.reason),{signal:a.signal});let c={signal:a.signal,options:s,context:r},S=(T,b=false)=>{let{aborted:p}=a.signal,C=s.ignoreFetchAbort&&T!==void 0,L=s.ignoreFetchAbort||!!(s.allowStaleOnFetchAbort&&T!==void 0);if(s.status&&(p&&!b?(s.status.fetchAborted=true,s.status.fetchError=a.signal.reason,C&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),p&&!C&&!b)return E(a.signal.reason,L);let I=j,v=e(this,g)[i];return (v===j||C&&b&&v===void 0)&&(T===void 0?I.__staleWhileFetching!==void 0?e(this,g)[i]=I.__staleWhileFetching:h(this,n,ot).call(this,t,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(t,T,c.options))),T},D=T=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=T),E(T,false)),E=(T,b)=>{let{aborted:p}=a.signal,C=p&&s.allowStaleOnFetchAbort,L=C||s.allowStaleOnFetchRejection,I=L||s.noDeleteOnFetchRejection,v=j;if(e(this,g)[i]===j&&(!I||!b&&v.__staleWhileFetching===void 0?h(this,n,ot).call(this,t,"fetch"):C||(e(this,g)[i]=v.__staleWhileFetching)),L)return s.status&&v.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),v.__staleWhileFetching;if(v.__returned===v)throw T},et=(T,b)=>{var C;let p=(C=e(this,_t))==null?void 0:C.call(this,t,o,c);p&&p instanceof Promise&&p.then(L=>T(L===void 0?void 0:L),b),a.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(T(void 0),s.allowStaleOnFetchAbort&&(T=L=>S(L,true)));});};s.status&&(s.status.fetchDispatched=true);let j=new Promise(et).then(S,D),Z=Object.assign(j,{__abortController:a,__staleWhileFetching:o,__returned:void 0});return i===void 0?(this.set(t,Z,{...c.options,status:void 0}),i=e(this,A).get(t)):e(this,g)[i]=Z,Z},w=function(t){if(!e(this,at))return false;let i=t;return !!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof zt},Nt=function(t,i){e(this,N)[i]=t,e(this,G)[t]=i;},yt=function(t){t!==e(this,R)&&(t===e(this,z)?u(this,z,e(this,G)[t]):h(this,n,Nt).call(this,e(this,N)[t],e(this,G)[t]),h(this,n,Nt).call(this,e(this,R),t),u(this,R,t));},ot=function(t,i){var r,o;let s=false;if(e(this,x)!==0){let a=e(this,A).get(t);if(a!==void 0)if(e(this,V)?.[a]&&(clearTimeout(e(this,V)?.[a]),e(this,V)[a]=void 0),s=true,e(this,x)===1)h(this,n,Wt).call(this,i);else {e(this,ct).call(this,a);let l=e(this,g)[a];if(h(this,n,w).call(this,l)?l.__abortController.abort(new Error("deleted")):(e(this,Q)||e(this,M))&&(e(this,Q)&&((r=e(this,K))==null||r.call(this,l,t,i)),e(this,M)&&e(this,F)?.push([l,t,i])),e(this,A).delete(t),e(this,y)[a]=void 0,e(this,g)[a]=void 0,a===e(this,R))u(this,R,e(this,N)[a]);else if(a===e(this,z))u(this,z,e(this,G)[a]);else {let c=e(this,N)[a];e(this,G)[c]=e(this,G)[a];let S=e(this,G)[a];e(this,N)[S]=e(this,N)[a];}At(this,x)._--,e(this,X).push(a);}}if(e(this,M)&&e(this,F)?.length){let a=e(this,F),l;for(;l=a?.shift();)(o=e(this,H))==null||o.call(this,...l);}return s},Wt=function(t){var i,s;for(let r of h(this,n,rt).call(this,{allowStale:true})){let o=e(this,g)[r];if(h(this,n,w).call(this,o))o.__abortController.abort(new Error("deleted"));else {let a=e(this,y)[r];e(this,Q)&&((i=e(this,K))==null||i.call(this,o,a,t)),e(this,M)&&e(this,F)?.push([o,a,t]);}}if(e(this,A).clear(),e(this,g).fill(void 0),e(this,y).fill(void 0),e(this,W)&&e(this,q)){e(this,W).fill(0),e(this,q).fill(0);for(let r of e(this,V)??[])r!==void 0&&clearTimeout(r);e(this,V)?.fill(void 0);}if(e(this,J)&&e(this,J).fill(0),u(this,z,0),u(this,R,0),e(this,X).length=0,u(this,B,0),u(this,x,0),e(this,M)&&e(this,F)){let r=e(this,F),o;for(;o=r?.shift();)(s=e(this,H))==null||s.call(this,...o);}},bt);var ft=class{constructor(t){m(this,"cache");m(this,"map",new Map);this.cache=new Bt({max:t.cacheSize}),this.map=new Map;}get[Symbol.iterator](){return this.map[Symbol.iterator]}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}clear(){return this.cache.clear(),this.map.clear()}delete(t){let i=this.map.delete(t);return i&&this.cache.delete(t),i}get forEach(){return this.map.forEach}get(t){let i=this.cache.get(t);return i||this.map.get(t)}has(t){return this.map.has(t)}set(t,i){return this.map.set(t,i),this.cache.set(t,i),this}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}};var O=class O{constructor(){}static clearOldTempVariables(t){O.tempStorageDeadlines.forEach((i,s)=>{i>t&&(O.tempStorage.delete(s),O.tempStorageDeadlines.delete(s),O.storage.cache.delete(s));});}static setVariable(t,i){let s=O.tempStorage.has(t);i==null?(O.storage.map.delete(t),!s&&O.storage.cache.delete(t)):(O.storage.map.set(t,i),!s&&O.storage.cache.set(t,i));}static getVariable(t){let i=O.storage.cache.get(t);return i===void 0&&(i=O.tempStorage.get(t)),i===void 0&&(i=O.storage.map.get(t)),i===void 0&&(i=O.default.get(t)),xt(i)}static removeVariable(t){O.storage.delete(t);}static setFlag(t,i){if(i)this.flags.includes(t)||this.flags.push(t);else {let s=this.flags.indexOf(t);s>-1&&this.flags.splice(s,1);}}static getFlag(t){return this.flags.includes(t)}};m(O,"storage",new ft({cacheSize:20})),m(O,"default",new ft({cacheSize:20})),m(O,"flags",Array()),m(O,"tempStorage",new Map),m(O,"tempStorageDeadlines",new Map);var d=O;var Ot=class{get storage(){return d.storage.map}get cache(){return d.storage.cache}get flags(){return d.flags}get tempStorage(){return d.tempStorage}get tempStorageDeadlines(){return d.tempStorageDeadlines}set default(t){Object.entries(t).forEach(([i,s])=>{d.default.set(i,s);});}set(t,i){return d.setVariable(t,i)}get(t){return d.getVariable(t)}remove(t){return d.removeVariable(t)}setTempVariable(t,i){if(i==null){this.removeTempVariable(t);return}else d.tempStorage.set(t,i),d.storage.cache.set(t,i),d.tempStorageDeadlines.has(t)||d.tempStorageDeadlines.set(t,core.GameUnifier.openedLabels);}removeTempVariable(t){d.tempStorage.has(t)&&(d.tempStorage.delete(t),d.tempStorageDeadlines.delete(t),d.storage.cache.delete(t));}setFlag(t,i){return d.setFlag(t,i)}getFlag(t){return d.getFlag(t)}clear(){this.storage.clear(),this.cache.clear(),d.flags=[],d.tempStorage.clear(),d.tempStorageDeadlines.clear();}export(){let t=[];[...this.storage.keys()].forEach(r=>{t.push({key:r,value:this.storage.get(r)});});let i=[];[...d.tempStorage.keys()].forEach(r=>{i.push({key:r,value:d.tempStorage.get(r)});});let s=[];return [...d.tempStorageDeadlines.keys()].forEach(r=>{s.push({key:r,value:d.tempStorageDeadlines.get(r)});}),xt({base:t,temp:i,tempDeadlines:s,flags:d.flags})}restore(t){this.clear();try{t?(Array.isArray(t)&&t.forEach(i=>{if(i.key==="___temp_storage___"){let s=i.value;Object.entries(s).forEach(([r,o])=>{d.tempStorage.set(r,o);});}else if(i.key==="___temp_storage_deadlines___"){let s=i.value;Object.entries(s).forEach(([r,o])=>{d.tempStorageDeadlines.set(r,o);});}else i.key==="___flags___"?i.value.forEach(r=>{d.flags.push(r);}):this.storage.set(i.key,i.value);}),"base"in t&&"temp"in t&&"tempDeadlines"in t?(t.base?.forEach(i=>{this.storage.set(i.key,i.value);}),t.temp?.forEach(i=>{d.tempStorage.set(i.key,i.value);}),t.tempDeadlines?.forEach(i=>{d.tempStorageDeadlines.set(i.key,i.value);})):Object.entries(t).forEach(([i,s])=>{i==="___temp_storage___"?Object.entries(s).forEach(([r,o])=>{d.tempStorage.set(r,o);}):i==="___temp_storage_deadlines___"?Object.entries(s).forEach(([r,o])=>{d.tempStorageDeadlines.set(r,o);}):i==="___flags___"?s.forEach(r=>{d.flags.push(r);}):this.storage.set(i,s);})):nt.warn("No storage data found");}catch(i){nt.error("Error importing data",i);}}};var Ct=class{constructor(t,i){m(this,"id");m(this,"categoryId");this.categoryId=t,this.id=i;}setStorageProperty(t,i){let s=d.getVariable(this.categoryId);s||(s={}),s.hasOwnProperty(this.id)||(s[this.id]={}),i==null?s[this.id].hasOwnProperty(t)&&delete s[this.id][t]:s[this.id]={...s[this.id],[t]:i},Object.keys(s[this.id]).length===0&&delete s[this.id],d.setVariable(this.categoryId,s);}getStorageProperty(t,i=this.id){let s=d.getVariable(this.categoryId);if(s&&s.hasOwnProperty(i)&&s[i].hasOwnProperty(t))return s[i][t]}};var ie={CURRENT_DIALOGUE_MEMORY_KEY:"___current_dialogue_memory___",LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY:"___last_dialogue_added_in_step_memory___",CURRENT_MENU_OPTIONS_MEMORY_KEY:"___current_menu_options_memory___",LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY:"___last_menu_options_added_in_step_memory___",CURRENT_INPUT_VALUE_MEMORY_KEY:"_input_value_",LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY:"___last_input_added_in_step_memory___",CURRENT_INPUT_INFO_MEMORY_KEY:"___current_input_info_memory___",CHARACTER_CATEGORY_KEY:"___character___",ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY:"___glue___",OPENED_LABELS_COUNTER_KEY:"___opened_labels_counter___",ALL_CHOICES_MADE_KEY:"___all_choices_made___",CURRENT_STEP_TIMES_COUNTER_KEY:"___current_step_times_counter___",LAST_STEP_GLUED:"___last_step_glued___"};var Ce=new Ot;exports.SYSTEM_RESERVED_STORAGE_KEYS=ie;exports.StorageManagerStatic=d;exports.StoredClassModel=Ct;exports.storage=Ce;//# sourceMappingURL=storage.cjs.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy11dGlsaXR5LnRzIiwiLi4vc3JjL3V0aWxzL2V4cG9ydC11dGlsaXR5LnRzIiwiLi4vbm9kZV9tb2R1bGVzL2xydS1jYWNoZS9zcmMvaW5kZXgudHMiLCIuLi9zcmMvY2xhc3Nlcy9DYWNoZWRNYXAudHMiLCIuLi9zcmMvc3RvcmFnZS9TdG9yYWdlTWFuYWdlclN0YXRpYy50cyIsIi4uL3NyYy9zdG9yYWdlL2NsYXNzZXMvU3RvcmVkQ2xhc3NNb2RlbC50cyIsIi4uL3NyYy9zdG9yYWdlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9zdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbImxvZ2dlciIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsImNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IiwiZWxlbWVudCIsImVsZW1lbnRTdHJpbmciLCJlIiwiUGl4aUVycm9yIiwiZGVmYXVsdFBlcmYiLCJ3YXJuZWQiLCJQUk9DRVNTIiwiZW1pdFdhcm5pbmciLCJtc2ciLCJ0eXBlIiwiY29kZSIsImZuIiwiQUMiLCJBUyIsIl9fcHVibGljRmllbGQiLCJfIiwid2FybkFDUG9seWZpbGwiLCJyZWFzb24iLCJwcmludEFDUG9seWZpbGxXYXJuaW5nIiwic2hvdWxkV2FybiIsImlzUG9zSW50IiwibiIsImdldFVpbnRBcnJheSIsIm1heCIsIlplcm9BcnJheSIsInNpemUiLCJfYSIsIl9vIiwiU3RhY2siLCJIZWFwQ2xzIiwiX1N0YWNrIiwiI2NvbnN0cnVjdGluZyIsInMiLCJfX3ByaXZhdGVBZGQiLCJfYiIsIl9jIiwiX3ciLCJfQyIsIl9TIiwiX0wiLCJfSSIsIl9tIiwiX24iLCJfXyIsIl9zIiwiX2kiLCJfdCIsIl91IiwiX2wiLCJfaCIsIl9yIiwiX3kiLCJfQSIsIl9kIiwiX2ciLCJfVCIsIl92IiwiX2YiLCJfVSIsIl9jX2luc3RhbmNlcyIsImpfZm4iLCJfUiIsIl96IiwiX04iLCJfcCIsIkJfZm4iLCJfVyIsIl9NIiwiX1AiLCJGX2ZuIiwiT19mbiIsIkhfZm4iLCJ4X2ZuIiwiR19mbiIsImVfZm4iLCJrX2ZuIiwiRF9mbiIsIkVfZm4iLCJWX2ZuIiwiTFJVQ2FjaGUiLCJvcHRpb25zIiwiI21heCIsIiNtYXhTaXplIiwiI2Rpc3Bvc2UiLCIjb25JbnNlcnQiLCIjZGlzcG9zZUFmdGVyIiwiI2ZldGNoTWV0aG9kIiwiI21lbW9NZXRob2QiLCIjcGVyZiIsIiNzaXplIiwiI2NhbGN1bGF0ZWRTaXplIiwiI2tleU1hcCIsIiNrZXlMaXN0IiwiI3ZhbExpc3QiLCIjbmV4dCIsIiNwcmV2IiwiI2hlYWQiLCIjdGFpbCIsIiNmcmVlIiwiI2Rpc3Bvc2VkIiwiI3NpemVzIiwiI3N0YXJ0cyIsIiN0dGxzIiwiI2F1dG9wdXJnZVRpbWVycyIsIiNoYXNEaXNwb3NlIiwiI2hhc0ZldGNoTWV0aG9kIiwiI2hhc0Rpc3Bvc2VBZnRlciIsIiNoYXNPbkluc2VydCIsIiN1cGRhdGVJdGVtQWdlIiwiI3N0YXR1c1RUTCIsIiNzZXRJdGVtVFRMIiwiI2lzU3RhbGUiLCIjcmVtb3ZlSXRlbVNpemUiLCIjYWRkSXRlbVNpemUiLCJfc3QiLCIjcmVxdWlyZVNpemUiLCJfayIsInNpemVDYWxjdWxhdGlvbiIsInR0bCIsInR0bFJlc29sdXRpb24iLCJ0dGxBdXRvcHVyZ2UiLCJ1cGRhdGVBZ2VPbkdldCIsInVwZGF0ZUFnZU9uSGFzIiwiYWxsb3dTdGFsZSIsImRpc3Bvc2UiLCJvbkluc2VydCIsImRpc3Bvc2VBZnRlciIsIm5vRGlzcG9zZU9uU2V0Iiwibm9VcGRhdGVUVEwiLCJtYXhTaXplIiwibWF4RW50cnlTaXplIiwiZmV0Y2hNZXRob2QiLCJtZW1vTWV0aG9kIiwibm9EZWxldGVPbkZldGNoUmVqZWN0aW9uIiwibm9EZWxldGVPblN0YWxlR2V0IiwiYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24iLCJhbGxvd1N0YWxlT25GZXRjaEFib3J0IiwiaWdub3JlRmV0Y2hBYm9ydCIsInBlcmYiLCJfX3ByaXZhdGVTZXQiLCJVaW50QXJyYXkiLCJfX3ByaXZhdGVHZXQiLCJfX3ByaXZhdGVNZXRob2QiLCIjaW5pdGlhbGl6ZVNpemVUcmFja2luZyIsIiNpbml0aWFsaXplVFRMVHJhY2tpbmciLCJfTFJVQ2FjaGUiLCJjIiwicCIsIiNpc0JhY2tncm91bmRGZXRjaCIsImsiLCJpbmRleCIsImNvbnRleHQiLCIjYmFja2dyb3VuZEZldGNoIiwiI21vdmVUb1RhaWwiLCIjaW5kZXhlcyIsIiNyaW5kZXhlcyIsImtleSIsImkiLCJnZXRPcHRpb25zIiwidiIsInZhbHVlIiwidGhpc3AiLCJkZWxldGVkIiwiI2RlbGV0ZSIsImVudHJ5Iiwic3RhcnQiLCJyZW1haW4iLCJhcnIiLCJhZ2UiLCJzZXRPcHRpb25zIiwic3RhdHVzIiwiI2V2aWN0IiwiX19wcml2YXRlV3JhcHBlciIsIm9sZFZhbCIsIm9sZFZhbHVlIiwiZHQiLCJ0YXNrIiwidmFsIiwiaGFzT3B0aW9ucyIsInBlZWtPcHRpb25zIiwiZmV0Y2hPcHRpb25zIiwiZm9yY2VSZWZyZXNoIiwic2lnbmFsIiwic3RhbGUiLCJpc1N0YWxlIiwic3RhbGVWYWwiLCJtZW1vT3B0aW9ucyIsInZ2IiwiZmV0Y2hpbmciLCIjY2xlYXIiLCJ0dGxzIiwic3RhcnRzIiwicHVyZ2VUaW1lcnMiLCJzZXRQdXJnZXRUaW1lciIsInQiLCJjYWNoZWROb3ciLCJnZXROb3ciLCJzaXplcyIsIiNpc1ZhbGlkSW5kZXgiLCJmcmVlIiwiaGVhZCIsImFjIiwiZmV0Y2hPcHRzIiwiY2IiLCJ1cGRhdGVDYWNoZSIsImFib3J0ZWQiLCJpZ25vcmVBYm9ydCIsInByb2NlZWQiLCJmZXRjaEZhaWwiLCJiZiIsInZsIiwiZWIiLCJlciIsImFsbG93U3RhbGVBYm9ydGVkIiwibm9EZWxldGUiLCJwY2FsbCIsInJlcyIsInJlaiIsImZtcCIsImIiLCIjY29ubmVjdCIsInBpIiwibmkiLCJDYWNoZWRNYXAiLCJMIiwiY2FjaGVkVmFsdWUiLCJfU3RvcmFnZU1hbmFnZXJTdGF0aWMiLCJvcGVuZWRMYWJlbHNOdW1iZXIiLCJkZWFkbGluZSIsImlzSW5UZW1wU3RvcmFnZSIsInJlc3VsdCIsIlN0b3JhZ2VNYW5hZ2VyU3RhdGljIiwiU3RvcmFnZU1hbmFnZXIiLCJHYW1lVW5pZmllciIsImJhc2UiLCJ0ZW1wIiwidGVtcERlYWRsaW5lcyIsImRhdGEiLCJpdGVtIiwiZmxhZyIsIlN0b3JlZENsYXNzTW9kZWwiLCJjYXRlZ29yeUlkIiwiaWQiLCJwcm9wZXJ0eU5hbWUiLCJzdG9yYWdlVmFsdWUiLCJpZFRvVXNlIiwiU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyIsInN0b3JhZ2UiXSwibWFwcGluZ3MiOiJzREFBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHlCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsbURBQUEsQ0FBQSxDQUFBLENBQUEsWUFBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsd0JBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQ0FPLElBQVVBLEVBQUFBLENBQUFBLENBQUFBLENBQUFB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QSxFQUFBLElBQUEsQ0FBQSxnQkFBQSxDQUFBLENBSUFBLENBQUFBLENBQUEsSUFBQSxDQUFBLGdCQUFBLENBQUEsQ0FJQUEsQ0FBQUEsQ0FBQSxtQkFLQUEsQ0FBQUEsQ0FBQSxJQUFBLENBQUEsZ0JBQUEsQ0FBQSxDQUlBQSxFQUFBLElBQUEsQ0FBQSxhQUFBLENBQUEsQ0FJQUEsQ0FBQUEsQ0FBQSxxQkFJQUEsQ0FBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUlBQSxFQUFBLElBQUEsQ0FBQSwwQkFBQSxDQUFBLENBSUFBLENBQUFBLENBQUEsMkJBSUFBLENBQUFBLENBQUEsSUFBQSxDQUFBLHdCQUFBLENBQUEsQ0FJQUEsRUFBQSxJQUFBLENBQUEsNEJBQUEsQ0FBQSxDQUlBQSxDQUFBQSxDQUFBLHlCQUdBMkUsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FFQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEs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QkFBQSxDQUFzQkQsRUFBc0JFLENBQUFBLENBQWtCLElBQUEsQ0FBSyxHQUFtQixDQUM1RixJQUFJRCxFQUFlYixDQUFBQSxDQUFxQixXQUFBLENBQWlCLEtBQUssVUFBVSxDQUFBLENBQ3hFLEdBQ0lhLENBQUFBLEVBQ0FBLENBQUFBLENBQWEsZUFBZUMsQ0FBTyxDQUFBLEVBQ25DRCxFQUFhQyxDQUFPLENBQUEsQ0FBRSxlQUFlRixDQUFZLENBQUEsQ0FFakQsT0FBT0MsQ0FBQUEsQ0FBYUMsQ0FBTyxFQUFFRixDQUFZLENBR2pELENBQ0osRUMxRk8sSUFBTUcsR0FBK0IsQ0FJeEMsMkJBQUEsQ0FBNkIsZ0NBSTdCLHNDQUFBLENBQXdDLDBDQUFBLENBSXhDLGdDQUFpQyxtQ0FBQSxDQUlqQywwQ0FBQSxDQUE0QywrQ0FJNUMsOEJBQUEsQ0FBZ0MsZUFBQSxDQUloQyxvQ0FBcUMsdUNBQUEsQ0FJckMsNkJBQUEsQ0FBK0Isa0NBSS9CLHNCQUFBLENBQXdCLGlCQUFBLENBS3hCLHNEQUF1RCxZQUFBLENBSXZELHlCQUFBLENBQTJCLDhCQUkzQixvQkFBQSxDQUFzQix3QkFBQSxDQUt0QiwrQkFBZ0Msa0NBQUEsQ0FJaEMsZUFBQSxDQUFpQix1QkFDckIsRUM1Q0EsSUFBTUMsR0FBbUMsSUFBSWYiLCJmaWxlIjoic3RvcmFnZS5janMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lVW5pZmllciB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm4vY29yZVwiO1xuaW1wb3J0IHsgY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZXhwb3J0LXV0aWxpdHlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2ctdXRpbGl0eVwiO1xuaW1wb3J0IFN0b3JhZ2VHYW1lU3RhdGUsIHsgU3RvcmFnZUdhbWVTdGF0ZUl0ZW0gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1N0b3JhZ2VHYW1lU3RhdGVcIjtcbmltcG9ydCBTdG9yYWdlTWFuYWdlckludGVyZmFjZSBmcm9tIFwiLi9pbnRlcmZhY2VzL1N0b3JhZ2VNYW5hZ2VySW50ZXJmYWNlXCI7XG5pbXBvcnQgU3RvcmFnZU1hbmFnZXJTdGF0aWMgZnJvbSBcIi4vU3RvcmFnZU1hbmFnZXJTdGF0aWNcIjtcbmltcG9ydCB7IFN0b3JhZ2VFbGVtZW50VHlwZSB9IGZyb20gXCIuL3R5cGVzL1N0b3JhZ2VFbGVtZW50VHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yYWdlTWFuYWdlciBpbXBsZW1lbnRzIFN0b3JhZ2VNYW5hZ2VySW50ZXJmYWNlIHtcbiAgICBnZXQgc3RvcmFnZSgpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UubWFwO1xuICAgIH1cbiAgICBnZXQgY2FjaGUoKSB7XG4gICAgICAgIHJldHVybiBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLmNhY2hlO1xuICAgIH1cbiAgICBnZXQgZmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBTdG9yYWdlTWFuYWdlclN0YXRpYy5mbGFncztcbiAgICB9XG4gICAgZ2V0IHRlbXBTdG9yYWdlKCkge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2U7XG4gICAgfVxuICAgIGdldCB0ZW1wU3RvcmFnZURlYWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzO1xuICAgIH1cbiAgICBzZXQgZGVmYXVsdCh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBTdG9yYWdlRWxlbWVudFR5cGUgfSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5kZWZhdWx0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTdG9yYWdlRWxlbWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnNldFZhcmlhYmxlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBTdG9yYWdlRWxlbWVudFR5cGU+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBTdG9yYWdlTWFuYWdlclN0YXRpYy5nZXRWYXJpYWJsZTxUPihrZXkpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBTdG9yYWdlTWFuYWdlclN0YXRpYy5yZW1vdmVWYXJpYWJsZShrZXkpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0VGVtcFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogU3RvcmFnZUVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRlbXBWYXJpYWJsZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIVN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuc2V0KGtleSwgR2FtZVVuaWZpZXIub3BlbmVkTGFiZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlVGVtcFZhcmlhYmxlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0RmxhZyhrZXk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnNldEZsYWcoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGdldEZsYWcoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmdldEZsYWcoa2V5KTtcbiAgICB9XG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5mbGFncyA9IFtdO1xuICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5jbGVhcigpO1xuICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5jbGVhcigpO1xuICAgIH1cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFN0b3JhZ2VHYW1lU3RhdGUge1xuICAgICAgICBsZXQgYmFzZTogU3RvcmFnZUdhbWVTdGF0ZUl0ZW1bXSA9IFtdO1xuICAgICAgICBbLi4udGhpcy5zdG9yYWdlLmtleXMoKV0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBiYXNlLnB1c2goeyBrZXksIHZhbHVlOiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGVtcDogU3RvcmFnZUdhbWVTdGF0ZUl0ZW1bXSA9IFtdO1xuICAgICAgICBbLi4uU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2Uua2V5cygpXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIHRlbXAucHVzaCh7IGtleSwgdmFsdWU6IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLmdldChrZXkpIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRlbXBEZWFkbGluZXM6IFN0b3JhZ2VHYW1lU3RhdGVJdGVtPG51bWJlcj5bXSA9IFtdO1xuICAgICAgICBbLi4uU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMua2V5cygpXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIHRlbXBEZWFkbGluZXMucHVzaCh7IGtleSwgdmFsdWU6IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLmdldChrZXkpISB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudCh7XG4gICAgICAgICAgICBiYXNlLFxuICAgICAgICAgICAgdGVtcCxcbiAgICAgICAgICAgIHRlbXBEZWFkbGluZXMsXG4gICAgICAgICAgICBmbGFnczogU3RvcmFnZU1hbmFnZXJTdGF0aWMuZmxhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgcmVzdG9yZShkYXRhOiBTdG9yYWdlR2FtZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gaWQgZGF0YSBpcyBhcnJheVxuICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHRoaXMgaWYgc2hvdWxkIGJlIHJlbW92ZWQgaW4gc29tZSBvdGhlciB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5rZXkgPT09IFwiX19fdGVtcF9zdG9yYWdlX19fXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtLnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIFN0b3JhZ2VFbGVtZW50VHlwZT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ua2V5ID09PSBcIl9fX3RlbXBfc3RvcmFnZV9kZWFkbGluZXNfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW0udmFsdWUgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5rZXkgPT09IFwiX19fZmxhZ3NfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW0udmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5mbGFncy5wdXNoKGZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGl0ZW0ua2V5LCBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcImJhc2VcIiBpbiBkYXRhICYmIFwidGVtcFwiIGluIGRhdGEgJiYgXCJ0ZW1wRGVhZGxpbmVzXCIgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAoZGF0YS5iYXNlIGFzIGFueSk/LmZvckVhY2goKGl0ZW06IFN0b3JhZ2VHYW1lU3RhdGVJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGl0ZW0ua2V5LCBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIChkYXRhLnRlbXAgYXMgYW55KT8uZm9yRWFjaCgoaXRlbTogU3RvcmFnZUdhbWVTdGF0ZUl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLnNldChpdGVtLmtleSwgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAoZGF0YS50ZW1wRGVhZGxpbmVzIGFzIGFueSk/LmZvckVhY2goKGl0ZW06IFN0b3JhZ2VHYW1lU3RhdGVJdGVtPG51bWJlcj4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLnNldChpdGVtLmtleSwgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBkYXRhIGlzIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHRoaXMgaWYgc2hvdWxkIGJlIHJlbW92ZWQgaW4gc29tZSBvdGhlciB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJfX190ZW1wX3N0b3JhZ2VfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIFN0b3JhZ2VFbGVtZW50VHlwZT4pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX190ZW1wX3N0b3JhZ2VfZGVhZGxpbmVzX19fXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwiX19fZmxhZ3NfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBzdHJpbmdbXSkuZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5mbGFncy5wdXNoKGZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiTm8gc3RvcmFnZSBkYXRhIGZvdW5kXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBpbXBvcnRpbmcgZGF0YVwiLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBuYW1lc3BhY2UgbG9nZ2VyIHtcbiAgICBleHBvcnQgY29uc3QgbG9nID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5sb2coYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IHdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PlxuICAgICAgICBjb25zb2xlLndhcm4oYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IGVycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5lcnJvcihgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICBleHBvcnQgY29uc3QgaW5mbyA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn1cbiIsImltcG9ydCB7IFBpeGlFcnJvciB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm4vY29yZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLXV0aWxpdHlcIjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBiZSBjb3BpZWRcbiAqIEByZXR1cm5zIFRoZSBjb3BpZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQ8VD4oZWxlbWVudDogVCk6IFQge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVsZW1lbnRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZWxlbWVudFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIiwgZWxlbWVudCwgZSk7XG4gICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJub3RfanNvbl9zZXJpYWxpemFibGVcIiwgXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIik7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cblxuLy8gbW9kdWxlLXByaXZhdGUgbmFtZXMgYW5kIHR5cGVzXG4vLyB0aGlzIHByb3ZpZGVzIHRoZSBkZWZhdWx0IFBlcmYgb2JqZWN0IHNvdXJjZS5cbi8vIGl0IGNhbiBiZSBwYXNzZWQgaW4gdmlhIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgaXRcbi8vIGZvciBhIHNpbmdsZSBMUlUgb2JqZWN0LlxuZXhwb3J0IHR5cGUgUGVyZiA9IHsgbm93OiAoKSA9PiBudW1iZXIgfVxuY29uc3QgZGVmYXVsdFBlcmY6IFBlcmYgPVxuICAoXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICApID9cbiAgICBwZXJmb3JtYW5jZVxuICA6IERhdGVcblxuY29uc3Qgd2FybmVkID0gbmV3IFNldDxzdHJpbmc+KClcblxuLy8gZWl0aGVyIGEgZnVuY3Rpb24gb3IgYSBjbGFzc1xudHlwZSBGb3JDID0gKCguLi5hOiBhbnlbXSkgPT4gYW55KSB8IHsgbmV3ICguLi5hOiBhbnlbXSk6IGFueSB9XG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/XG4gICAgcHJvY2Vzc1xuICA6IHt9KSBhcyB7IFtrOiBzdHJpbmddOiBhbnkgfVxuLyogYzggaWdub3JlIHN0YXJ0ICovXG5cbmNvbnN0IGVtaXRXYXJuaW5nID0gKFxuICBtc2c6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBjb2RlOiBzdHJpbmcsXG4gIGZuOiBGb3JDLFxuKSA9PiB7XG4gIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nID9cbiAgICBQUk9DRVNTLmVtaXRXYXJuaW5nKG1zZywgdHlwZSwgY29kZSwgZm4pXG4gIDogY29uc29sZS5lcnJvcihgWyR7Y29kZX1dICR7dHlwZX06ICR7bXNnfWApXG59XG5cbmxldCBBQyA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyXG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsXG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuaWYgKHR5cGVvZiBBQyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy9AdHMtaWdub3JlXG4gIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgIG9uYWJvcnQ/OiAoLi4uYTogYW55W10pID0+IGFueVxuICAgIF9vbmFib3J0OiAoKC4uLmE6IGFueVtdKSA9PiBhbnkpW10gPSBbXVxuICAgIHJlYXNvbj86IGFueVxuICAgIGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGFkZEV2ZW50TGlzdGVuZXIoXzogc3RyaW5nLCBmbjogKC4uLmE6IGFueVtdKSA9PiBhbnkpIHtcbiAgICAgIHRoaXMuX29uYWJvcnQucHVzaChmbilcbiAgICB9XG4gIH1cbiAgLy9AdHMtaWdub3JlXG4gIEFDID0gY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHdhcm5BQ1BvbHlmaWxsKClcbiAgICB9XG4gICAgc2lnbmFsID0gbmV3IEFTKClcbiAgICBhYm9ydChyZWFzb246IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHJldHVyblxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb25cbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWVcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnNpZ25hbC5fb25hYm9ydCkge1xuICAgICAgICBmbihyZWFzb24pXG4gICAgICB9XG4gICAgICB0aGlzLnNpZ25hbC5vbmFib3J0Py4ocmVhc29uKVxuICAgIH1cbiAgfVxuICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9XG4gICAgUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnXG4gIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgIGlmICghcHJpbnRBQ1BvbHlmaWxsV2FybmluZykgcmV0dXJuXG4gICAgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IGZhbHNlXG4gICAgZW1pdFdhcm5pbmcoXG4gICAgICAnQWJvcnRDb250cm9sbGVyIGlzIG5vdCBkZWZpbmVkLiBJZiB1c2luZyBscnUtY2FjaGUgaW4gJyArXG4gICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgJ3Byb3ZpZGVkIGZvciB1c2UgYnkgTFJVQ2FjaGUuZmV0Y2goKSwgYnV0IGl0IHNob3VsZCBub3QgYmUgJyArXG4gICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgJ1lvdSBtYXkgZGlzYWJsZSB0aGlzIHdpdGggTFJVX0NBQ0hFX0lHTk9SRV9BQ19XQVJOSU5HPTEgaW4gdGhlIGVudi4nLFxuICAgICAgJ05PX0FCT1JUX0NPTlRST0xMRVInLFxuICAgICAgJ0VOT1RTVVAnLFxuICAgICAgd2FybkFDUG9seWZpbGwsXG4gICAgKVxuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGU6IHN0cmluZykgPT4gIXdhcm5lZC5oYXMoY29kZSlcblxuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpXG5leHBvcnQgdHlwZSBQb3NJbnQgPSBudW1iZXIgJiB7IFtUWVBFXTogJ1Bvc2l0aXZlIEludGVnZXInIH1cbmV4cG9ydCB0eXBlIEluZGV4ID0gbnVtYmVyICYgeyBbVFlQRV06ICdMUlVDYWNoZSBJbmRleCcgfVxuXG5jb25zdCBpc1Bvc0ludCA9IChuOiBhbnkpOiBuIGlzIFBvc0ludCA9PlxuICBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobilcblxuZXhwb3J0IHR5cGUgVWludEFycmF5ID0gVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXlcbmV4cG9ydCB0eXBlIE51bWJlckFycmF5ID0gVWludEFycmF5IHwgbnVtYmVyW11cblxuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heDogbnVtYmVyKSA9PlxuICAhaXNQb3NJbnQobWF4KSA/IG51bGxcbiAgOiBtYXggPD0gTWF0aC5wb3coMiwgOCkgPyBVaW50OEFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDE2KSA/IFVpbnQxNkFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKSA/IFVpbnQzMkFycmF5XG4gIDogbWF4IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSID8gWmVyb0FycmF5XG4gIDogbnVsbFxuLyogYzggaWdub3JlIHN0b3AgKi9cblxuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXk8bnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKHNpemU6IG51bWJlcikge1xuICAgIHN1cGVyKHNpemUpXG4gICAgdGhpcy5maWxsKDApXG4gIH1cbn1cbmV4cG9ydCB0eXBlIHsgWmVyb0FycmF5IH1cbmV4cG9ydCB0eXBlIHsgU3RhY2sgfVxuXG5leHBvcnQgdHlwZSBTdGFja0xpa2UgPSBTdGFjayB8IEluZGV4W11cbmNsYXNzIFN0YWNrIHtcbiAgaGVhcDogTnVtYmVyQXJyYXlcbiAgbGVuZ3RoOiBudW1iZXJcbiAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICBzdGF0aWMgI2NvbnN0cnVjdGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN0YXRpYyBjcmVhdGUobWF4OiBudW1iZXIpOiBTdGFja0xpa2Uge1xuICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KVxuICAgIGlmICghSGVhcENscykgcmV0dXJuIFtdXG4gICAgU3RhY2suI2NvbnN0cnVjdGluZyA9IHRydWVcbiAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscylcbiAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2VcbiAgICByZXR1cm4gc1xuICB9XG4gIGNvbnN0cnVjdG9yKG1heDogbnVtYmVyLCBIZWFwQ2xzOiB7IG5ldyAobjogbnVtYmVyKTogTnVtYmVyQXJyYXkgfSkge1xuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJylcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgcHVzaChuOiBJbmRleCkge1xuICAgIHRoaXMuaGVhcFt0aGlzLmxlbmd0aCsrXSA9IG5cbiAgfVxuICBwb3AoKTogSW5kZXgge1xuICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF0gYXMgSW5kZXhcbiAgfVxufVxuXG4vKipcbiAqIFByb21pc2UgcmVwcmVzZW50aW5nIGFuIGluLXByb2dyZXNzIHtAbGluayBMUlVDYWNoZSNmZXRjaH0gY2FsbFxuICovXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBQcm9taXNlPFYgfCB1bmRlZmluZWQ+ICYge1xuICBfX3JldHVybmVkOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWRcbiAgX19hYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBfX3N0YWxlV2hpbGVGZXRjaGluZzogViB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgdHlwZSBEaXNwb3NlVGFzazxLLCBWPiA9IFtcbiAgdmFsdWU6IFYsXG4gIGtleTogSyxcbiAgcmVhc29uOiBMUlVDYWNoZS5EaXNwb3NlUmVhc29uLFxuXVxuXG5leHBvcnQgbmFtZXNwYWNlIExSVUNhY2hlIHtcbiAgLyoqXG4gICAqIEFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHJlZmxlY3RpbmcgdGhlIGNhbGN1bGF0ZWQgc2l6ZSBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgU2l6ZSA9IG51bWJlclxuXG4gIC8qKlxuICAgKiBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwLCByZXByZXNlbnRpbmcgc29tZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBvciB0aGVcbiAgICogdGltZSBhdCB3aGljaCBhIFRUTCBzdGFydGVkIGNvdW50aW5nIGZyb20uXG4gICAqL1xuICBleHBvcnQgdHlwZSBNaWxsaXNlY29uZHMgPSBudW1iZXJcblxuICAvKipcbiAgICogQW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCwgcmVmbGVjdGluZyBhIG51bWJlciBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgQ291bnQgPSBudW1iZXJcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgYW4gaXRlbSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSwgcGFzc2VkXG4gICAqIHRvIHRoZSB7QGxpbmsgRGlzcG9zZXJ9IG1ldGhvZHMuXG4gICAqXG4gICAqIC0gYGV2aWN0YDogVGhlIGl0ZW0gd2FzIGV2aWN0ZWQgYmVjYXVzZSBpdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCxcbiAgICogICBhbmQgdGhlIGNhY2hlIGlzIGZ1bGwuXG4gICAqIC0gYHNldGA6IEEgbmV3IHZhbHVlIHdhcyBzZXQsIG92ZXJ3cml0aW5nIHRoZSBvbGQgdmFsdWUgYmVpbmcgZGlzcG9zZWQuXG4gICAqIC0gYGRlbGV0ZWA6IFRoZSBpdGVtIHdhcyBleHBsaWNpdGx5IGRlbGV0ZWQsIGVpdGhlciBieSBjYWxsaW5nXG4gICAqICAge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX0sIHtAbGluayBMUlVDYWNoZSNjbGVhcn0sIG9yXG4gICAqICAge0BsaW5rIExSVUNhY2hlI3NldH0gd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuXG4gICAqIC0gYGV4cGlyZWA6IFRoZSBpdGVtIHdhcyByZW1vdmVkIGR1ZSB0byBleGNlZWRpbmcgaXRzIFRUTC5cbiAgICogLSBgZmV0Y2hgOiBBIHtAbGluayBPcHRpb25zQmFzZSNmZXRjaE1ldGhvZH0gb3BlcmF0aW9uIHJldHVybmVkXG4gICAqICAgYHVuZGVmaW5lZGAgb3Igd2FzIGFib3J0ZWQsIGNhdXNpbmcgdGhlIGl0ZW0gdG8gYmUgZGVsZXRlZC5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VSZWFzb24gPVxuICAgIHwgJ2V2aWN0J1xuICAgIHwgJ3NldCdcbiAgICB8ICdkZWxldGUnXG4gICAgfCAnZXhwaXJlJ1xuICAgIHwgJ2ZldGNoJ1xuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSByZW1vdmFsLCBwYXNzZWQgYXMgdGhlXG4gICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBhbmQvb3JcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gb3B0aW9ucy5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IERpc3Bvc2VSZWFzb24sXG4gICkgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHdoeSBhbiBpdGVtIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUsIHBhc3NlZFxuICAgKiB0byB0aGUge0BsaW5rIEluc2VydGVyfSBtZXRob2RzLlxuICAgKlxuICAgKiAtIGBhZGRgOiB0aGUgaXRlbSB3YXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgYW5kIHdhcyBhZGRlZFxuICAgKiAtIGB1cGRhdGVgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCB3aXRoIHRoZSBzYW1lIHZhbHVlIHByb3ZpZGVkXG4gICAqIC0gYHJlcGxhY2VgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCBhbmQgcmVwbGFjZWRcbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydFJlYXNvbiA9ICdhZGQnIHwgJ3VwZGF0ZScgfCAncmVwbGFjZSdcblxuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSBpbnNlcnRpb24sIHBhc3NlZCBhcyB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmluc2VydH1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydGVyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IEluc2VydFJlYXNvbixcbiAgKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBlZmZlY3RpdmUgY2FsY3VsYXRlZCBzaXplXG4gICAqIG9mIGFuIGVudHJ5IGluIHRoZSBjYWNoZS5cbiAgICovXG4gIGV4cG9ydCB0eXBlIFNpemVDYWxjdWxhdG9yPEssIFY+ID0gKHZhbHVlOiBWLCBrZXk6IEspID0+IFNpemVcblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hlck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgIG9wdGlvbnM6IEZldGNoZXJGZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgLyoqXG4gICAgICogT2JqZWN0IHByb3ZpZGVkIGluIHRoZSB7QGxpbmsgRmV0Y2hPcHRpb25zLmNvbnRleHR9IG9wdGlvbiB0b1xuICAgICAqIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY2FzaW9uYWxseSwgaXQgbWF5IGJlIHVzZWZ1bCB0byB0cmFjayB0aGUgaW50ZXJuYWwgYmVoYXZpb3Igb2YgdGhlXG4gICAqIGNhY2hlLCBwYXJ0aWN1bGFybHkgZm9yIGxvZ2dpbmcsIGRlYnVnZ2luZywgb3IgZm9yIGJlaGF2aW9yIHdpdGhpbiB0aGVcbiAgICogYGZldGNoTWV0aG9kYC4gVG8gZG8gdGhpcywgeW91IGNhbiBwYXNzIGEgYHN0YXR1c2Agb2JqZWN0IHRvIHRoZVxuICAgKiB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LCB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSwge0BsaW5rIExSVUNhY2hlI3NldH0sXG4gICAqIHtAbGluayBMUlVDYWNoZSNtZW1vfSwgYW5kIHtAbGluayBMUlVDYWNoZSNoYXN9IG1ldGhvZHMuXG4gICAqXG4gICAqIFRoZSBgc3RhdHVzYCBvcHRpb24gc2hvdWxkIGJlIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuIFRoZSBmb2xsb3dpbmdcbiAgICogZmllbGRzIHdpbGwgYmUgc2V0IG9uIGl0IGFwcHJvcHJpYXRlbHksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBTdGF0dXM8Vj4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSBzZXQoKSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiAtIGFkZDogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgYWRkZWRcbiAgICAgKiAtIHVwZGF0ZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgd2l0aCB0aGUgc2FtZSB2YWx1ZSBwcm92aWRlZFxuICAgICAqIC0gcmVwbGFjZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgYW5kIHJlcGxhY2VkXG4gICAgICogLSBtaXNzOiB0aGUgaXRlbSB3YXMgbm90IGFkZGVkIHRvIHRoZSBjYWNoZSBmb3Igc29tZSByZWFzb25cbiAgICAgKi9cbiAgICBzZXQ/OiAnYWRkJyB8ICd1cGRhdGUnIHwgJ3JlcGxhY2UnIHwgJ21pc3MnXG5cbiAgICAvKipcbiAgICAgKiB0aGUgdHRsIHN0b3JlZCBmb3IgdGhlIGl0ZW0sIG9yIHVuZGVmaW5lZCBpZiB0dGxzIGFyZSBub3QgdXNlZC5cbiAgICAgKi9cbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcblxuICAgIC8qKlxuICAgICAqIHRoZSBzdGFydCB0aW1lIGZvciB0aGUgaXRlbSwgb3IgdW5kZWZpbmVkIGlmIHR0bHMgYXJlIG5vdCB1c2VkLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGltZXN0YW1wIHVzZWQgZm9yIFRUTCBjYWxjdWxhdGlvblxuICAgICAqL1xuICAgIG5vdz86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogdGhlIHJlbWFpbmluZyB0dGwgZm9yIHRoZSBpdGVtLCBvciB1bmRlZmluZWQgaWYgdHRscyBhcmUgbm90IHVzZWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nVFRMPzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FsY3VsYXRlZCBzaXplIGZvciB0aGUgaXRlbSwgaWYgc2l6ZXMgYXJlIHVzZWQuXG4gICAgICovXG4gICAgZW50cnlTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNhbGN1bGF0ZWQgc2l6ZSBvZiB0aGUgY2FjaGUsIGlmIHNpemVzIGFyZSB1c2VkLlxuICAgICAqL1xuICAgIHRvdGFsQ2FsY3VsYXRlZFNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBpdGVtIHdhcyBub3Qgc3RvcmVkLCBkdWUgdG8gZXhjZWVkaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplRXhjZWVkZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2xkIHZhbHVlLCBzcGVjaWZpZWQgaW4gdGhlIGNhc2Ugb2YgYHNldDondXBkYXRlJ2Agb3JcbiAgICAgKiBgc2V0OidyZXBsYWNlJ2BcbiAgICAgKi9cbiAgICBvbGRWYWx1ZT86IFZcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXN1bHRzIG9mIGEge0BsaW5rIExSVUNhY2hlI2hhc30gb3BlcmF0aW9uXG4gICAgICpcbiAgICAgKiAtIGhpdDogdGhlIGl0ZW0gd2FzIGZvdW5kIGluIHRoZSBjYWNoZVxuICAgICAqIC0gc3RhbGU6IHRoZSBpdGVtIHdhcyBmb3VuZCBpbiB0aGUgY2FjaGUsIGJ1dCBpcyBzdGFsZVxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBoYXM/OiAnaGl0JyB8ICdzdGFsZScgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG9wZXJhdGlvbi5cbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBjYW4gY2hhbmdlIGFzIHRoZSB1bmRlcmx5aW5nIGZldGNoKCkgbW92ZXMgdGhyb3VnaFxuICAgICAqIHZhcmlvdXMgc3RhdGVzLlxuICAgICAqXG4gICAgICogLSBpbmZsaWdodDogdGhlcmUgaXMgYW5vdGhlciBmZXRjaCgpIGZvciB0aGlzIGtleSB3aGljaCBpcyBpbiBwcm9jZXNzXG4gICAgICogLSBnZXQ6IHRoZXJlIGlzIG5vIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0sIHNvXG4gICAgICogICB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSB3YXMgY2FsbGVkLlxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gaXMgbm90IGluIGNhY2hlLCBhbmQgd2lsbCBiZSBmZXRjaGVkLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgcmVzb2x2ZWQgaW1tZWRpYXRlbHkuXG4gICAgICogLSBzdGFsZTogdGhlIGl0ZW0gaXMgaW4gdGhlIGNhY2hlLCBidXQgc3RhbGUuXG4gICAgICogLSByZWZyZXNoOiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCBub3Qgc3RhbGUsIGJ1dFxuICAgICAqICAge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9IHdhcyBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgZmV0Y2g/OiAnZ2V0JyB8ICdpbmZsaWdodCcgfCAnbWlzcycgfCAnaGl0JyB8ICdzdGFsZScgfCAncmVmcmVzaCdcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHdhcyBjYWxsZWRcbiAgICAgKi9cbiAgICBmZXRjaERpc3BhdGNoZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FjaGVkIHZhbHVlIHdhcyB1cGRhdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfVxuICAgICAqL1xuICAgIGZldGNoVXBkYXRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gZm9yIGEgZmV0Y2goKSByZWplY3Rpb24uICBFaXRoZXIgdGhlIGVycm9yIHJhaXNlZCBieSB0aGVcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBvciB0aGUgcmVhc29uIGZvciBhblxuICAgICAqIEFib3J0U2lnbmFsLlxuICAgICAqL1xuICAgIGZldGNoRXJyb3I/OiBFcnJvclxuXG4gICAgLyoqXG4gICAgICogVGhlIGZldGNoIHJlY2VpdmVkIGFuIGFib3J0IHNpZ25hbFxuICAgICAqL1xuICAgIGZldGNoQWJvcnRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBhYm9ydCBzaWduYWwgcmVjZWl2ZWQgd2FzIGlnbm9yZWQsIGFuZCB0aGUgZmV0Y2ggd2FzIGFsbG93ZWQgdG9cbiAgICAgKiBjb250aW51ZS5cbiAgICAgKi9cbiAgICBmZXRjaEFib3J0SWdub3JlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBmZXRjaE1ldGhvZCBwcm9taXNlIHJlc29sdmVkIHN1Y2Nlc3NmdWxseVxuICAgICAqL1xuICAgIGZldGNoUmVzb2x2ZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmV0Y2hNZXRob2QgcHJvbWlzZSB3YXMgcmVqZWN0ZWRcbiAgICAgKi9cbiAgICBmZXRjaFJlamVjdGVkPzogdHJ1ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiBhIHtAbGluayBMUlVDYWNoZSNnZXR9IG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIC0gZmV0Y2hpbmc6IFRoZSBpdGVtIGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAgSWYgYSBwcmV2aW91cyB2YWx1ZVxuICAgICAqICAgaXMgcHJlc2VudCBhbmQgYWxsb3dlZCwgdGhhdCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIC0gc3RhbGU6IFRoZSBpdGVtIGlzIGluIHRoZSBjYWNoZSwgYW5kIGlzIHN0YWxlLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGVcbiAgICAgKiAtIG1pc3M6IHRoZSBpdGVtIGlzIG5vdCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBnZXQ/OiAnc3RhbGUnIHwgJ2hpdCcgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIEEgZmV0Y2ggb3IgZ2V0IG9wZXJhdGlvbiByZXR1cm5lZCBhIHN0YWxlIHZhbHVlLlxuICAgICAqL1xuICAgIHJldHVybmVkU3RhbGU/OiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogb3B0aW9ucyB3aGljaCBvdmVycmlkZSB0aGUgb3B0aW9ucyBzZXQgaW4gdGhlIExSVUNhY2hlIGNvbnN0cnVjdG9yXG4gICAqIHdoZW4gY2FsbGluZyB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9LCBhbmRcbiAgICoge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9XG4gICAqXG4gICAqIEFueSBvZiB0aGVzZSBtYXkgYmUgbW9kaWZpZWQgaW4gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgZmV0Y2hNZXRob2QgaXMgY2FsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGZXRjaGVyRmV0Y2hPcHRpb25zPEssIFYsIEZDID0gdW5rbm93bj5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICB8ICdhbGxvd1N0YWxlJ1xuICAgICAgfCAndXBkYXRlQWdlT25HZXQnXG4gICAgICB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgICB8ICdzaXplQ2FsY3VsYXRpb24nXG4gICAgICB8ICd0dGwnXG4gICAgICB8ICdub0Rpc3Bvc2VPblNldCdcbiAgICAgIHwgJ25vVXBkYXRlVFRMJ1xuICAgICAgfCAnbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uJ1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdpZ25vcmVGZXRjaEFib3J0J1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCdcbiAgICA+IHtcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgICBzaXplPzogU2l6ZVxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hlckZldGNoT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gYXNcbiAgICAgKiB0aGUge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc1dpdGhDb250ZXh0PEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIEZDPiB7XG4gICAgY29udGV4dDogRkNcbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIHVuZGVmaW5lZD4ge1xuICAgIGNvbnRleHQ/OiB1bmRlZmluZWRcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgICB8ICdub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbidcbiAgICAgIHwgJ2lnbm9yZUZldGNoQWJvcnQnXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaEFib3J0J1xuICAgID4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5tZW1vTWV0aG9kfSBhc1xuICAgICAqIHRoZSB7QGxpbmsgTWVtb2l6ZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zV2l0aENvbnRleHQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIGNvbnRleHQ6IEZDXG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCB1bmRlZmluZWQ+IHtcbiAgICBjb250ZXh0PzogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IGZ1bmN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZW1vaXplck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgb3B0aW9uczogTWVtb2l6ZXJNZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgcHJvdmlkZWQgaW4gdGhlIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fSBvcHRpb24gdG9cbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIG9wdGlvbnMgd2hpY2ggb3ZlcnJpZGUgdGhlIG9wdGlvbnMgc2V0IGluIHRoZSBMUlVDYWNoZSBjb25zdHJ1Y3RvclxuICAgKiB3aGVuIGNhbGxpbmcge0BsaW5rIExSVUNhY2hlI21lbW99LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgTWVtb09wdGlvbnMuZm9yY2VSZWZyZXNofSwgYW5kXG4gICAqIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fVxuICAgKlxuICAgKiBBbnkgb2YgdGhlc2UgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UubWVtb01ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgbWVtb01ldGhvZCBpcyBjYWxsZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9pemVyTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gICAgc2l6ZT86IFNpemVcbiAgICBzdGFydD86IE1pbGxpc2Vjb25kc1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjaGFzfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEhhc09wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPE9wdGlvbnNCYXNlPEssIFYsIEZDPiwgJ3VwZGF0ZUFnZU9uSGFzJz4ge1xuICAgIHN0YXR1cz86IFN0YXR1czxWPlxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEdldE9wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPFxuICAgICAgT3B0aW9uc0Jhc2U8SywgViwgRkM+LFxuICAgICAgJ2FsbG93U3RhbGUnIHwgJ3VwZGF0ZUFnZU9uR2V0JyB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNwZWVrfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFBlZWtPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgUGljazxPcHRpb25zQmFzZTxLLCBWLCBGQz4sICdhbGxvd1N0YWxlJz4ge31cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2V0T3B0aW9uczxLLCBWLCBGQz5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICAnc2l6ZUNhbGN1bGF0aW9uJyB8ICd0dGwnIHwgJ25vRGlzcG9zZU9uU2V0JyB8ICdub1VwZGF0ZVRUTCdcbiAgICA+IHtcbiAgICAvKipcbiAgICAgKiBJZiBzaXplIHRyYWNraW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0dGluZyBhbiBleHBsaWNpdCBzaXplXG4gICAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGwgd2lsbCBwcmV2ZW50IGNhbGxpbmcgdGhlXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnNpemVDYWxjdWxhdGlvbn0gZnVuY3Rpb24uXG4gICAgICovXG4gICAgc2l6ZT86IFNpemVcbiAgICAvKipcbiAgICAgKiBJZiBUVEwgdHJhY2tpbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXR0aW5nIGFuIGV4cGxpY2l0IHN0YXJ0XG4gICAgICogdGltZSBpbiB0aGUge0BsaW5rIExSVUNhY2hlI3NldH0gY2FsbCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgICAqIGRlZmF1bHQgdGltZSBmcm9tIGBwZXJmb3JtYW5jZS5ub3coKWAgb3IgYERhdGUubm93KClgLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGl0IG11c3QgYmUgYSB2YWxpZCB2YWx1ZSBmb3Igd2hpY2hldmVyIHRpbWUtdHJhY2tpbmdcbiAgICAgKiBtZXRob2QgaXMgaW4gdXNlLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvcHRpb24uXG4gICAqL1xuICBleHBvcnQgdHlwZSBGZXRjaGVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogRmV0Y2hlck9wdGlvbnM8SywgViwgRkM+LFxuICApID0+IFByb21pc2U8ViB8IHVuZGVmaW5lZCB8IHZvaWQ+IHwgViB8IHVuZGVmaW5lZCB8IHZvaWRcblxuICAvKipcbiAgICogdGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IG9wdGlvbi5cbiAgICovXG4gIGV4cG9ydCB0eXBlIE1lbW9pemVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPixcbiAgKSA9PiBWXG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogTW9zdCBvZiB0aGVzZSBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdmFyaW91cyBvcHRpb25zIHRoYXQgdXNlXG4gICAqIHRoZW0uXG4gICAqXG4gICAqIERlc3BpdGUgYWxsIGJlaW5nIHRlY2huaWNhbGx5IG9wdGlvbmFsLCB0aGUgY29uc3RydWN0b3IgcmVxdWlyZXMgdGhhdFxuICAgKiBhIGNhY2hlIGlzIGF0IG1pbmltdW0gbGltaXRlZCBieSBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4fSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0sIG9yIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfS5cbiAgICpcbiAgICogSWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgdXNlZCBhbG9uZSwgdGhlbiBpdCBpcyBzdHJvbmdseSBhZHZpc2VkXG4gICAqIChhbmQgaW4gZmFjdCByZXF1aXJlZCBieSB0aGUgdHlwZSBkZWZpbml0aW9ucyBoZXJlKSB0aGF0IHRoZSBjYWNoZVxuICAgKiBhbHNvIHNldCB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfSwgdG8gcHJldmVudCBwb3RlbnRpYWxseVxuICAgKiB1bmJvdW5kZWQgc3RvcmFnZS5cbiAgICpcbiAgICogQWxsIG9wdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGV9IGluc3RhbmNlLCBtYWtpbmdcbiAgICogaXQgc2FmZSB0byBwYXNzIGFuIExSVUNhY2hlIGluc3RhbmNlIGFzIHRoZSBvcHRpb25zIGFyZ3VtZW1udCB0b1xuICAgKiBtYWtlIGFub3RoZXIgZW1wdHkgY2FjaGUgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICpcbiAgICogU29tZSBvcHRpb25zIGFyZSBtYXJrZWQgYXMgcmVhZC1vbmx5LCBiZWNhdXNlIGNoYW5naW5nIHRoZW0gYWZ0ZXJcbiAgICogaW5zdGFudGlhdGlvbiBpcyBub3Qgc2FmZS4gQ2hhbmdpbmcgYW55IG9mIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgb2ZcbiAgICogY291cnNlIG9ubHkgaGF2ZSBhbiBlZmZlY3Qgb24gc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHN0b3JlIGluIHRoZSBjYWNoZSBiZWZvcmUgZXZpY3RpbmdcbiAgICAgKiBvbGQgZW50cmllcy4gVGhpcyBpcyByZWFkLW9ubHkgb24gdGhlIHtAbGluayBMUlVDYWNoZX0gaW5zdGFuY2UsXG4gICAgICogYW5kIG1heSBub3QgYmUgb3ZlcnJpZGRlbi5cbiAgICAgKlxuICAgICAqIElmIHNldCwgdGhlbiBzdG9yYWdlIHNwYWNlIHdpbGwgYmUgcHJlLWFsbG9jYXRlZCBhdCBjb25zdHJ1Y3Rpb25cbiAgICAgKiB0aW1lLCBhbmQgdGhlIGNhY2hlIHdpbGwgcGVyZm9ybSBzaWduaWZpY2FudGx5IGZhc3Rlci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBzaWduaWZpY2FudGx5IGZld2VyIGl0ZW1zIG1heSBiZSBzdG9yZWQsIGlmXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1heFNpemV9IGFuZC9vciB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsfSBhcmUgYWxzb1xuICAgICAqIHNldC5cbiAgICAgKlxuICAgICAqICoqSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc2V0IGEgYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gICAgICogb2YgdGhlIGNhY2hlLioqXG4gICAgICovXG4gICAgbWF4PzogQ291bnRcblxuICAgIC8qKlxuICAgICAqIE1heCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgaXRlbXMgdG8gbGl2ZSBpbiBjYWNoZSBiZWZvcmUgdGhleSBhcmVcbiAgICAgKiBjb25zaWRlcmVkIHN0YWxlLiAgTm90ZSB0aGF0IHN0YWxlIGl0ZW1zIGFyZSBOT1QgcHJlZW1wdGl2ZWx5IHJlbW92ZWQgYnlcbiAgICAgKiBkZWZhdWx0LCBhbmQgTUFZIGxpdmUgaW4gdGhlIGNhY2hlLCBjb250cmlidXRpbmcgdG8gaXRzIExSVSBtYXgsIGxvbmdcbiAgICAgKiBhZnRlciB0aGV5IGhhdmUgZXhwaXJlZCwgdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzXG4gICAgICogc2V0LlxuICAgICAqXG4gICAgICogSWYgc2V0IHRvIGAwYCAodGhlIGRlZmF1bHQgdmFsdWUpLCB0aGVuIHRoYXQgbWVhbnMgXCJkbyBub3QgdHJhY2tcbiAgICAgKiBUVExcIiwgbm90IFwiZXhwaXJlIGltbWVkaWF0ZWx5XCIuXG4gICAgICpcbiAgICAgKiBBbHNvLCBhcyB0aGlzIGNhY2hlIGlzIG9wdGltaXplZCBmb3IgTFJVL01SVSBvcGVyYXRpb25zLCBzb21lIG9mXG4gICAgICogdGhlIHN0YWxlbmVzcy9UVEwgY2hlY2tzIHdpbGwgcmVkdWNlIHBlcmZvcm1hbmNlLCBhcyB0aGV5IHdpbGwgaW5jdXJcbiAgICAgKiBvdmVyaGVhZCBieSBkZWxldGluZyBpdGVtcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IHByaW1hcmlseSBhIFRUTCBjYWNoZSwgYW5kIGRvZXMgbm90IG1ha2Ugc3Ryb25nIFRUTFxuICAgICAqIGd1YXJhbnRlZXMuIFRoZXJlIGlzIG5vIHByZS1lbXB0aXZlIHBydW5pbmcgb2YgZXhwaXJlZCBpdGVtcywgYnV0IHlvdVxuICAgICAqIF9tYXlfIHNldCBhIFRUTCBvbiB0aGUgY2FjaGUsIGFuZCBpdCB3aWxsIHRyZWF0IGV4cGlyZWQgaXRlbXMgYXMgbWlzc2luZ1xuICAgICAqIHdoZW4gdGhleSBhcmUgZmV0Y2hlZCwgYW5kIGRlbGV0ZSB0aGVtLlxuICAgICAqXG4gICAgICogT3B0aW9uYWwsIGJ1dCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaW4gbXMgaWYgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGBjYWNoZS5zZXQoKWAuXG4gICAgICpcbiAgICAgKiBBdCBsZWFzdCBvbmUgb2YgYG1heGAsIGBtYXhTaXplYCwgb3IgYFRUTGAgaXMgcmVxdWlyZWQuIFRoaXMgbXVzdCBiZSBhXG4gICAgICogcG9zaXRpdmUgaW50ZWdlciBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBFdmVuIGlmIHR0bCB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogSWYgdHRsIHRyYWNraW5nIGlzIGVuYWJsZWQsIGFuZCBgbWF4YCBhbmQgYG1heFNpemVgIGFyZSBub3Qgc2V0LFxuICAgICAqIGFuZCBgdHRsQXV0b3B1cmdlYCBpcyBub3Qgc2V0LCB0aGVuIGEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKiBjYXV0aW9uaW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uXG4gICAgICogKFRoZSBUeXBlU2NyaXB0IGRlZmluaXRpb25zIHdpbGwgYWxzbyBkaXNjb3VyYWdlIHRoaXMuKVxuICAgICAqL1xuICAgIHR0bD86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyBpbiB3aGljaCB0byBjaGVjayBmb3Igc3RhbGVuZXNzLlxuICAgICAqIERlZmF1bHRzIHRvIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGN1cnJlbnQgdGltZSBpcyBjaGVja2VkXG4gICAgICogYXQgbW9zdCBvbmNlIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIFNldCB0byAwIHRvIGNoZWNrIHRoZSBjdXJyZW50IHRpbWUgZXZlcnkgdGltZSBzdGFsZW5lc3MgaXMgdGVzdGVkLlxuICAgICAqIChUaGlzIHJlZHVjZXMgcGVyZm9ybWFuY2UsIGFuZCBpcyB0aGVvcmV0aWNhbGx5IHVubmVjZXNzYXJ5LilcbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyB0byBhIGhpZ2hlciB2YWx1ZSB3aWxsIGltcHJvdmUgcGVyZm9ybWFuY2Ugc29tZXdoYXRcbiAgICAgKiB3aGlsZSB1c2luZyB0dGwgdHJhY2tpbmcsIGFsYmVpdCBhdCB0aGUgZXhwZW5zZSBvZiBrZWVwaW5nIHN0YWxlXG4gICAgICogaXRlbXMgYXJvdW5kIGEgYml0IGxvbmdlciB0aGFuIHRoZWlyIFRUTHMgd291bGQgaW5kaWNhdGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbj86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogUHJlZW1wdGl2ZWx5IHJlbW92ZSBzdGFsZSBpdGVtcyBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSAqc2lnbmlmaWNhbnRseSogZGVncmFkZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZlxuICAgICAqIHRoZSBjYWNoZSBpcyBzdG9yaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGl0ZW1zLiBJdCBpcyBhbG1vc3QgYWx3YXlzIGJlc3RcbiAgICAgKiB0byBqdXN0IGxlYXZlIHRoZSBzdGFsZSBpdGVtcyBpbiB0aGUgY2FjaGUsIGFuZCBsZXQgdGhlbSBmYWxsIG91dCBhcyBuZXdcbiAgICAgKiBpdGVtcyBhcmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHtAbGluayBPcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBhIGJpdFxuICAgICAqIHBvaW50bGVzcywgYXMgc3RhbGUgaXRlbXMgd2lsbCBiZSBkZWxldGVkIGFsbW9zdCBhcyBzb29uIGFzIHRoZXlcbiAgICAgKiBleHBpcmUuXG4gICAgICpcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uIVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIHNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgd2lsbFxuICAgICAqIG1ha2UgZWFjaCBpdGVtJ3MgYWdlIHJlc2V0IHRvIDAgd2hlbmV2ZXIgaXQgaXMgcmV0cmlldmVkIGZyb20gY2FjaGUgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW4gc3RpbGwgZmFsbCBvdXRcbiAgICAgKiBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uR2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1c2luZyB0aW1lLWV4cGlyaW5nIGVudHJpZXMgd2l0aCBgdHRsYCwgc2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsXG4gICAgICogbWFrZSBlYWNoIGl0ZW0ncyBhZ2UgcmVzZXQgdG8gMCB3aGVuZXZlciBpdHMgcHJlc2VuY2UgaW4gdGhlIGNhY2hlIGlzXG4gICAgICogY2hlY2tlZCB3aXRoIHtAbGluayBMUlVDYWNoZSNoYXN9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW5cbiAgICAgKiBzdGlsbCBmYWxsIG91dCBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkhhcz86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEFsbG93IHtAbGluayBMUlVDYWNoZSNnZXR9IGFuZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzIHRvIHJldHVyblxuICAgICAqIHN0YWxlIGRhdGEsIGlmIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIHlvdSBzZXQgYHR0bGAsIHN0YWxlIGl0ZW1zIHdpbGwgb25seSBiZSBkZWxldGVkIGZyb20gdGhlXG4gICAgICogY2FjaGUgd2hlbiB5b3UgYGdldChrZXkpYC4gVGhhdCBpcywgaXQncyBub3QgcHJlZW1wdGl2ZWx5IHBydW5pbmcgaXRlbXMsXG4gICAgICogdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzIHNldC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBzZXQgYGFsbG93U3RhbGU6dHJ1ZWAsIGl0J2xsIHJldHVybiB0aGUgc3RhbGUgdmFsdWUgKmFzIHdlbGwgYXMqXG4gICAgICogZGVsZXRpbmcgaXQuIElmIHlvdSBkb24ndCBzZXQgdGhpcywgdGhlbiBpdCdsbCByZXR1cm4gYHVuZGVmaW5lZGAgd2hlblxuICAgICAqIHlvdSB0cnkgdG8gZ2V0IGEgc3RhbGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgd2hlbiBhIHN0YWxlIGVudHJ5IGlzIGZldGNoZWQsIF9ldmVuIGlmIGl0IGlzIHJldHVybmVkIGR1ZSB0b1xuICAgICAqIGBhbGxvd1N0YWxlYCBiZWluZyBzZXRfLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGltbWVkaWF0ZWx5LiBZb3VcbiAgICAgKiBjYW4gc3VwcHJlc3MgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25TdGFsZUdldH0sIGVpdGhlciBpbiB0aGUgY29uc3RydWN0b3IsIG9yIGluXG4gICAgICogdGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI2dldH0uXG4gICAgICpcbiAgICAgKiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgYW4gb3B0aW9ucyBvYmplY3QgdG8gYGNhY2hlLmdldCgpYC5cbiAgICAgKiBUaGUgYGNhY2hlLmhhcygpYCBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBmYWxzZWAgZm9yIHN0YWxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyBzZXQuXG4gICAgICovXG4gICAgYWxsb3dTdGFsZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uIGl0ZW1zIHdoZW4gdGhleSBhcmUgZHJvcHBlZCBmcm9tIHRoZVxuICAgICAqIGNhY2hlLCBhcyBgZGlzcG9zZSh2YWx1ZSwga2V5LCByZWFzb24pYC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2FuIGJlIGhhbmR5IGlmIHlvdSB3YW50IHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgb3IgZG9cbiAgICAgKiBvdGhlciBjbGVhbnVwIHRhc2tzIHdoZW4gaXRlbXMgYXJlIG5vIGxvbmdlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogKipOT1RFKio6IEl0IGlzIGNhbGxlZCBfYmVmb3JlXyB0aGUgaXRlbSBoYXMgYmVlbiBmdWxseSByZW1vdmVkXG4gICAgICogZnJvbSB0aGUgY2FjaGUsIHNvIGlmIHlvdSB3YW50IHRvIHB1dCBpdCByaWdodCBiYWNrIGluLCB5b3UgbmVlZFxuICAgICAqIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgdGljay4gSWYgeW91IHRyeSB0byBhZGQgaXQgYmFjayBpbiBkdXJpbmdcbiAgICAgKiB0aGUgYGRpc3Bvc2UoKWAgZnVuY3Rpb24gY2FsbCwgaXQgd2lsbCBicmVhayB0aGluZ3MgaW4gc3VidGxlIGFuZFxuICAgICAqIHdlaXJkIHdheXMuXG4gICAgICpcbiAgICAgKiBVbmxpa2Ugc2V2ZXJhbCBvdGhlciBvcHRpb25zLCB0aGlzIG1heSBfbm90XyBiZSBvdmVycmlkZGVuIGJ5XG4gICAgICogcGFzc2luZyBhbiBvcHRpb24gdG8gYHNldCgpYCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICpcbiAgICAgKiBUaGUgYHJlYXNvbmAgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzLCBjb3JyZXNwb25kaW5nXG4gICAgICogdG8gdGhlIHJlYXNvbiBmb3IgdGhlIGl0ZW0ncyBkZWxldGlvbjpcbiAgICAgKlxuICAgICAqIC0gYGV2aWN0YCBJdGVtIHdhcyBldmljdGVkIHRvIG1ha2Ugc3BhY2UgZm9yIGEgbmV3IGFkZGl0aW9uXG4gICAgICogLSBgc2V0YCBJdGVtIHdhcyBvdmVyd3JpdHRlbiBieSBhIG5ldyB2YWx1ZVxuICAgICAqIC0gYGV4cGlyZWAgSXRlbSBleHBpcmVkIGl0cyBUVExcbiAgICAgKiAtIGBmZXRjaGAgSXRlbSB3YXMgZGVsZXRlZCBkdWUgdG8gYSBmYWlsZWQgb3IgYWJvcnRlZCBmZXRjaCwgb3IgYVxuICAgICAqICAgZmV0Y2hNZXRob2QgcmV0dXJuaW5nIGB1bmRlZmluZWQuXG4gICAgICogLSBgZGVsZXRlYCBJdGVtIHdhcyByZW1vdmVkIGJ5IGV4cGxpY2l0IGBjYWNoZS5kZWxldGUoa2V5KWAsXG4gICAgICogICBgY2FjaGUuY2xlYXIoKWAsIG9yIGBjYWNoZS5zZXQoa2V5LCB1bmRlZmluZWQpYC5cbiAgICAgKi9cbiAgICBkaXNwb3NlPzogRGlzcG9zZXI8SywgVj5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZSxcbiAgICAgKiBhcyBgb25JbnNlcnQodmFsdWUsIGtleSwgcmVhc29uKWAuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IG5lZWQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gYW4gaXRlbSBpc1xuICAgICAqIGFkZGVkLCBzdWNoIGFzIGxvZ2dpbmcgb3IgdHJhY2tpbmcgaW5zZXJ0aW9ucy5cbiAgICAgKlxuICAgICAqIFVubGlrZSBzb21lIG90aGVyIG9wdGlvbnMsIHRoaXMgbWF5IF9ub3RfIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZ1xuICAgICAqIGFuIG9wdGlvbiB0byBgc2V0KClgLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbnNpc3RlbmN5IHJlYXNvbnMuXG4gICAgICovXG4gICAgb25JbnNlcnQ/OiBJbnNlcnRlcjxLLCBWPlxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2V9LCBidXQgY2FsbGVkICphZnRlciogdGhlIGVudHJ5XG4gICAgICogaXMgY29tcGxldGVseSByZW1vdmVkIGFuZCB0aGUgY2FjaGUgaXMgb25jZSBhZ2FpbiBpbiBhIGNsZWFuIHN0YXRlLlxuICAgICAqXG4gICAgICogSXQgaXMgc2FmZSB0byBhZGQgYW4gaXRlbSByaWdodCBiYWNrIGludG8gdGhlIGNhY2hlIGF0IHRoaXMgcG9pbnQuXG4gICAgICogSG93ZXZlciwgbm90ZSB0aGF0IGl0IGlzICp2ZXJ5KiBlYXN5IHRvIGluYWR2ZXJ0ZW50bHkgY3JlYXRlIGluZmluaXRlXG4gICAgICogcmVjdXJzaW9uIHRoaXMgd2F5LlxuICAgICAqL1xuICAgIGRpc3Bvc2VBZnRlcj86IERpc3Bvc2VyPEssIFY+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyBjYWxsaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBmdW5jdGlvbiBpZiB0aGUgZW50cnkga2V5IGlzXG4gICAgICogc3RpbGwgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvXG4gICAgICoge0BsaW5rIExSVUNhY2hlI3NldH0uXG4gICAgICpcbiAgICAgKiBPbmx5IHJlbGV2YW50IGlmIGBkaXNwb3NlYCBvciBgZGlzcG9zZUFmdGVyYCBhcmUgc2V0LlxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQm9vbGVhbiBmbGFnIHRvIHRlbGwgdGhlIGNhY2hlIHRvIG5vdCB1cGRhdGUgdGhlIFRUTCB3aGVuIHNldHRpbmcgYSBuZXdcbiAgICAgKiB2YWx1ZSBmb3IgYW4gZXhpc3Rpbmcga2V5IChpZSwgd2hlbiB1cGRhdGluZyBhIHZhbHVlIHJhdGhlciB0aGFuXG4gICAgICogaW5zZXJ0aW5nIGEgbmV3IHZhbHVlKS4gIE5vdGUgdGhhdCB0aGUgVFRMIHZhbHVlIGlzIF9hbHdheXNfIHNldCAoaWZcbiAgICAgKiBwcm92aWRlZCkgd2hlbiBhZGRpbmcgYSBuZXcgZW50cnkgaW50byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBIYXMgbm8gZWZmZWN0IGlmIGEge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIE1heSBiZSBwYXNzZWQgYXMgYW4gb3B0aW9uIHRvIHtAbGluayBMUlVDYWNoZSNzZXR9LlxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciB0byB0cmFjayB0aGUgc2l6ZXMgb2YgaXRlbXMgYWRkZWQgdG8gdGhlXG4gICAgICogY2FjaGUsIGFuZCBhdXRvbWF0aWNhbGx5IGV2aWN0IGl0ZW1zIGluIG9yZGVyIHRvIHN0YXkgYmVsb3cgdGhpcyBzaXplLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSByZXN1bHQgaW4gZmV3ZXIgdGhhbiBgbWF4YCBpdGVtcyBiZWluZyBzdG9yZWQuXG4gICAgICpcbiAgICAgKiBBdHRlbXB0aW5nIHRvIGFkZCBhbiBpdGVtIHRvIHRoZSBjYWNoZSB3aG9zZSBjYWxjdWxhdGVkIHNpemUgaXMgZ3JlYXRlclxuICAgICAqIHRoYXQgdGhpcyBhbW91bnQgd2lsbCBiZSBhIG5vLW9wLiBUaGUgaXRlbSB3aWxsIG5vdCBiZSBjYWNoZWQsIGFuZCBub1xuICAgICAqIG90aGVyIGl0ZW1zIHdpbGwgYmUgZXZpY3RlZC5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFNldHMgYG1heEVudHJ5U2l6ZWAgdG8gdGhlIHNhbWUgdmFsdWUsIHVubGVzcyBhIGRpZmZlcmVudCB2YWx1ZSBpc1xuICAgICAqIHByb3ZpZGVkIGZvciBgbWF4RW50cnlTaXplYC5cbiAgICAgKlxuICAgICAqIEF0IGxlYXN0IG9uZSBvZiBgbWF4YCwgYG1heFNpemVgLCBvciBgVFRMYCBpcyByZXF1aXJlZC4gVGhpcyBtdXN0IGJlIGFcbiAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNldC5cbiAgICAgKlxuICAgICAqIEV2ZW4gaWYgc2l6ZSB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogTm90ZSBhbHNvIHRoYXQgc2l6ZSB0cmFja2luZyBjYW4gbmVnYXRpdmVseSBpbXBhY3QgcGVyZm9ybWFuY2UsXG4gICAgICogdGhvdWdoIGZvciBtb3N0IGNhc2VzLCBvbmx5IG1pbmltYWxseS5cbiAgICAgKi9cbiAgICBtYXhTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBhbnkgc2luZ2xlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogSWYgYSBsYXJnZXIgaXRlbSBpcyBwYXNzZWQgdG8ge0BsaW5rIExSVUNhY2hlI3NldH0gb3IgcmV0dXJuZWQgYnkgYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gb3Ige0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9LCB0aGVuXG4gICAgICogaXQgd2lsbCBub3QgYmUgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEF0dGVtcHRpbmcgdG8gYWRkIGFuIGl0ZW0gd2hvc2UgY2FsY3VsYXRlZCBzaXplIGlzIGdyZWF0ZXIgdGhhblxuICAgICAqIHRoaXMgYW1vdW50IHdpbGwgbm90IGNhY2hlIHRoZSBpdGVtIG9yIGV2aWN0IGFueSBvbGQgaXRlbXMsIGJ1dFxuICAgICAqIFdJTEwgZGVsZXRlIGFuIGV4aXN0aW5nIHZhbHVlIGlmIG9uZSBpcyBhbHJlYWR5IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBPcHRpb25hbCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgcHJvdmlkZWQuIERlZmF1bHRzIHRvXG4gICAgICogdGhlIHZhbHVlIG9mIGBtYXhTaXplYCBpZiBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBtYXhFbnRyeVNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBpdGVtJ3Mgc2l6ZS5cbiAgICAgKlxuICAgICAqIFJlcXVpcmVzIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfSB0byBiZSBzZXQuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQsIGFuZCB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4U2l6ZX0gb3JcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfSBhcmUgc2V0LCB0aGVuIGFsbFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGxzICoqbXVzdCoqIHByb3ZpZGUgYW4gZXhwbGljaXRcbiAgICAgKiB7QGxpbmsgU2V0T3B0aW9ucy5zaXplfSBvciBzaXplQ2FsY3VsYXRpb24gcGFyYW0uXG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uPzogU2l6ZUNhbGN1bGF0b3I8SywgVj5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Ige0BsaW5rIExSVUNhY2hlI2ZldGNofVxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgc2lnbmFsLCBvcHRpb25zLCBjb250ZXh0IH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJZiBgZmV0Y2hNZXRob2RgIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBgY2FjaGUuZmV0Y2goa2V5KWAgaXMgZXF1aXZhbGVudFxuICAgICAqIHRvIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICAgKlxuICAgICAqIElmIGF0IGFueSB0aW1lLCBgc2lnbmFsLmFib3J0ZWRgIGlzIHNldCB0byBgdHJ1ZWAsIG9yIGlmIHRoZVxuICAgICAqIGBzaWduYWwub25hYm9ydGAgbWV0aG9kIGlzIGNhbGxlZCwgb3IgaWYgaXQgZW1pdHMgYW4gYCdhYm9ydCdgIGV2ZW50XG4gICAgICogd2hpY2ggeW91IGNhbiBsaXN0ZW4gdG8gd2l0aCBgYWRkRXZlbnRMaXN0ZW5lcmAsIHRoZW4gdGhhdCBtZWFucyB0aGF0XG4gICAgICogdGhlIGZldGNoIHNob3VsZCBiZSBhYmFuZG9uZWQuIFRoaXMgbWF5IGJlIHBhc3NlZCBhbG9uZyB0byBhc3luY1xuICAgICAqIGZ1bmN0aW9ucyBhd2FyZSBvZiBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBUaGUgYGZldGNoTWV0aG9kYCBzaG91bGQgKipvbmx5KiogcmV0dXJuIGB1bmRlZmluZWRgIG9yIGEgUHJvbWlzZVxuICAgICAqIHJlc29sdmluZyB0byBgdW5kZWZpbmVkYCBpZiB0aGUgQWJvcnRDb250cm9sbGVyIHNpZ25hbGVkIGFuIGBhYm9ydGBcbiAgICAgKiBldmVudC4gSW4gYWxsIG90aGVyIGNhc2VzLCBpdCBzaG91bGQgcmV0dXJuIG9yIHJlc29sdmUgdG8gYSB2YWx1ZVxuICAgICAqIHN1aXRhYmxlIGZvciBhZGRpbmcgdG8gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhlIGBvcHRpb25zYCBvYmplY3QgaXMgYSB1bmlvbiBvZiB0aGUgb3B0aW9ucyB0aGF0IG1heSBiZSBwcm92aWRlZCB0b1xuICAgICAqIGBzZXQoKWAgYW5kIGBnZXQoKWAuIElmIHRoZXkgYXJlIG1vZGlmaWVkLCB0aGVuIHRoYXQgd2lsbCByZXN1bHQgaW5cbiAgICAgKiBtb2RpZnlpbmcgdGhlIHNldHRpbmdzIHRvIGBjYWNoZS5zZXQoKWAgd2hlbiB0aGUgdmFsdWUgaXMgcmVzb2x2ZWQsIGFuZFxuICAgICAqIGluIHRoZSBjYXNlIG9mXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbn0gYW5kXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSwgdGhlIGhhbmRsaW5nIG9mXG4gICAgICogYGZldGNoTWV0aG9kYCBmYWlsdXJlcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIEROUyBjYWNoZSBtYXkgdXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gdGhlIHZhbHVlIHJldHVybmVkXG4gICAgICogZnJvbSBhIHJlbW90ZSBETlMgc2VydmVyIGJ5IGNoYW5naW5nIGBvcHRpb25zLnR0bGAgaW4gdGhlIGBmZXRjaE1ldGhvZGAuXG4gICAgICovXG4gICAgZmV0Y2hNZXRob2Q/OiBGZXRjaGVyPEssIFYsIEZDPlxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBtZW1vTWV0aG9kPzogTWVtb2l6ZXI8SywgViwgRkM+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyB0aGUgZGVsZXRpb24gb2Ygc3RhbGUgZGF0YSB3aGVuIGFcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHJldHVybnMgYSByZWplY3RlZCBwcm9taXNlLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIERvIG5vdCBkZWxldGUgc3RhbGUgaXRlbXMgd2hlbiB0aGV5IGFyZSByZXRyaWV2ZWQgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoZSBgZ2V0YCByZXR1cm4gdmFsdWUgd2lsbCBzdGlsbCBiZSBgdW5kZWZpbmVkYFxuICAgICAqIHVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgdHJ1ZS5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIGJ5IGRlZmF1bHQgc3RhbGVcbiAgICAgKiBpdGVtcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUga2V5IGlzIGFjY2Vzc2VkXG4gICAgICogd2l0aCBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YWxlIGl0ZW1zIHRvIHJlbWFpbiBpbiB0aGUgY2FjaGUsIHVudGlsXG4gICAgICogdGhleSBhcmUgZXhwbGljaXRseSBkZWxldGVkIHdpdGggYGNhY2hlLmRlbGV0ZShrZXkpYCwgb3IgcmV0cmlldmVkIHdpdGhcbiAgICAgKiBgbm9EZWxldGVPblN0YWxlR2V0YCBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyB1c2VkLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGFsbG93IHJldHVybmluZyBzdGFsZSBkYXRhIHdoZW4gYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gdGhyb3dzIGFuIGVycm9yIG9yIHJldHVybnMgYSByZWplY3RlZFxuICAgICAqIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGRpZmZlcnMgZnJvbSB1c2luZyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaW4gdGhhdCBzdGFsZVxuICAgICAqIGRhdGEgd2lsbCBPTkxZIGJlIHJldHVybmVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKiBmYWlscywgbm90IGFueSBvdGhlciB0aW1lcy5cbiAgICAgKlxuICAgICAqIElmIGEgYGZldGNoTWV0aG9kYCBmYWlscywgYW5kIHRoZXJlIGlzIG5vIHN0YWxlIHZhbHVlIGF2YWlsYWJsZSwgdGhlXG4gICAgICogYGZldGNoKClgIHdpbGwgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gSWUsIGFsbCBgZmV0Y2hNZXRob2RgIGVycm9ycyBhcmVcbiAgICAgKiBzdXBwcmVzc2VkLlxuICAgICAqXG4gICAgICogSW1wbGllcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIHNldCBpbiBjYWxscyB0byBgZmV0Y2goKWAsIG9yIGRlZmF1bHRlZCBvbiB0aGUgY29uc3RydWN0b3IsXG4gICAgICogb3Igb3ZlcnJpZGRlbiBieSBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluIHRoZSBgZmV0Y2hNZXRob2RgLlxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gcmV0dXJuIGEgc3RhbGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGVcbiAgICAgKiBgQWJvcnRTaWduYWxgIHBhc3NlZCB0byB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBkaXNwYXRjaGVzXG4gICAgICogYW4gYCdhYm9ydCdgIGV2ZW50LCB3aGV0aGVyIHVzZXItdHJpZ2dlcmVkLCBvciBkdWUgdG8gaW50ZXJuYWwgY2FjaGVcbiAgICAgKiBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH0gaXMgYWxzbyBzZXQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgY2FuY2VsZWQsIGFuZFxuICAgICAqIGFueSB2YWx1ZSBpdCByZXR1cm5zIHdpbGwgYmUgaWdub3JlZCBhbmQgbm90IGNhY2hlZC5cbiAgICAgKlxuICAgICAqIENhdmVhdDogc2luY2UgZmV0Y2hlcyBhcmUgYWJvcnRlZCB3aGVuIGEgbmV3IHZhbHVlIGlzIGV4cGxpY2l0bHlcbiAgICAgKiBzZXQgaW4gdGhlIGNhY2hlLCB0aGlzIGNhbiBsZWFkIHRvIGZldGNoIHJldHVybmluZyBhIHN0YWxlIHZhbHVlLFxuICAgICAqIHNpbmNlIHRoYXQgd2FzIHRoZSBmYWxsYmFjayB2YWx1ZSBfYXQgdGhlIG1vbWVudCB0aGUgYGZldGNoKClgIHdhc1xuICAgICAqIGluaXRpYXRlZF8sIGV2ZW4gdGhvdWdoIHRoZSBuZXcgdXBkYXRlZCB2YWx1ZSBpcyBub3cgcHJlc2VudCBpblxuICAgICAqIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBjYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIGFueT4oe1xuICAgICAqICAgdHRsOiAxMDAsXG4gICAgICogICBmZXRjaE1ldGhvZDogYXN5bmMgKHVybCwgb2xkVmFsdWUsIHsgc2lnbmFsIH0pID0+ICB7XG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWwgfSlcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGNhY2hlLnNldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nLCB7IHNvbWU6ICdkYXRhJyB9KVxuICAgICAqIC8vIDEwMG1zIGdvIGJ5Li4uXG4gICAgICogY29uc3QgcmVzdWx0ID0gY2FjaGUuZmV0Y2goJ2h0dHBzOi8vZXhhbXBsZS5jb20vJylcbiAgICAgKiBjYWNoZS5zZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20vJywgeyBvdGhlcjogJ3RoaW5nJyB9KVxuICAgICAqIGNvbnNvbGUubG9nKGF3YWl0IHJlc3VsdCkgLy8geyBzb21lOiAnZGF0YScgfVxuICAgICAqIGNvbnNvbGUubG9nKGNhY2hlLmdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nKSkgLy8geyBvdGhlcjogJ3RoaW5nJyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGlnbm9yZSB0aGUgYGFib3J0YCBldmVudCBlbWl0dGVkIGJ5IHRoZSBgQWJvcnRTaWduYWxgXG4gICAgICogb2JqZWN0IHBhc3NlZCB0byB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBhbmQgc3RpbGwgY2FjaGUgdGhlXG4gICAgICogcmVzdWx0aW5nIHJlc29sdXRpb24gdmFsdWUsIGFzIGxvbmcgYXMgaXQgaXMgbm90IGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIG9uIGl0cyBvd24sIHRoaXMgbWVhbnMgYWJvcnRlZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzXG4gICAgICogYXJlIG5vdCBpbW1lZGlhdGVseSByZXNvbHZlZCBvciByZWplY3RlZCB3aGVuIHRoZXkgYXJlIGFib3J0ZWQsIGFuZFxuICAgICAqIGluc3RlYWQgdGFrZSB0aGUgZnVsbCB0aW1lIHRvIGF3YWl0LlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIHdpdGgge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoQWJvcnR9LCBhYm9ydGVkXG4gICAgICoge0BsaW5rIExSVUNhY2hlI2ZldGNofSBjYWxscyB3aWxsIHJlc29sdmUgaW1tZWRpYXRlbHkgdG8gdGhlaXIgc3RhbGVcbiAgICAgKiBjYWNoZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAsIGFuZCB3aWxsIGNvbnRpbnVlIHRvIHByb2Nlc3MgYW5kIGV2ZW50dWFsbHlcbiAgICAgKiB1cGRhdGUgdGhlIGNhY2hlIHdoZW4gdGhleSByZXNvbHZlLCBhcyBsb25nIGFzIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNcbiAgICAgKiBub3QgYHVuZGVmaW5lZGAsIHRodXMgc3VwcG9ydGluZyBhIFwicmV0dXJuIHN0YWxlIG9uIHRpbWVvdXQgd2hpbGVcbiAgICAgKiByZWZyZXNoaW5nXCIgbWVjaGFuaXNtIGJ5IHBhc3NpbmcgYEFib3J0U2lnbmFsLnRpbWVvdXQobilgIGFzIHRoZSBzaWduYWwuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgYyA9IG5ldyBMUlVDYWNoZSh7XG4gICAgICogICB0dGw6IDEwMCxcbiAgICAgKiAgIGlnbm9yZUZldGNoQWJvcnQ6IHRydWUsXG4gICAgICogICBhbGxvd1N0YWxlT25GZXRjaEFib3J0OiB0cnVlLFxuICAgICAqICAgZmV0Y2hNZXRob2Q6IGFzeW5jIChrZXksIG9sZFZhbHVlLCB7IHNpZ25hbCB9KSA9PiB7XG4gICAgICogICAgIC8vIG5vdGU6IGRvIE5PVCBwYXNzIHRoZSBzaWduYWwgdG8gZmV0Y2goKSFcbiAgICAgKiAgICAgLy8gbGV0J3Mgc2F5IHRoaXMgZmV0Y2ggY2FuIHRha2UgYSBsb25nIHRpbWUuXG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL3Nsb3ctYmFja2VuZC1zZXJ2ZXIvJHtrZXl9YClcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH0sXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCByZXR1cm4gdGhlIHN0YWxlIHZhbHVlIGFmdGVyIDEwMG1zLCB3aGlsZSBzdGlsbFxuICAgICAqIC8vIHVwZGF0aW5nIGluIHRoZSBiYWNrZ3JvdW5kIGZvciBuZXh0IHRpbWUuXG4gICAgICogY29uc3QgdmFsID0gYXdhaXQgYy5mZXRjaCgna2V5JywgeyBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMTAwKSB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogKipOb3RlKio6IHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLCBhbiBgYWJvcnRgIGV2ZW50IF9pcyBzdGlsbFxuICAgICAqIGVtaXR0ZWQgb24gdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0Xywgc28gbWF5IHJlc3VsdCBpbiBpbnZhbGlkIHJlc3VsdHNcbiAgICAgKiB3aGVuIHBhc3NlZCB0byBvdGhlciB1bmRlcmx5aW5nIEFQSXMgdGhhdCB1c2UgQWJvcnRTaWduYWxzLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvciB0aGVcbiAgICAgKiBjYWxsIHRvIHtAbGluayBMUlVDYWNoZSNmZXRjaH0uXG4gICAgICovXG4gICAgaWdub3JlRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byBzd2FwIG91dCB0aGUgcGVyZm9ybWFuY2UvRGF0ZSBvYmplY3RcbiAgICAgKiB1c2VkIGZvciBUVEwgdHJhY2tpbmcuIFRoaXMgc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkgTk9UIGJlIGRvbmUgaW5cbiAgICAgKiBwcm9kdWN0aW9uIGVudmlyb25tZW50cyFcbiAgICAgKlxuICAgICAqIFRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYGdsb2JhbC5wZXJmb3JtYW5jZWAgaWYgaXQgaGFzIGEgYG5vdygpYCBtZXRob2QsXG4gICAgICogb3IgdGhlIGBnbG9iYWwuRGF0ZWAgb2JqZWN0IG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwZXJmPzogUGVyZlxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zTWF4TGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heDogQ291bnRcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cbiAgICBleHRlbmRzIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgdHRsOiBNaWxsaXNlY29uZHNcbiAgICB0dGxBdXRvcHVyZ2U6IGJvb2xlYW5cbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNTaXplTGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heFNpemU6IFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWQgc2FmZSBvcHRpb25zIGZvciB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgT3B0aW9uczxLLCBWLCBGQz4gPVxuICAgIHwgT3B0aW9uc01heExpbWl0PEssIFYsIEZDPlxuICAgIHwgT3B0aW9uc1NpemVMaW1pdDxLLCBWLCBGQz5cbiAgICB8IE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cblxuICAvKipcbiAgICogRW50cnkgb2JqZWN0cyB1c2VkIGJ5IHtAbGluayBMUlVDYWNoZSNsb2FkfSBhbmQge0BsaW5rIExSVUNhY2hlI2R1bXB9LFxuICAgKiBhbmQgcmV0dXJuZWQgYnkge0BsaW5rIExSVUNhY2hlI2luZm99LlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBFbnRyeTxWPiB7XG4gICAgdmFsdWU6IFZcbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcbiAgICBzaXplPzogU2l6ZVxuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlPEsgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBGQyA9IHVua25vd24+IHtcbiAgLy8gb3B0aW9ucyB0aGF0IGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgZGlzYXN0ZXJcbiAgcmVhZG9ubHkgI21heDogTFJVQ2FjaGUuQ291bnRcbiAgcmVhZG9ubHkgI21heFNpemU6IExSVUNhY2hlLlNpemVcbiAgcmVhZG9ubHkgI2Rpc3Bvc2U/OiBMUlVDYWNoZS5EaXNwb3NlcjxLLCBWPlxuICByZWFkb25seSAjb25JbnNlcnQ/OiBMUlVDYWNoZS5JbnNlcnRlcjxLLCBWPlxuICByZWFkb25seSAjZGlzcG9zZUFmdGVyPzogTFJVQ2FjaGUuRGlzcG9zZXI8SywgVj5cbiAgcmVhZG9ubHkgI2ZldGNoTWV0aG9kPzogTFJVQ2FjaGUuRmV0Y2hlcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI21lbW9NZXRob2Q/OiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI3BlcmY6IFBlcmZcblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnBlcmZ9XG4gICAqL1xuICBnZXQgcGVyZigpIHtcbiAgICByZXR1cm4gdGhpcy4jcGVyZlxuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGx9XG4gICAqL1xuICB0dGw6IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICovXG4gIHR0bFJlc29sdXRpb246IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bEF1dG9wdXJnZX1cbiAgICovXG4gIHR0bEF1dG9wdXJnZTogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uR2V0fVxuICAgKi9cbiAgdXBkYXRlQWdlT25HZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc31cbiAgICovXG4gIHVwZGF0ZUFnZU9uSGFzOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX1cbiAgICovXG4gIGFsbG93U3RhbGU6IGJvb2xlYW5cblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgKi9cbiAgbm9EaXNwb3NlT25TZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICovXG4gIG5vVXBkYXRlVFRMOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgKi9cbiAgbWF4RW50cnlTaXplOiBMUlVDYWNoZS5TaXplXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgKi9cbiAgc2l6ZUNhbGN1bGF0aW9uPzogTFJVQ2FjaGUuU2l6ZUNhbGN1bGF0b3I8SywgVj5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAqL1xuICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAqL1xuICBub0RlbGV0ZU9uU3RhbGVHZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgKi9cbiAgaWdub3JlRmV0Y2hBYm9ydDogYm9vbGVhblxuXG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgI3NpemU6IExSVUNhY2hlLkNvdW50XG4gICNjYWxjdWxhdGVkU2l6ZTogTFJVQ2FjaGUuU2l6ZVxuICAja2V5TWFwOiBNYXA8SywgSW5kZXg+XG4gICNrZXlMaXN0OiAoSyB8IHVuZGVmaW5lZClbXVxuICAjdmFsTGlzdDogKFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQpW11cbiAgI25leHQ6IE51bWJlckFycmF5XG4gICNwcmV2OiBOdW1iZXJBcnJheVxuICAjaGVhZDogSW5kZXhcbiAgI3RhaWw6IEluZGV4XG4gICNmcmVlOiBTdGFja0xpa2VcbiAgI2Rpc3Bvc2VkPzogRGlzcG9zZVRhc2s8SywgVj5bXVxuICAjc2l6ZXM/OiBaZXJvQXJyYXlcbiAgI3N0YXJ0cz86IFplcm9BcnJheVxuICAjdHRscz86IFplcm9BcnJheVxuICAjYXV0b3B1cmdlVGltZXJzPzogKHVuZGVmaW5lZCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+KVtdXG5cbiAgI2hhc0Rpc3Bvc2U6IGJvb2xlYW5cbiAgI2hhc0ZldGNoTWV0aG9kOiBib29sZWFuXG4gICNoYXNEaXNwb3NlQWZ0ZXI6IGJvb2xlYW5cbiAgI2hhc09uSW5zZXJ0OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIHVubGVzcyB5b3UgbmVlZCB0byBpbnNwZWN0IHRoZVxuICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICpcbiAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzPFxuICAgIEsgZXh0ZW5kcyB7fSxcbiAgICBWIGV4dGVuZHMge30sXG4gICAgRkMgZXh0ZW5kcyB1bmtub3duID0gdW5rbm93bixcbiAgPihjOiBMUlVDYWNoZTxLLCBWLCBGQz4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgYXV0b3B1cmdlVGltZXJzOiBjLiNhdXRvcHVyZ2VUaW1lcnMsXG4gICAgICBzaXplczogYy4jc2l6ZXMsXG4gICAgICBrZXlNYXA6IGMuI2tleU1hcCBhcyBNYXA8SywgbnVtYmVyPixcbiAgICAgIGtleUxpc3Q6IGMuI2tleUxpc3QsXG4gICAgICB2YWxMaXN0OiBjLiN2YWxMaXN0LFxuICAgICAgbmV4dDogYy4jbmV4dCxcbiAgICAgIHByZXY6IGMuI3ByZXYsXG4gICAgICBnZXQgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI2hlYWRcbiAgICAgIH0sXG4gICAgICBnZXQgdGFpbCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI3RhaWxcbiAgICAgIH0sXG4gICAgICBmcmVlOiBjLiNmcmVlLFxuICAgICAgLy8gbWV0aG9kc1xuICAgICAgaXNCYWNrZ3JvdW5kRmV0Y2g6IChwOiBhbnkpID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgYmFja2dyb3VuZEZldGNoOiAoXG4gICAgICAgIGs6IEssXG4gICAgICAgIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IExSVUNhY2hlLkZldGNoT3B0aW9uczxLLCBWLCBGQz4sXG4gICAgICAgIGNvbnRleHQ6IGFueSxcbiAgICAgICk6IEJhY2tncm91bmRGZXRjaDxWPiA9PlxuICAgICAgICBjLiNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgICAgICAgayxcbiAgICAgICAgICBpbmRleCBhcyBJbmRleCB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICksXG4gICAgICBtb3ZlVG9UYWlsOiAoaW5kZXg6IG51bWJlcik6IHZvaWQgPT4gYy4jbW92ZVRvVGFpbChpbmRleCBhcyBJbmRleCksXG4gICAgICBpbmRleGVzOiAob3B0aW9ucz86IHsgYWxsb3dTdGFsZTogYm9vbGVhbiB9KSA9PiBjLiNpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgcmluZGV4ZXM6IChvcHRpb25zPzogeyBhbGxvd1N0YWxlOiBib29sZWFuIH0pID0+XG4gICAgICAgIGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgaXNTdGFsZTogKGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IGMuI2lzU3RhbGUoaW5kZXggYXMgSW5kZXgpLFxuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZCByZWFkLW9ubHkgbWVtYmVyc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG1heCgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI21heFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBtYXhTaXplKCk6IExSVUNhY2hlLkNvdW50IHtcbiAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZVxuICB9XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY29tcHV0ZWQgc2l6ZSBvZiBpdGVtcyBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBjYWxjdWxhdGVkU2l6ZSgpOiBMUlVDYWNoZS5TaXplIHtcbiAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemVcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI3NpemVcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGZldGNoTWV0aG9kKCk6IExSVUNhY2hlLkZldGNoZXI8SywgViwgRkM+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jZmV0Y2hNZXRob2RcbiAgfVxuICBnZXQgbWVtb01ldGhvZCgpOiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kXG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm9uSW5zZXJ0fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG9uSW5zZXJ0KCkge1xuICAgIHJldHVybiB0aGlzLiNvbkluc2VydFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZUFmdGVyfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyXG4gIH1cblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMUlVDYWNoZS5PcHRpb25zPEssIFYsIEZDPiB8IExSVUNhY2hlPEssIFYsIEZDPikge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heCA9IDAsXG4gICAgICB0dGwsXG4gICAgICB0dGxSZXNvbHV0aW9uID0gMSxcbiAgICAgIHR0bEF1dG9wdXJnZSxcbiAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgdXBkYXRlQWdlT25IYXMsXG4gICAgICBhbGxvd1N0YWxlLFxuICAgICAgZGlzcG9zZSxcbiAgICAgIG9uSW5zZXJ0LFxuICAgICAgZGlzcG9zZUFmdGVyLFxuICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICBub1VwZGF0ZVRUTCxcbiAgICAgIG1heFNpemUgPSAwLFxuICAgICAgbWF4RW50cnlTaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIGZldGNoTWV0aG9kLFxuICAgICAgbWVtb01ldGhvZCxcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICBwZXJmLFxuICAgIH0gPSBvcHRpb25zXG5cbiAgICBpZiAocGVyZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHBlcmY/Lm5vdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdwZXJmIG9wdGlvbiBtdXN0IGhhdmUgYSBub3coKSBtZXRob2QgaWYgc3BlY2lmaWVkJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3BlcmYgPSBwZXJmID8/IGRlZmF1bHRQZXJmXG5cbiAgICBpZiAobWF4ICE9PSAwICYmICFpc1Bvc0ludChtYXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggb3B0aW9uIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5XG4gICAgaWYgKCFVaW50QXJyYXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtYXggdmFsdWU6ICcgKyBtYXgpXG4gICAgfVxuXG4gICAgdGhpcy4jbWF4ID0gbWF4XG4gICAgdGhpcy4jbWF4U2l6ZSA9IG1heFNpemVcbiAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplXG4gICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb25cbiAgICBpZiAodGhpcy5zaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIGlmICghdGhpcy4jbWF4U2l6ZSAmJiAhdGhpcy5tYXhFbnRyeVNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpXG4gICAgfVxuICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kXG5cbiAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZmV0Y2hNZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZldGNoTWV0aG9kIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBzcGVjaWZpZWQnKVxuICAgIH1cbiAgICB0aGlzLiNmZXRjaE1ldGhvZCA9IGZldGNoTWV0aG9kXG4gICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kXG5cbiAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKClcbiAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4jdmFsTGlzdCA9IG5ldyBBcnJheShtYXgpLmZpbGwodW5kZWZpbmVkKVxuICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heClcbiAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpXG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KVxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwXG5cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb25JbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI29uSW5zZXJ0ID0gb25JbnNlcnRcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlQWZ0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IGRpc3Bvc2VBZnRlclxuICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2VcbiAgICB0aGlzLiNoYXNPbkluc2VydCA9ICEhdGhpcy4jb25JbnNlcnRcbiAgICB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgPSAhIXRoaXMuI2Rpc3Bvc2VBZnRlclxuXG4gICAgdGhpcy5ub0Rpc3Bvc2VPblNldCA9ICEhbm9EaXNwb3NlT25TZXRcbiAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTFxuICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb25cbiAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gISFhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydFxuICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydFxuXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnbWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKVxuICAgIH1cblxuICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZVxuICAgIHRoaXMubm9EZWxldGVPblN0YWxlR2V0ID0gISFub0RlbGV0ZU9uU3RhbGVHZXRcbiAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldFxuICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzXG4gICAgdGhpcy50dGxSZXNvbHV0aW9uID1cbiAgICAgIGlzUG9zSW50KHR0bFJlc29sdXRpb24pIHx8IHR0bFJlc29sdXRpb24gPT09IDAgPyB0dGxSZXNvbHV0aW9uIDogMVxuICAgIHRoaXMudHRsQXV0b3B1cmdlID0gISF0dGxBdXRvcHVyZ2VcbiAgICB0aGlzLnR0bCA9IHR0bCB8fCAwXG4gICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0dGwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJylcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpXG4gICAgfVxuXG4gICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgIGlmICh0aGlzLiNtYXggPT09IDAgJiYgdGhpcy50dGwgPT09IDAgJiYgdGhpcy4jbWF4U2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcsXG4gICAgICApXG4gICAgfVxuICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJ1xuICAgICAgaWYgKHNob3VsZFdhcm4oY29kZSkpIHtcbiAgICAgICAgd2FybmVkLmFkZChjb2RlKVxuICAgICAgICBjb25zdCBtc2cgPVxuICAgICAgICAgICdUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiAnICtcbiAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJ1xuICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAqIHJldHVybnMgYDBgLiBSZXR1cm5zIGBJbmZpbml0eWAgaWYgaXRlbSBpcyBpbiBjYWNoZSB3aXRob3V0IGEgZGVmaW5lZCBUVEwuXG4gICAqL1xuICBnZXRSZW1haW5pbmdUVEwoa2V5OiBLKSB7XG4gICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMFxuICB9XG5cbiAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICBjb25zdCB0dGxzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgdGhpcy4jdHRscyA9IHR0bHNcbiAgICB0aGlzLiNzdGFydHMgPSBzdGFydHNcbiAgICBjb25zdCBwdXJnZVRpbWVycyA9XG4gICAgICB0aGlzLnR0bEF1dG9wdXJnZSA/XG4gICAgICAgIG5ldyBBcnJheTx1bmRlZmluZWQgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4odGhpcy4jbWF4KVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPSBwdXJnZVRpbWVyc1xuXG4gICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHRoaXMuI3BlcmYubm93KCkpID0+IHtcbiAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDBcbiAgICAgIHR0bHNbaW5kZXhdID0gdHRsXG4gICAgICBzZXRQdXJnZXRUaW1lcihpbmRleCwgdHRsKVxuICAgIH1cblxuICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UgPSBpbmRleCA9PiB7XG4gICAgICBzdGFydHNbaW5kZXhdID0gdHRsc1tpbmRleF0gIT09IDAgPyB0aGlzLiNwZXJmLm5vdygpIDogMFxuICAgICAgc2V0UHVyZ2V0VGltZXIoaW5kZXgsIHR0bHNbaW5kZXhdKVxuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCB0aGUgcHVyZ2UgdGltZXIgaWYgd2UncmUgc2V0dGluZyBUVEwgdG8gMCwgYW5kXG4gICAgLy8gcHJldmlvdXNseSBoYWQgYSB0dGwgcHVyZ2UgdGltZXIgcnVubmluZywgc28gaXQgZG9lc24ndFxuICAgIC8vIGZpcmUgdW5uZWNlc3NhcmlseS4gRG9uJ3QgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIG5vdCBkb2luZ1xuICAgIC8vIGF1dG9wdXJnZS5cbiAgICBjb25zdCBzZXRQdXJnZXRUaW1lciA9XG4gICAgICAhdGhpcy50dGxBdXRvcHVyZ2UgP1xuICAgICAgICAoKSA9PiB7fVxuICAgICAgOiAoaW5kZXg6IEluZGV4LCB0dGw/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAocHVyZ2VUaW1lcnM/LltpbmRleF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChwdXJnZVRpbWVyc1tpbmRleF0pXG4gICAgICAgICAgICBwdXJnZVRpbWVyc1tpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR0bCAmJiB0dGwgIT09IDAgJiYgcHVyZ2VUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdIGFzIEssICdleHBpcmUnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0dGwgKyAxKVxuICAgICAgICAgICAgLy8gdW5yZWYoKSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgdC51bnJlZigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcHVyZ2VUaW1lcnNbaW5kZXhdID0gdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgdGhpcy4jc3RhdHVzVFRMID0gKHN0YXR1cywgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0dGxzW2luZGV4XSkge1xuICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF1cbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KSByZXR1cm5cbiAgICAgICAgc3RhdHVzLnR0bCA9IHR0bFxuICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydFxuICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpXG4gICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydFxuICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVib3VuY2UgY2FsbHMgdG8gcGVyZi5ub3coKSB0byAxcyBzbyB3ZSdyZSBub3QgaGl0dGluZ1xuICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICBsZXQgY2FjaGVkTm93ID0gMFxuICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0aGlzLiNwZXJmLm5vdygpXG4gICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICBjYWNoZWROb3cgPSBuXG4gICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKVxuICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgdC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBuXG4gICAgfVxuXG4gICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdXG4gICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIEluZmluaXR5XG4gICAgICB9XG4gICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0XG4gICAgICByZXR1cm4gdHRsIC0gYWdlXG4gICAgfVxuXG4gICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdXG4gICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF1cbiAgICAgIHJldHVybiAhIXQgJiYgISFzICYmIChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gcyA+IHRcbiAgICB9XG4gIH1cblxuICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgI3VwZGF0ZUl0ZW1BZ2U6IChpbmRleDogSW5kZXgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAjc3RhdHVzVFRMOiAoc3RhdHVzOiBMUlVDYWNoZS5TdGF0dXM8Vj4sIGluZGV4OiBJbmRleCkgPT4gdm9pZCA9ICgpID0+IHt9XG4gICNzZXRJdGVtVFRMOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHR0bDogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIHN0YXJ0PzogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIC8vIGlnbm9yZSBiZWNhdXNlIHdlIG5ldmVyIGNhbGwgdGhpcyBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbiBUVEwgbW9kZVxuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICApID0+IHZvaWQgPSAoKSA9PiB7fVxuICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG4gICNpc1N0YWxlOiAoaW5kZXg6IEluZGV4KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2VcblxuICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICBjb25zdCBzaXplcyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KVxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemVzID0gc2l6ZXNcbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZSA9IGluZGV4ID0+IHtcbiAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplIC09IHNpemVzW2luZGV4XSBhcyBudW1iZXJcbiAgICAgIHNpemVzW2luZGV4XSA9IDBcbiAgICB9XG4gICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICBpZiAoc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspXG4gICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICdvciBzaXplIG11c3QgYmUgc2V0LicsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2l6ZVxuICAgIH1cbiAgICB0aGlzLiNhZGRJdGVtU2l6ZSA9IChcbiAgICAgIGluZGV4OiBJbmRleCxcbiAgICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgICBzdGF0dXM/OiBMUlVDYWNoZS5TdGF0dXM8Vj4sXG4gICAgKSA9PiB7XG4gICAgICBzaXplc1tpbmRleF0gPSBzaXplXG4gICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICBjb25zdCBtYXhTaXplID0gdGhpcy4jbWF4U2l6ZSAtIChzaXplc1tpbmRleF0gYXMgbnVtYmVyKVxuICAgICAgICB3aGlsZSAodGhpcy4jY2FsY3VsYXRlZFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdIGFzIG51bWJlclxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZW50cnlTaXplID0gc2l6ZVxuICAgICAgICBzdGF0dXMudG90YWxDYWxjdWxhdGVkU2l6ZSA9IHRoaXMuI2NhbGN1bGF0ZWRTaXplXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUl0ZW1TaXplOiAoaW5kZXg6IEluZGV4KSA9PiB2b2lkID0gX2kgPT4ge31cbiAgI2FkZEl0ZW1TaXplOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgc3RhdHVzPzogTFJVQ2FjaGUuU3RhdHVzPFY+LFxuICApID0+IHZvaWQgPSAoX2ksIF9zLCBfc3QpID0+IHt9XG4gICNyZXF1aXJlU2l6ZTogKFxuICAgIGs6IEssXG4gICAgdjogViB8IEJhY2tncm91bmRGZXRjaDxWPixcbiAgICBzaXplPzogTFJVQ2FjaGUuU2l6ZSxcbiAgICBzaXplQ2FsY3VsYXRpb24/OiBMUlVDYWNoZS5TaXplQ2FsY3VsYXRvcjxLLCBWPixcbiAgKSA9PiBMUlVDYWNoZS5TaXplID0gKFxuICAgIF9rOiBLLFxuICAgIF92OiBWIHwgQmFja2dyb3VuZEZldGNoPFY+LFxuICAgIHNpemU/OiBMUlVDYWNoZS5TaXplLFxuICAgIHNpemVDYWxjdWxhdGlvbj86IExSVUNhY2hlLlNpemVDYWxjdWxhdG9yPEssIFY+LFxuICApID0+IHtcbiAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfTtcblxuICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jdGFpbCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI25leHRbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNpc1ZhbGlkSW5kZXgoaW5kZXg6IEluZGV4KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0gYXMgSykgPT09IGluZGV4XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICplbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSlcbiAgICAgICkge1xuICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV0gYXMgW0ssIFZdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIGBba2V5LCB2YWx1ZV1gIHBhaXJzLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJlbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pXG4gICAgICApIHtcbiAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbW9zdCByZWNlbnRseSB1c2VkIHRvIGxlYXN0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqa2V5cygpIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXVxuICAgICAgaWYgKGsgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgeWllbGQga1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqcmtleXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCBrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICp2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV0gYXMgVlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLnZhbHVlc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJ2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICoge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAqL1xuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgKiBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QuIENhbGxlZCBieSB0aGUgYnVpbHQtaW4gbWV0aG9kXG4gICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICovXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0xSVUNhY2hlJ1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgdmFsdWUgZm9yIHdoaWNoIHRoZSBzdXBwbGllZCBmbiBtZXRob2QgcmV0dXJucyBhIHRydXRoeSB2YWx1ZSxcbiAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgKi9cbiAgZmluZChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYm9vbGVhbixcbiAgICBnZXRPcHRpb25zOiBMUlVDYWNoZS5HZXRPcHRpb25zPEssIFYsIEZDPiA9IHt9LFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSBhcyBLLCBnZXRPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBvbiBlYWNoIGl0ZW0gaW4gdGhlIGNhY2hlLCBpbiBvcmRlciBmcm9tIG1vc3RcbiAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgKlxuICAgKiBgZm5gIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICpcbiAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAqIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIHRoZSBjYWNoZSBpZiBubyBgdGhpc3BgIG9iamVjdCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgZm46ICh2OiBWLCBrOiBLLCBzZWxmOiBMUlVDYWNoZTxLLCBWLCBGQz4pID0+IGFueSxcbiAgICB0aGlzcDogYW55ID0gdGhpcyxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAqL1xuICByZm9yRWFjaChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYW55LFxuICAgIHRoaXNwOiBhbnkgPSB0aGlzLFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVyZ2VTdGFsZSgpIHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0gYXMgSywgJ2V4cGlyZScpXG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgKiBUVEwgaW5mbyBzaW11bHRhbmVvdXNseS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgKiBzZXJpYWxpemF0aW9uLCB0aGUgYHN0YXJ0YCB2YWx1ZSBpcyBhbHdheXMgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCBhbmQgdGhlXG4gICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICpcbiAgICogQWx3YXlzIHJldHVybnMgc3RhbGUgdmFsdWVzLCBpZiB0aGVpciBpbmZvIGlzIGZvdW5kIGluIHRoZSBjYWNoZSwgc28gYmVcbiAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgKiBpZiByZWxldmFudC5cbiAgICovXG4gIGluZm8oa2V5OiBLKTogTFJVQ2FjaGUuRW50cnk8Vj4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSB0aGlzIGlzbid0IHRlc3RlZCBmb3IgdGhlIGluZm8gZnVuY3Rpb24sXG4gICAgICogYnV0IGl0J3MgdGhlIHNhbWUgbG9naWMgYXMgZm91bmQgaW4gb3RoZXIgcGxhY2VzLiAqL1xuICAgIGNvbnN0IHZhbHVlOiBWIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIC8qIGM4IGlnbm9yZSBlbmQgKi9cbiAgICBjb25zdCBlbnRyeTogTFJVQ2FjaGUuRW50cnk8Vj4gPSB7IHZhbHVlIH1cbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldXG4gICAgICBpZiAodHRsICYmIHN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtICh0aGlzLiNwZXJmLm5vdygpIC0gc3RhcnQpXG4gICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpblxuICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICogcGFzc2VkIHRvIHtAbGluayBMUlVDYWNoZSNsb2FkfS5cbiAgICpcbiAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgKi9cbiAgZHVtcCgpIHtcbiAgICBjb25zdCBhcnI6IFtLLCBMUlVDYWNoZS5FbnRyeTxWPl1bXSA9IFtdXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWU6IFYgfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGNvbnN0IGVudHJ5OiBMUlVDYWNoZS5FbnRyeTxWPiA9IHsgdmFsdWUgfVxuICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgIGVudHJ5LnR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgICAgLy8gYWx3YXlzIGR1bXAgdGhlIHN0YXJ0IHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgdGltZXN0YW1wXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSB0aGlzLiNwZXJmLm5vdygpIC0gKHRoaXMuI3N0YXJ0c1tpXSBhcyBudW1iZXIpXG4gICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXVxuICAgICAgfVxuICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKVxuICAgIH1cbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAqXG4gICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAqXG4gICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIGxvYWQoYXJyOiBbSywgTFJVQ2FjaGUuRW50cnk8Vj5dW10pIHtcbiAgICB0aGlzLmNsZWFyKClcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBhcnIpIHtcbiAgICAgIGlmIChlbnRyeS5zdGFydCkge1xuICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgIC8vIHdlIGdldCB0aGUgaW50ZW5kZWQgcmVtYWluaW5nIFRUTCwgbm8gbWF0dGVyIGhvdyBsb25nIGl0J3NcbiAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnRcbiAgICAgICAgZW50cnkuc3RhcnQgPSB0aGlzLiNwZXJmLm5vdygpIC0gYWdlXG4gICAgICB9XG4gICAgICB0aGlzLnNldChrZXksIGVudHJ5LnZhbHVlLCBlbnRyeSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICoge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX1cbiAgICpcbiAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zIGZvciB0aGUgc2NvcGVcbiAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAqXG4gICAqIElmIGBzdGFydGAgaXMgcHJvdmlkZWQsIHRoZW4gdGhhdCB3aWxsIHNldCB0aGUgZWZmZWN0aXZlIHN0YXJ0XG4gICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgKiBgRGF0ZS5ub3coKWAgaWYgbm90LlxuICAgKlxuICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAqIGNhbGxpbmcgdGhlIGBzaXplQ2FsY3VsYXRpb25gIGZ1bmN0aW9uIGFuZCBqdXN0IHVzZSB0aGUgc3BlY2lmaWVkXG4gICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAqIG92ZXJ3cml0ZXMuXG4gICAqXG4gICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICogZW50cnkgaXMgZ3JlYXRlciB0aGFuIGBtYXhFbnRyeVNpemVgLCB0aGVuIHRoZSBpdGVtIHdpbGwgbm90IGJlXG4gICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICpcbiAgICogV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGVudHJ5LlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICogYGNhY2hlLmRlbGV0ZShrZXkpYC4gYHVuZGVmaW5lZGAgaXMgbmV2ZXIgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICovXG4gIHNldChcbiAgICBrOiBLLFxuICAgIHY6IFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQsXG4gICAgc2V0T3B0aW9uczogTFJVQ2FjaGUuU2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSxcbiAgKSB7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZWxldGUoaylcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHR0bCA9IHRoaXMudHRsLFxuICAgICAgc3RhcnQsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbixcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gc2V0T3B0aW9uc1xuICAgIGxldCB7IG5vVXBkYXRlVFRMID0gdGhpcy5ub1VwZGF0ZVRUTCB9ID0gc2V0T3B0aW9uc1xuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuI3JlcXVpcmVTaXplKFxuICAgICAgayxcbiAgICAgIHYsXG4gICAgICBzZXRPcHRpb25zLnNpemUgfHwgMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICApXG4gICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBzZXQgdG8gbWF4U2l6ZSBieSBkZWZhdWx0XG4gICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ21pc3MnXG4gICAgICAgIHN0YXR1cy5tYXhFbnRyeVNpemVFeGNlZWRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYWRkaXRpb25cbiAgICAgIGluZGV4ID0gKFxuICAgICAgICB0aGlzLiNzaXplID09PSAwID8gdGhpcy4jdGFpbFxuICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heCA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICA6IHRoaXMuI3NpemUpIGFzIEluZGV4XG4gICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGtcbiAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgdGhpcy4ja2V5TWFwLnNldChrLCBpbmRleClcbiAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleFxuICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsXG4gICAgICB0aGlzLiN0YWlsID0gaW5kZXhcbiAgICAgIHRoaXMuI3NpemUrK1xuICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cylcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5zZXQgPSAnYWRkJ1xuICAgICAgbm9VcGRhdGVUVEwgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMuI29uSW5zZXJ0Py4odiBhcyBWLCBrLCAnYWRkJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlXG4gICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF0gYXMgViB8IEJhY2tncm91bmRGZXRjaDxWPlxuICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICBpZiAodGhpcy4jaGFzRmV0Y2hNZXRob2QgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKSkge1xuICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpXG4gICAgICAgICAgY29uc3QgeyBfX3N0YWxlV2hpbGVGZXRjaGluZzogcyB9ID0gb2xkVmFsXG4gICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcyBhcyBWLCBrLCAnc2V0J10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFub0Rpc3Bvc2VPblNldCkge1xuICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsIGFzIFYsIGssICdzZXQnXSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJ1xuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID1cbiAgICAgICAgICAgIG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpID9cbiAgICAgICAgICAgICAgb2xkVmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IG9sZFZhbFxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSBzdGF0dXMub2xkVmFsdWUgPSBvbGRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ3VwZGF0ZSdcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMub25JbnNlcnQ/Lih2IGFzIFYsIGssIHYgPT09IG9sZFZhbCA/ICd1cGRhdGUnIDogJ3JlcGxhY2UnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKVxuICAgIH1cbiAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMKGluZGV4LCB0dGwsIHN0YXJ0KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgfVxuICAgIGlmICghbm9EaXNwb3NlT25TZXQgJiYgdGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAqL1xuICBwb3AoKTogViB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0aGlzLiNzaXplKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF1cbiAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICBpZiAodmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNldmljdChmcmVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWRcbiAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXSBhcyBLXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF0gYXMgVlxuICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UgfHwgdGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0JylcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKVxuICAgIGlmICh0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LltoZWFkXSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSlcbiAgICAgIHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICAvLyBpZiB3ZSBhcmVuJ3QgYWJvdXQgdG8gdXNlIHRoZSBpbmRleCwgdGhlbiBudWxsIHRoZXNlIG91dFxuICAgIGlmIChmcmVlKSB7XG4gICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiNmcmVlLnB1c2goaGVhZClcbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2hlYWRdIGFzIEluZGV4XG4gICAgfVxuICAgIHRoaXMuI2tleU1hcC5kZWxldGUoaylcbiAgICB0aGlzLiNzaXplLS1cbiAgICByZXR1cm4gaGVhZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZiB1c2UuXG4gICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgKiBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAqIHRvIGB0cnVlYCBpbiBlaXRoZXIgdGhlIG9wdGlvbnMgb3IgdGhlIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgKiB0aGUgY2FjaGUuIFRoZSBkaWZmZXJlbmNlIGNhbiBiZSBkZXRlcm1pbmVkIChpZiBpdCBtYXR0ZXJzKSBieSB1c2luZyBhXG4gICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAqXG4gICAqIFdpbGwgbm90IHVwZGF0ZSBpdGVtIGFnZSB1bmxlc3NcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAqL1xuICBoYXMoazogSywgaGFzT3B0aW9uczogTFJVQ2FjaGUuSGFzT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHsgdXBkYXRlQWdlT25IYXMgPSB0aGlzLnVwZGF0ZUFnZU9uSGFzLCBzdGF0dXMgfSA9IGhhc09wdGlvbnNcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICBpZiAodXBkYXRlQWdlT25IYXMpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCdcbiAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgc3RhdHVzLmhhcyA9ICdzdGFsZSdcbiAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcydcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICogaXRlbXMuXG4gICAqXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgc2V0LlxuICAgKi9cbiAgcGVlayhrOiBLLCBwZWVrT3B0aW9uczogTFJVQ2FjaGUuUGVla09wdGlvbnM8SywgViwgRkM+ID0ge30pIHtcbiAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHBlZWtPcHRpb25zXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgfVxuXG4gICNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgazogSyxcbiAgICBpbmRleDogSW5kZXggfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPixcbiAgICBjb250ZXh0OiBhbnksXG4gICk6IEJhY2tncm91bmRGZXRjaDxWPiB7XG4gICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBhYyA9IG5ldyBBQygpXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnNcbiAgICAvLyB3aGVuL2lmIG91ciBBQyBzaWduYWxzLCB0aGVuIHN0b3AgbGlzdGVuaW5nIHRvIHRoZWlycy5cbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgIH0pXG5cbiAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH1cblxuICAgIGNvbnN0IGNiID0gKHY6IFYgfCB1bmRlZmluZWQsIHVwZGF0ZUNhY2hlID0gZmFsc2UpOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHByb2NlZWQgPVxuICAgICAgICBvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgISEob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZClcbiAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlXG4gICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb25cbiAgICAgICAgICBpZiAoaWdub3JlQWJvcnQpIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIGZldGNoRmFpbChhYy5zaWduYWwucmVhc29uLCBwcm9jZWVkKVxuICAgICAgfVxuICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICAvLyBpZiBub3RoaW5nIGVsc2UgaGFzIGJlZW4gd3JpdHRlbiB0aGVyZSBidXQgd2UncmUgc2V0IHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIGNhY2hlIGFuZCBpZ25vcmUgdGhlIGFib3J0LCBvciBpZiBpdCdzIHN0aWxsIHBlbmRpbmcgb24gdGhpcyBzcGVjaWZpY1xuICAgICAgLy8gYmFja2dyb3VuZCByZXF1ZXN0LCB0aGVuIHdyaXRlIGl0IHRvIHRoZSBjYWNoZS5cbiAgICAgIGNvbnN0IHZsID0gdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF1cbiAgICAgIGlmICh2bCA9PT0gcCB8fCAoaWdub3JlQWJvcnQgJiYgdXBkYXRlQ2FjaGUgJiYgdmwgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4IGFzIEluZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoVXBkYXRlZCA9IHRydWVcbiAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBlYiA9IChlcjogYW55KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWVcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyXG4gICAgICB9XG4gICAgICAvLyBkbyBub3QgcGFzcyBnbywgZG8gbm90IGNvbGxlY3QgJDIwMFxuICAgICAgcmV0dXJuIGZldGNoRmFpbChlciwgZmFsc2UpXG4gICAgfVxuXG4gICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyOiBhbnksIHByb2NlZWQ6IGJvb2xlYW4pOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0XG4gICAgICBjb25zdCBhbGxvd1N0YWxlID1cbiAgICAgICAgYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgICAgY29uc3Qgbm9EZWxldGUgPSBhbGxvd1N0YWxlIHx8IG9wdGlvbnMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPT09IHApIHtcbiAgICAgICAgLy8gaWYgd2UgYWxsb3cgc3RhbGUgb24gZmV0Y2ggcmVqZWN0aW9ucywgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgY29uc3QgZGVsID1cbiAgICAgICAgICAhbm9EZWxldGUgfHwgKCFwcm9jZWVkICYmIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpXG4gICAgICAgIGlmIChkZWwpIHtcbiAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJylcbiAgICAgICAgfSBlbHNlIGlmICghYWxsb3dTdGFsZUFib3J0ZWQpIHtcbiAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgIC8vIGxlYXZlIGl0IHVudG91Y2hlZCBpZiB3ZSdyZSBzdGlsbCB3YWl0aW5nIGZvciBhblxuICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICB9IGVsc2UgaWYgKGJmLl9fcmV0dXJuZWQgPT09IGJmKSB7XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGNhbGwgPSAoXG4gICAgICByZXM6ICh2OiBWIHwgdW5kZWZpbmVkKSA9PiB2b2lkLFxuICAgICAgcmVqOiAoZTogYW55KSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpXG4gICAgICBpZiAoZm1wICYmIGZtcCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlailcbiAgICAgIH1cbiAgICAgIC8vIGlnbm9yZWQsIHdlIGdvIHVudGlsIHdlIGZpbmlzaCwgcmVnYXJkbGVzcy5cbiAgICAgIC8vIGRlZmVyIGNoZWNrIHVudGlsIHdlIGFyZSBhY3R1YWxseSBhYm9ydGluZyxcbiAgICAgIC8vIHNvIGZldGNoTWV0aG9kIGNhbiBvdmVycmlkZS5cbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgcmVzKHVuZGVmaW5lZClcbiAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgcmVzID0gdiA9PiBjYih2LCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWVcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UocGNhbGwpLnRoZW4oY2IsIGViKVxuICAgIGNvbnN0IGJmOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBPYmplY3QuYXNzaWduKHAsIHtcbiAgICAgIF9fYWJvcnRDb250cm9sbGVyOiBhYyxcbiAgICAgIF9fc3RhbGVXaGlsZUZldGNoaW5nOiB2LFxuICAgICAgX19yZXR1cm5lZDogdW5kZWZpbmVkLFxuICAgIH0pXG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSlcbiAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmXG4gICAgfVxuICAgIHJldHVybiBiZlxuICB9XG5cbiAgI2lzQmFja2dyb3VuZEZldGNoKHA6IGFueSk6IHAgaXMgQmFja2dyb3VuZEZldGNoPFY+IHtcbiAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBiID0gcCBhcyBCYWNrZ3JvdW5kRmV0Y2g8Vj5cbiAgICByZXR1cm4gKFxuICAgICAgISFiICYmXG4gICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gYXN5bmNocm9ub3VzIGNhY2hlZCBmZXRjaCB1c2luZyB0aGVcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGluIHRoZSBjYWNoZSBhbmQgbm90IHN0YWxlLCB0aGVuIHRoZSByZXR1cm5lZFxuICAgKiBQcm9taXNlIHJlc29sdmVzIHRvIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogSWYgbm90IGluIHRoZSBjYWNoZSwgb3IgYmV5b25kIGl0cyBUVEwgc3RhbGVuZXNzLCB0aGVuXG4gICAqIGBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgb3B0aW9ucywgc2lnbmFsLCBjb250ZXh0IH0pYCBpc1xuICAgKiBjYWxsZWQsIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgb25jZVxuICAgKiByZXNvbHZlZC5cbiAgICpcbiAgICogSWYgY2FsbGVkIHdpdGggYGFsbG93U3RhbGVgLCBhbmQgYW4gYXN5bmNocm9ub3VzIGZldGNoIGlzXG4gICAqIGN1cnJlbnRseSBpbiBwcm9ncmVzcyB0byByZWxvYWQgYSBzdGFsZSB2YWx1ZSwgdGhlbiB0aGUgZm9ybWVyXG4gICAqIHN0YWxlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIElmIGNhbGxlZCB3aXRoIGBmb3JjZVJlZnJlc2hgLCB0aGVuIHRoZSBjYWNoZWQgaXRlbSB3aWxsIGJlXG4gICAqIHJlLWZldGNoZWQsIGV2ZW4gaWYgaXQgaXMgbm90IHN0YWxlLiBIb3dldmVyLCBpZiBgYWxsb3dTdGFsZWAgaXMgYWxzb1xuICAgKiBzZXQsIHRoZW4gdGhlIG9sZCB2YWx1ZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLiBUaGlzIGlzIHVzZWZ1bFxuICAgKiBpbiBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBmb3JjZSBhIHJlbG9hZCBvZiBhIGNhY2hlZCB2YWx1ZS4gSWZcbiAgICogYSBiYWNrZ3JvdW5kIGZldGNoIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHRoZW4gYGZvcmNlUmVmcmVzaGBcbiAgICogaGFzIG5vIGVmZmVjdC5cbiAgICpcbiAgICogSWYgbXVsdGlwbGUgZmV0Y2hlcyBmb3IgdGhlIHNhbWUga2V5IGFyZSBpc3N1ZWQsIHRoZW4gdGhleSB3aWxsIGFsbCBiZVxuICAgKiBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHRvIGZldGNoTWV0aG9kLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IGhhbmRsaW5nIG9wdGlvbnMgc3VjaCBhc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH0sXG4gICAqIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnMuc2lnbmFsfSxcbiAgICogYW5kIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn0gd2lsbCBiZVxuICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBGSVJTVCBmZXRjaCgpIGNhbGwgZm9yIGEgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBUaGlzIGlzIGEga25vd24gKGZpeGFibGUpIHNob3J0Y29taW5nIHdoaWNoIHdpbGwgYmUgYWRkcmVzZWQgb24gd2hlblxuICAgKiBzb21lb25lIGNvbXBsYWlucyBhYm91dCBpdCwgYXMgdGhlIGZpeCB3b3VsZCBpbnZvbHZlIGFkZGVkIGNvbXBsZXhpdHkgYW5kXG4gICAqIG1heSBub3QgYmUgd29ydGggdGhlIGNvc3RzIGZvciB0aGlzIGVkZ2UgY2FzZS5cbiAgICpcbiAgICogSWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoaXMgaXNcbiAgICogZWZmZWN0aXZlbHkgYW4gYWxpYXMgZm9yIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICpcbiAgICogV2hlbiB0aGUgZmV0Y2ggbWV0aG9kIHJlc29sdmVzIHRvIGEgdmFsdWUsIGlmIHRoZSBmZXRjaCBoYXMgbm90XG4gICAqIGJlZW4gYWJvcnRlZCBkdWUgdG8gZGVsZXRpb24sIGV2aWN0aW9uLCBvciBiZWluZyBvdmVyd3JpdHRlbixcbiAgICogdGhlbiBpdCBpcyBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gICAqXG4gICAqIElmIHRoZSBrZXkgaXMgZXZpY3RlZCBvciBkZWxldGVkIGJlZm9yZSB0aGUgYGZldGNoTWV0aG9kYFxuICAgKiByZXNvbHZlcywgdGhlbiB0aGUgQWJvcnRTaWduYWwgcGFzc2VkIHRvIHRoZSBgZmV0Y2hNZXRob2RgIHdpbGxcbiAgICogcmVjZWl2ZSBhbiBgYWJvcnRgIGV2ZW50LCBhbmQgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgYGZldGNoKClgXG4gICAqIHdpbGwgcmVqZWN0IHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGFib3J0LlxuICAgKlxuICAgKiBJZiBhIGBzaWduYWxgIGlzIHBhc3NlZCB0byB0aGUgYGZldGNoKClgIGNhbGwsIHRoZW4gYWJvcnRpbmcgdGhlXG4gICAqIHNpZ25hbCB3aWxsIGFib3J0IHRoZSBmZXRjaCBhbmQgY2F1c2UgdGhlIGBmZXRjaCgpYCBwcm9taXNlIHRvXG4gICAqIHJlamVjdCB3aXRoIHRoZSByZWFzb24gcHJvdmlkZWQuXG4gICAqXG4gICAqICoqU2V0dGluZyBgY29udGV4dGAqKlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvciwgdGhlbiBhbGxcbiAgICogY2FsbHMgdG8gYGNhY2hlLmZldGNoKClgIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWZcbiAgICogc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlbiBjYWxscyB0byBmZXRjaCBfbXVzdCBub3RfXG4gICAqIHByb3ZpZGUgYSBgY29udGV4dGAgb3B0aW9uLlxuICAgKlxuICAgKiBUaGUgYGNvbnRleHRgIHBhcmFtIGFsbG93cyB5b3UgdG8gcHJvdmlkZSBhcmJpdHJhcnkgZGF0YSB0aGF0XG4gICAqIG1pZ2h0IGJlIHJlbGV2YW50IGluIHRoZSBjb3Vyc2Ugb2YgZmV0Y2hpbmcgdGhlIGRhdGEuIEl0IGlzIG9ubHlcbiAgICogcmVsZXZhbnQgZm9yIHRoZSBjb3Vyc2Ugb2YgYSBzaW5nbGUgYGZldGNoKClgIG9wZXJhdGlvbiwgYW5kXG4gICAqIGRpc2NhcmRlZCBhZnRlcndhcmRzLlxuICAgKlxuICAgKiAqKk5vdGU6IGBmZXRjaCgpYCBjYWxscyBhcmUgaW5mbGlnaHQtdW5pcXVlKipcbiAgICpcbiAgICogSWYgeW91IGNhbGwgYGZldGNoKClgIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLFxuICAgKiB0aGVuIGV2ZXJ5IGNhbGwgYWZ0ZXIgdGhlIGZpcnN0IHdpbGwgcmVzb2x2ZSBvbiB0aGUgc2FtZVxuICAgKiBwcm9taXNlPHN1cD4xPC9zdXA+LFxuICAgKiBfZXZlbiBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IHNldHRpbmdzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgKiB0aGUgYmVoYXZpb3Igb2YgdGhlIGZldGNoXywgc3VjaCBhcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYFxuICAgKiBvciBgaWdub3JlRmV0Y2hBYm9ydGAuXG4gICAqXG4gICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgbm90IGEgcHJvYmxlbSAoaW4gZmFjdCwgb25seSBmZXRjaGluZ1xuICAgKiBzb21ldGhpbmcgb25jZSBpcyB3aGF0IHlvdSBwcm9iYWJseSB3YW50LCBpZiB5b3UncmUgY2FjaGluZyBpblxuICAgKiB0aGUgZmlyc3QgcGxhY2UpLiBJZiB5b3UgYXJlIGNoYW5naW5nIHRoZSBmZXRjaCgpIG9wdGlvbnNcbiAgICogZHJhbWF0aWNhbGx5IGJldHdlZW4gcnVucywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgeW91IG1pZ2h0XG4gICAqIGJlIHRyeWluZyB0byBmaXQgZGl2ZXJnZW50IHNlbWFudGljcyBpbnRvIGEgc2luZ2xlIG9iamVjdCwgYW5kXG4gICAqIHdvdWxkIGJlIGJldHRlciBvZmYgd2l0aCBtdWx0aXBsZSBjYWNoZSBpbnN0YW5jZXMuXG4gICAqXG4gICAqICoqMSoqOiBJZSwgdGhleSdyZSBub3QgdGhlIFwic2FtZSBQcm9taXNlXCIsIGJ1dCB0aGV5IHJlc29sdmUgYXRcbiAgICogdGhlIHNhbWUgdGltZSwgYmVjYXVzZSB0aGV5J3JlIGJvdGggd2FpdGluZyBvbiB0aGUgc2FtZVxuICAgKiB1bmRlcmx5aW5nIGZldGNoTWV0aG9kIHJlc3BvbnNlLlxuICAgKi9cblxuICBmZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj5cblxuICAvLyB0aGlzIG92ZXJsb2FkIG5vdCBhbGxvd2VkIGlmIGNvbnRleHQgaXMgcmVxdWlyZWRcbiAgZmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBWPlxuXG4gIGFzeW5jIGZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIGdldCBvcHRpb25zXG4gICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLFxuICAgICAgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LFxuICAgICAgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAvLyBzZXQgb3B0aW9uc1xuICAgICAgdHRsID0gdGhpcy50dGwsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLFxuICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiA9IHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICBjb250ZXh0LFxuICAgICAgZm9yY2VSZWZyZXNoID0gZmFsc2UsXG4gICAgICBzdGF0dXMsXG4gICAgICBzaWduYWwsXG4gICAgfSA9IGZldGNoT3B0aW9uc1xuXG4gICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZCkge1xuICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmZldGNoID0gJ2dldCdcbiAgICAgIHJldHVybiB0aGlzLmdldChrLCB7XG4gICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCxcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHR0bCxcbiAgICAgIG5vRGlzcG9zZU9uU2V0LFxuICAgICAgc2l6ZSxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIG5vVXBkYXRlVFRMLFxuICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0LFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHNpZ25hbCxcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5mZXRjaCA9ICdtaXNzJ1xuICAgICAgY29uc3QgcCA9IHRoaXMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dClcbiAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gY2FjaGUsIG1heWJlIGFscmVhZHkgZmV0Y2hpbmdcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgIGNvbnN0IHN0YWxlID0gYWxsb3dTdGFsZSAmJiB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCdcbiAgICAgICAgICBpZiAoc3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFsZSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAodi5fX3JldHVybmVkID0gdilcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpXG4gICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiAhaXNTdGFsZSkge1xuICAgICAgICBpZiAoc3RhdHVzKSBzdGF0dXMuZmV0Y2ggPSAnaGl0J1xuICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KVxuICAgICAgICByZXR1cm4gdlxuICAgICAgfVxuXG4gICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KVxuICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHN0YWxlVmFsID0gaGFzU3RhbGUgJiYgYWxsb3dTdGFsZVxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZmV0Y2ggPSBpc1N0YWxlID8gJ3N0YWxlJyA6ICdyZWZyZXNoJ1xuICAgICAgICBpZiAoc3RhbGVWYWwgJiYgaXNTdGFsZSkgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHNvbWUgY2FzZXMsIGBjYWNoZS5mZXRjaCgpYCBtYXkgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCwgZWl0aGVyIGJlY2F1c2VcbiAgICogYSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UjZmV0Y2hNZXRob2R9IHdhcyBub3QgcHJvdmlkZWQgKHR1cm5pbmdcbiAgICogYGNhY2hlLmZldGNoKGspYCBpbnRvIGp1c3QgYW4gYXN5bmMgd3JhcHBlciBhcm91bmQgYGNhY2hlLmdldChrKWApIG9yXG4gICAqIGJlY2F1c2UgYGlnbm9yZUZldGNoQWJvcnRgIHdhcyBzcGVjaWZpZWQgKGVpdGhlciB0byB0aGUgY29uc3RydWN0b3Igb3JcbiAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnN9KS4gQWxzbywgdGhlXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gbWF5IHJldHVybiBgdW5kZWZpbmVkYCBvciBgdm9pZGAsIG1ha2luZ1xuICAgKiB0aGUgdGVzdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQuXG4gICAqXG4gICAqIEJlY2F1c2UgaW5mZXJyaW5nIHRoZSBjYXNlcyB3aGVyZSBgdW5kZWZpbmVkYCBtaWdodCBiZSByZXR1cm5lZCBhcmUgc29cbiAgICogY3VtYmVyc29tZSwgYnV0IHRlc3RpbmcgZm9yIGB1bmRlZmluZWRgIGNhbiBhbHNvIGJlIGFubm95aW5nLCB0aGlzIG1ldGhvZFxuICAgKiBjYW4gYmUgdXNlZCwgd2hpY2ggd2lsbCByZWplY3QgaWYgYHRoaXMuZmV0Y2goKWAgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkLlxuICAgKi9cbiAgZm9yY2VGZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8Vj5cbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIGZvcmNlRmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTxWPlxuICBhc3luYyBmb3JjZUZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8Vj4ge1xuICAgIGNvbnN0IHYgPSBhd2FpdCB0aGlzLmZldGNoKFxuICAgICAgayxcbiAgICAgIGZldGNoT3B0aW9ucyBhcyB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLkZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICAgKVxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKVxuICAgIHJldHVybiB2XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGtleSBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gdGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LiBJZiBub3QsIGluIHRoZSBjYWNoZSwgdGhlbiBjYWxjdWxhdGUgdGhlIHZhbHVlIHVzaW5nXG4gICAqIHRoZSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWVtb01ldGhvZH0sIGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUgTFJVQ2FjaGUgY29uc3RydWN0b3IsIHRoZW4gYWxsIGNhbGxzIHRvIGBjYWNoZS5tZW1vKClgXG4gICAqIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWYgc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlblxuICAgKiBjYWxscyB0byBtZW1vIF9tdXN0IG5vdF8gcHJvdmlkZSBhIGBjb250ZXh0YCBvcHRpb24uXG4gICAqXG4gICAqIFRoZSBgY29udGV4dGAgcGFyYW0gYWxsb3dzIHlvdSB0byBwcm92aWRlIGFyYml0cmFyeSBkYXRhIHRoYXQgbWlnaHQgYmVcbiAgICogcmVsZXZhbnQgaW4gdGhlIGNvdXJzZSBvZiBmZXRjaGluZyB0aGUgZGF0YS4gSXQgaXMgb25seSByZWxldmFudCBmb3IgdGhlXG4gICAqIGNvdXJzZSBvZiBhIHNpbmdsZSBgbWVtbygpYCBvcGVyYXRpb24sIGFuZCBkaXNjYXJkZWQgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIG1lbW8oXG4gICAgazogSyxcbiAgICBtZW1vT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuTWVtb09wdGlvbnM8SywgViwgRkM+XG4gICAgOiBGQyBleHRlbmRzIHVuZGVmaW5lZCB8IHZvaWQgPyBMUlVDYWNoZS5NZW1vT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIDogTFJVQ2FjaGUuTWVtb09wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFZcbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIG1lbW8oXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgbWVtb09wdGlvbnM/OiB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLk1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogVlxuICBtZW1vKGs6IEssIG1lbW9PcHRpb25zOiBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kXG4gICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKVxuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnNcbiAgICBjb25zdCB2ID0gdGhpcy5nZXQoaywgb3B0aW9ucylcbiAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpIHJldHVybiB2XG4gICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH0gYXMgTFJVQ2FjaGUuTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPilcbiAgICB0aGlzLnNldChrLCB2diwgb3B0aW9ucylcbiAgICByZXR1cm4gdnZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAqIGVudHJ5IGZvdW5kLlxuICAgKlxuICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAqL1xuICBnZXQoazogSywgZ2V0T3B0aW9uczogTFJVQ2FjaGUuR2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsXG4gICAgICBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gZ2V0T3B0aW9uc1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmdldCA9ICdzdGFsZSdcbiAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgIGlmICghZmV0Y2hpbmcpIHtcbiAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGF0dXMgJiZcbiAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5nZXQgPSAnaGl0J1xuICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgIC8vIElmIGl0J3Mgbm90IHN0YWxlLCBhbmQgZmV0Y2hpbmcsIEFORCBoYXMgYSBfX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgIGlmIChmZXRjaGluZykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpXG4gICAgICAgIGlmICh1cGRhdGVBZ2VPbkdldCkge1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcydcbiAgICB9XG4gIH1cblxuICAjY29ubmVjdChwOiBJbmRleCwgbjogSW5kZXgpIHtcbiAgICB0aGlzLiNwcmV2W25dID0gcFxuICAgIHRoaXMuI25leHRbcF0gPSBuXG4gIH1cblxuICAjbW92ZVRvVGFpbChpbmRleDogSW5kZXgpOiB2b2lkIHtcbiAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAvLyBlbHNlXG4gICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgIC8vIHByZXZbaW5kZXhdID0gdGFpbFxuICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgIC8vIHRhaWwgPSBpbmRleFxuICAgIGlmIChpbmRleCAhPT0gdGhpcy4jdGFpbCkge1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29ubmVjdChcbiAgICAgICAgICB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgICB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhpcy4jY29ubmVjdCh0aGlzLiN0YWlsLCBpbmRleClcbiAgICAgIHRoaXMuI3RhaWwgPSBpbmRleFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBkZWxldGUoazogSykge1xuICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpXG4gIH1cblxuICAjZGVsZXRlKGs6IEssIHJlYXNvbjogTFJVQ2FjaGUuRGlzcG9zZVJlYXNvbikge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy4jYXV0b3B1cmdlVGltZXJzPy5baW5kZXhdKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVycz8uW2luZGV4XSlcbiAgICAgICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnNbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGssIHJlYXNvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YgYXMgViwgaywgcmVhc29uXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKVxuICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwaSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgICAgdGhpcy4jbmV4dFtwaV0gPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG5pID0gdGhpcy4jbmV4dFtpbmRleF0gYXMgbnVtYmVyXG4gICAgICAgICAgICB0aGlzLiNwcmV2W25pXSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNzaXplLS1cbiAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlZFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKVxuICB9XG4gICNjbGVhcihyZWFzb246IExSVUNhY2hlLkRpc3Bvc2VSZWFzb24pIHtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGsgYXMgSywgcmVhc29uKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiBhcyBWLCBrIGFzIEssIHJlYXNvbl0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKVxuICAgIHRoaXMuI3ZhbExpc3QuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZClcbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKVxuICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMClcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPz8gW10pIHtcbiAgICAgICAgaWYgKHQgIT09IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KHQpXG4gICAgICB9XG4gICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LmZpbGwodW5kZWZpbmVkKVxuICAgIH1cbiAgICBpZiAodGhpcy4jc2l6ZXMpIHtcbiAgICAgIHRoaXMuI3NpemVzLmZpbGwoMClcbiAgICB9XG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMFxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgbGV0IHRhc2s6IERpc3Bvc2VUYXNrPEssIFY+IHwgdW5kZWZpbmVkXG4gICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcImxydS1jYWNoZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYWNoZWRNYXA8SyBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+IGltcGxlbWVudHMgTWFwPEssIFY+IHtcbiAgICByZWFkb25seSBjYWNoZTogTFJVQ2FjaGU8SywgVj47XG4gICAgcmVhZG9ubHkgbWFwOiBNYXA8SywgVj4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBjYWNoZVNpemU6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8SywgVj4oe1xuICAgICAgICAgICAgbWF4OiBvcHRpb25zLmNhY2hlU2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wuaXRlcmF0b3JdO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICBnZXQgZm9yRWFjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmZvckVhY2g7XG4gICAgfVxuICAgIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY2FjaGVkVmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KGtleSk7XG4gICAgfVxuICAgIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHRoaXMge1xuICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5zaXplO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZW50cmllcygpO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAua2V5cygpO1xuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC52YWx1ZXMoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBDYWNoZWRNYXAgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZXhwb3J0LXV0aWxpdHlcIjtcbmltcG9ydCB7IFN0b3JhZ2VFbGVtZW50VHlwZSB9IGZyb20gXCIuL3R5cGVzL1N0b3JhZ2VFbGVtZW50VHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yYWdlTWFuYWdlclN0YXRpYyB7XG4gICAgc3RhdGljIHN0b3JhZ2UgPSBuZXcgQ2FjaGVkTWFwPHN0cmluZywgYW55Pih7IGNhY2hlU2l6ZTogMjAgfSk7XG4gICAgc3RhdGljIGRlZmF1bHQgPSBuZXcgQ2FjaGVkTWFwPHN0cmluZywgYW55Pih7IGNhY2hlU2l6ZTogMjAgfSk7XG4gICAgc3RhdGljIGZsYWdzID0gQXJyYXk8c3RyaW5nPigpO1xuICAgIHN0YXRpYyB0ZW1wU3RvcmFnZSA9IG5ldyBNYXA8c3RyaW5nLCBTdG9yYWdlRWxlbWVudFR5cGU+KCk7XG4gICAgc3RhdGljIHRlbXBTdG9yYWdlRGVhZGxpbmVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgc3RhdGljIGNsZWFyT2xkVGVtcFZhcmlhYmxlcyhvcGVuZWRMYWJlbHNOdW1iZXI6IG51bWJlcikge1xuICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5mb3JFYWNoKChkZWFkbGluZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVhZGxpbmUgPiBvcGVuZWRMYWJlbHNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0VmFyaWFibGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBTdG9yYWdlRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNJblRlbXBTdG9yYWdlID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuaGFzKGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICFpc0luVGVtcFN0b3JhZ2UgJiYgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UubWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICFpc0luVGVtcFN0b3JhZ2UgJiYgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VmFyaWFibGU8VCBleHRlbmRzIFN0b3JhZ2VFbGVtZW50VHlwZT4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLm1hcC5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmRlZmF1bHQuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHJlc3VsdCkgYXMgVDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlVmFyaWFibGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0RmxhZyhrZXk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmxhZ3MuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5mbGFncy5pbmRleE9mKGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGbGFnKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYWdzLmluY2x1ZGVzKGtleSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0b3JhZ2VNYW5hZ2VyU3RhdGljIGZyb20gXCIuLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuXG4vKipcbiAqIFN0b3JlZENsYXNzTW9kZWwgaXMgYSBhYnN0cmFjdCBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRob2RzIHRvIHN0b3JlIGEgY2xhc3MgaW4gdGhlIGdhbWUuXG4gKiBJIHN1Z2dlc3QgeW91IGV4dGVuZCB0aGlzIGNsYXNzIHRvIGNyZWF0ZSB5b3VyIG93biBzdG9yZWQgY2xhc3MuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIENoYXJhY3RlckJhc2VNb2RlbCBleHRlbmRzIFN0b3JlZENsYXNzTW9kZWwgaW1wbGVtZW50cyBDaGFyYWN0ZXJCYXNlTW9kZWxQcm9wcyB7XG4gKiAgICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IENoYXJhY3RlckJhc2VNb2RlbFByb3BzKSB7XG4gKiAgICAgICAgIHN1cGVyKFwiX19fY2hhcmFjdGVyX19fXCIsIGlkKVxuICogICAgICAgICB0aGlzLmRlZmF1bHROYW1lID0gcHJvcHMubmFtZVxuICogICAgICAgICB0aGlzLmRlZmF1bHRTdXJuYW1lID0gcHJvcHMuc3VybmFtZVxuICogICAgIH1cbiAqICAgICBwcml2YXRlIGRlZmF1bHROYW1lOiBzdHJpbmcgPSBcIlwiXG4gKiAgICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZVByb3BlcnR5PHN0cmluZz4oXCJuYW1lXCIpIHx8IHRoaXMuZGVmYXVsdE5hbWVcbiAqICAgICB9XG4gKiAgICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICogICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwibmFtZVwiLCB2YWx1ZSlcbiAqICAgICB9XG4gKiAgICAgcHJpdmF0ZSBkZWZhdWx0U3VybmFtZT86IHN0cmluZ1xuICogICAgIGdldCBzdXJuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gKiAgICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwic3VybmFtZVwiKSB8fCB0aGlzLmRlZmF1bHRTdXJuYW1lXG4gKiAgICAgfVxuICogICAgIHNldCBzdXJuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAqICAgICAgICAgdGhpcy5zZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcInN1cm5hbWVcIiwgdmFsdWUpXG4gKiAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JlZENsYXNzTW9kZWwge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBpZCBvZiB0aGUgY2F0ZWdvcnkuIEZvciBleGFtcGxlIGlmIHlvdSBhcmUgc3RvcmluZyBhIGNoYXJhY3RlciBjbGFzcywgeW91IGNhbiB1c2UgXCJjaGFyYWN0ZXJzXCIgYXMgY2F0ZWdvcnlJZC4gc28gYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVyIGNsYXNzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBcImNoYXJhY3RlcnNcIiBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4gVGhpcyBpZCBtdXN0IGJlIHVuaXF1ZSBmb3IgdGhlIGNhdGVnb3J5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5SWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIGlkIG9mIHRoZSBzdG9yZWQgY2xhc3MuIGlzIHVuaXF1ZSBmb3IgdGhpcyBjbGFzcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHByaXZhdGUgY2F0ZWdvcnlJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIHRoZSBzdG9yYWdlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gSWYgaXMgdW5kZWZpbmVkLCB0aGUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IFQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VWYWx1ZSA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmdldFZhcmlhYmxlPGFueT4odGhpcy5jYXRlZ29yeUlkKTtcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHN0b3JhZ2Ugbm90IGhhdmUgYSBrZXkgd2l0aCB0aGUgaWRcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUuaGFzT3duUHJvcGVydHkodGhpcy5pZCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzdG9yYWdlVmFsdWVbdGhpcy5pZF0uaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdG9yYWdlVmFsdWVbdGhpcy5pZF1bcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHsgLi4uc3RvcmFnZVZhbHVlW3RoaXMuaWRdLCBbcHJvcGVydHlOYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdG9yYWdlVmFsdWVbdGhpcy5pZF0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnNldFZhcmlhYmxlKHRoaXMuY2F0ZWdvcnlJZCwgc3RvcmFnZVZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgcHJvcGVydHkgZnJvbSB0aGUgc3RvcmFnZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIGlkVG9Vc2UgVGhlIGlkIG9mIHRoZSBpbnN0YW5jZSB0byBnZXQgdGhlIHByb3BlcnR5LiBAZGVmYXVsdCB0aGlzLmlkXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyB1bmRlZmluZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgaWRUb1VzZTogc3RyaW5nID0gdGhpcy5pZCk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgc3RvcmFnZVZhbHVlID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMuZ2V0VmFyaWFibGU8YW55Pih0aGlzLmNhdGVnb3J5SWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdG9yYWdlVmFsdWUgJiZcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZS5oYXNPd25Qcm9wZXJ0eShpZFRvVXNlKSAmJlxuICAgICAgICAgICAgc3RvcmFnZVZhbHVlW2lkVG9Vc2VdLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZVZhbHVlW2lkVG9Vc2VdW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGRpYWxvZ3VlIG1lbW9yeVxuICAgICAqL1xuICAgIENVUlJFTlRfRElBTE9HVUVfTUVNT1JZX0tFWTogXCJfX19jdXJyZW50X2RpYWxvZ3VlX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGxhc3QgZGlhbG9ndWUgYWRkZWQgaW4gdGhlIHN0ZXAgbWVtb3J5XG4gICAgICovXG4gICAgTEFTVF9ESUFMT0dVRV9BRERFRF9JTl9TVEVQX01FTU9SWV9LRVk6IFwiX19fbGFzdF9kaWFsb2d1ZV9hZGRlZF9pbl9zdGVwX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgbWVudSBvcHRpb25zIG1lbW9yeVxuICAgICAqL1xuICAgIENVUlJFTlRfTUVOVV9PUFRJT05TX01FTU9SWV9LRVk6IFwiX19fY3VycmVudF9tZW51X29wdGlvbnNfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBtZW51IG9wdGlvbnMgYWRkZWQgaW4gdGhlIHN0ZXAgbWVtb3J5XG4gICAgICovXG4gICAgTEFTVF9NRU5VX09QVElPTlNfQURERURfSU5fU1RFUF9NRU1PUllfS0VZOiBcIl9fX2xhc3RfbWVudV9vcHRpb25zX2FkZGVkX2luX3N0ZXBfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgaW5wdXQgbWVtb3J5LiBUaGlzIHZhbHVlIGNhbiBiZSByZWFkIGJ5IHBpeGktdm4ganNvbiBpbXBvcnRlclxuICAgICAqL1xuICAgIENVUlJFTlRfSU5QVVRfVkFMVUVfTUVNT1JZX0tFWTogXCJfaW5wdXRfdmFsdWVfXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBpbnB1dCBhZGRlZCBpbiB0aGUgc3RlcCBtZW1vcnlcbiAgICAgKi9cbiAgICBMQVNUX0lOUFVUX0FEREVEX0lOX1NURVBfTUVNT1JZX0tFWTogXCJfX19sYXN0X2lucHV0X2FkZGVkX2luX3N0ZXBfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgY3VycmVudCBpbnB1dCBpbmZvXG4gICAgICovXG4gICAgQ1VSUkVOVF9JTlBVVF9JTkZPX01FTU9SWV9LRVk6IFwiX19fY3VycmVudF9pbnB1dF9pbmZvX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGNoYXJhY3RlcnMgbWVtb3J5XG4gICAgICovXG4gICAgQ0hBUkFDVEVSX0NBVEVHT1JZX0tFWTogXCJfX19jaGFyYWN0ZXJfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gYWRkIHRoZSBuZXh0IGRpYWxvZyB0ZXh0IGludG8gdGhlIGN1cnJlbnQgZGlhbG9nIG1lbW9yeS5cbiAgICAgKiBUaGlzIHZhbHVlIHdhcyBhZGRlZCB0byBpbnRyb2R1Y2UgSW5rIEdsdWUgZnVuY3Rpb25hbGl0eSBodHRwczovL2dpdGh1Yi5jb20vaW5rbGUvaW5rL2Jsb2IvbWFzdGVyL0RvY3VtZW50YXRpb24vV3JpdGluZ1dpdGhJbmsubWQjZ2x1ZVxuICAgICAqL1xuICAgIEFERF9ORVhUX0RJQUxPR19URVhUX0lOVE9fVEhFX0NVUlJFTlRfRElBTE9HX0ZMQUdfS0VZOiBcIl9fX2dsdWVfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIGEgbGlzdCBvZiBhbGwgbGFiZWxzIHRoYXQgaGF2ZSBiZWVuIG9wZW5lZCBkdXJpbmcgdGhlIHByb2dyZXNzaW9uIG9mIHRoZSBzdGVwcy5cbiAgICAgKi9cbiAgICBPUEVORURfTEFCRUxTX0NPVU5URVJfS0VZOiBcIl9fX29wZW5lZF9sYWJlbHNfY291bnRlcl9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgYSBsaXN0IG9mIGFsbCBjaG9pY2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBwcm9ncmVzc2lvbiBvZiB0aGUgc3RlcHMuXG4gICAgICovXG4gICAgQUxMX0NIT0lDRVNfTUFERV9LRVk6IFwiX19fYWxsX2Nob2ljZXNfbWFkZV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgc3RlcCB0aW1lcyBjb3VudGVyLlxuICAgICAqIFRoaXMgdmFsdWUgd2FzIGFkZGVkIHRvIGludHJvZHVjZSBJbmsgU2VxdWVuY2VzLCBjeWNsZXMgYW5kIG90aGVyIGFsdGVybmF0aXZlcyBodHRwczovL2dpdGh1Yi5jb20vaW5rbGUvaW5rL2Jsb2IvbWFzdGVyL0RvY3VtZW50YXRpb24vV3JpdGluZ1dpdGhJbmsubWQjc2VxdWVuY2VzLWN5Y2xlcy1hbmQtb3RoZXItYWx0ZXJuYXRpdmVzXG4gICAgICovXG4gICAgQ1VSUkVOVF9TVEVQX1RJTUVTX0NPVU5URVJfS0VZOiBcIl9fX2N1cnJlbnRfc3RlcF90aW1lc19jb3VudGVyX19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBkaWFsb2d1ZSBzdGVwIGdsdWVkIGluIHRoZSBzdGVwIG1lbW9yeVxuICAgICAqL1xuICAgIExBU1RfU1RFUF9HTFVFRDogXCJfX19sYXN0X3N0ZXBfZ2x1ZWRfX19cIixcbn07XG4iLCJpbXBvcnQgU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2UgZnJvbSBcIi4vaW50ZXJmYWNlcy9TdG9yYWdlTWFuYWdlckludGVyZmFjZVwiO1xuaW1wb3J0IFN0b3JhZ2VNYW5hZ2VyIGZyb20gXCIuL1N0b3JhZ2VNYW5hZ2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcmVkQ2xhc3NNb2RlbCB9IGZyb20gXCIuL2NsYXNzZXMvU3RvcmVkQ2xhc3NNb2RlbFwiO1xuZXhwb3J0IHsgU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0IHR5cGUgeyBkZWZhdWx0IGFzIFN0b3JhZ2VHYW1lU3RhdGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1N0b3JhZ2VHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTdG9yYWdlTWFuYWdlckludGVyZmFjZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcmFnZU1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuZXhwb3J0IHR5cGUgeyBTdG9yYWdlRWxlbWVudFR5cGUsIFN0b3JhZ2VPYmplY3RUeXBlIH0gZnJvbSBcIi4vdHlwZXMvU3RvcmFnZUVsZW1lbnRUeXBlXCI7XG5leHBvcnQgeyBzdG9yYWdlIH07XG5cbmNvbnN0IHN0b3JhZ2U6IFN0b3JhZ2VNYW5hZ2VySW50ZXJmYWNlID0gbmV3IFN0b3JhZ2VNYW5hZ2VyKCk7XG4iXX0=