@vonage/ml-transformers 4.3.5 → 4.3.6
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Hl=Object.defineProperty,Nl=(t,e,n)=>e in t?Hl(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Wt=(t,e,n)=>(Nl(t,"symbol"!=typeof e?e+"":e,n),n),Jl=Object.defineProperty,El=(t,e,n)=>e in t?Jl(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Ke=(t,e,n)=>(El(t,"symbol"!=typeof e?e+"":e,n),n);function kl(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class nr{}Ke(nr,"updates",{transformer_new:"New transformer",transformer_null:"Null transformer"}),Ke(nr,"errors",{transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"});const ir=new WeakMap,ci=new WeakMap,Er=new WeakMap,eo=Symbol("anyProducer"),Oo=Promise.resolve(),fi=Symbol("listenerAdded"),mi=Symbol("listenerRemoved");let zi=!1;function Rr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function Dr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function xr(t,e){const n=ci.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function kr(t,e){const n="string"==typeof e||"symbol"==typeof e?e:eo,r=Er.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function Ul(t,e,n){const r=Er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(eo)){const t=Promise.all([e,n]);for(const e of r.get(eo))e.enqueue(t)}}function Po(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)kr(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)kr(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function _o(t){if(void 0===t)return Qo;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Qo.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Oi=t=>t===fi||t===mi;class Gr{static mixin(t,e){return e=_o(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Gr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return zi;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||zi}static set isDebugEnabled(t){zi=t}constructor(t={}){ir.set(this,new Set),ci.set(this,new Map),Er.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){Dr(e),t=Array.isArray(t)?t:[t];for(const n of t)Rr(n),xr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),Oi(n)||this.emit(fi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){Dr(e),t=Array.isArray(t)?t:[t];for(const n of t)Rr(n),xr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),Oi(n)||this.emit(mi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Rr(e);return Po(this,t)}async emit(t,e){Rr(t),this.logIfDebugEnabled("emit",t,e),Ul(this,t,e);const n=xr(this,t),r=ir.get(this),i=[...n],o=Oi(t)?[]:[...r];await Oo,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Rr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=xr(this,t),r=ir.get(this),i=[...n],o=[...r];await Oo;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return Dr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ir.get(this).add(t),this.emit(fi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Po(this)}offAny(t){Dr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(mi,{listener:t}),ir.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){xr(this,e).clear();const t=kr(this,e);for(const e of t)e.finish();t.clear()}else{ir.get(this).clear();for(const t of ci.get(this).values())t.clear();for(const t of Er.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Rr(n),e+=ir.get(this).size;for(const t of ci.get(this).values())e+=t.size;for(const t of Er.get(this).values())e+=t.size}else e+=ir.get(this).size+xr(this,n).size+kr(this,n).size+kr(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=_o(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Qo=Object.getOwnPropertyNames(Gr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Gr,"listenerAdded",{value:fi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Gr,"listenerRemoved",{value:mi,writable:!1,enumerable:!0,configurable:!1});var fo=Gr;function Bl(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function Al(t){if(Bl(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function Pi(t){return Al(t).message}var Ml=Object.defineProperty,Kl=(t,e,n)=>e in t?Ml(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,jl=(t,e,n)=>(Kl(t,"symbol"!=typeof e?e+"":e,n),n);const zl="hlg.tokbox.com/prod/logging/vcp_webrtc",Ol="https://",Pl=1e4;let $r;const _l=new Uint8Array(16);function Ql(){if(!$r&&($r=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!$r))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $r(_l)}const Un=[];for(let t=0;t<256;++t)Un.push((t+256).toString(16).slice(1));function Dl(t,e=0){return(Un[t[e+0]]+Un[t[e+1]]+Un[t[e+2]]+Un[t[e+3]]+"-"+Un[t[e+4]]+Un[t[e+5]]+"-"+Un[t[e+6]]+Un[t[e+7]]+"-"+Un[t[e+8]]+Un[t[e+9]]+"-"+Un[t[e+10]]+Un[t[e+11]]+Un[t[e+12]]+Un[t[e+13]]+Un[t[e+14]]+Un[t[e+15]]).toLowerCase()}const $l=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Do={randomUUID:$l};function ql(t,e,n){if(Do.randomUUID&&!e&&!t)return Do.randomUUID();const r=(t=t||{}).random||(t.rng||Ql)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return Dl(r)}function mo(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}const lr=mo("globals",{});var gr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(gr||{});function Gs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let t2=0;function e2(t,e,n,r,i){const o=t2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Gs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function jr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Gs(t))))}const $o=mo("workerized",{});function Xs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function n2(){if(Xs())jr({type:gr.GLOBALS_SYNC},lr);else{const t=[];for(const e in $o){const{worker:n,resolvers:r}=$o[e].workerContext;n&&t.push(e2(n,gr.GLOBALS_SYNC,"",[lr],r))}await Promise.all(t)}}function pi(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],pi(t[n],e[n])):"object"==typeof t[n]?(e[n]={},pi(t[n],e[n])):e[n]=t[n]}async function r2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;jr(t,await e.instance[n](...null!=r?r:[]))}const i2=mo("registeredWorkers",{});function o2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=i2[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),pi(r,lr),jr(t,void 0!==typeof e.instance)}async function s2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),jr(t,r)}function l2(t){if(!t.args)throw"Missing globals while syncing";pi(t.args[0],lr),jr(t,{})}function c2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case gr.INIT:o2(n,t);break;case gr.FORWARD:r2(n,t);break;case gr.TERMINATE:s2(n,t);break;case gr.GLOBALS_SYNC:l2(n)}}}function u2(t,e){return lr[t]||(lr[t]=e),[()=>lr[t],async e=>{lr[t]=e,await n2()}]}function a2(t,e){return u2(t,e)}Xs()&&c2();const[d2,h2]=a2("metadata");function f2(t){h2(t)}function ui(){return d2()}class po{constructor(t){jl(this,"uuid",ql()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=ui())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),Pl);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=ui().proxyUrl)?t:Ol;return e+=("/"===e.at(-1)?"":"/")+zl,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=ui();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const ai="2.0.2";class m2{constructor(t){Ke(this,"frameTransformedCount",0),Ke(this,"frameFromSourceCount",0),Ke(this,"startAt",0),Ke(this,"reporter"),this.config=t,this.reporter=new po(t)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:t,frameFromSourceCount:e}=this;return e/((Date.now()-t)/1e3)}async onFrameTransformed(t={},e=!1){0===this.startAt&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:n,frameTransformedCount:r,frameFromSourceCount:i}=this,o=Date.now(),a=(o-n)/1e3,l=r/a,s=i/a;return e||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=o,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:s,transformedFps:l,framesTransformed:r,...t})):"success"}}var p2=(t=>(t.FPS_DROP="fps_drop",t))(p2||{}),b2=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(b2||{}),no=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(no||{});const y2=500,g2=.8;class Z2 extends fo{constructor(t,e){super(),Ke(this,"reporter_",new po),Ke(this,"reporterQos_",new m2({loggingIntervalFrameCount:y2,report:{version:ai}})),Ke(this,"transformerType_"),Ke(this,"transformer_"),Ke(this,"shouldStop_"),Ke(this,"isFlashed_"),Ke(this,"mediaTransformerQosReportStartTimestamp_"),Ke(this,"videoHeight_"),Ke(this,"videoWidth_"),Ke(this,"trackExpectedRate_"),Ke(this,"index_"),Ke(this,"controller_"),this.index_=e,this.transformer_=t,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in t&&(this.transformerType_=t.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){this.report({message:nr.errors.transformer_start,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",e)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else{try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),this.reportQos()}catch(t){this.report({message:nr.errors.transformer_transform,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",e)}if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*g2>this.reporterQos_.fps){const t={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",t)}}}async flush(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){this.report({message:nr.errors.transformer_flush,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",e)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(t){this.reporter_.send({version:ai,action:"MediaTransformer",transformerType:this.transformerType_,...t})}reportQos(t=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:ai,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},t)}}class v2 extends fo{constructor(t){super(),Ke(this,"transformers_"),Ke(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new Z2(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class G2 extends fo{constructor(){super(),Ke(this,"reporter_"),Ke(this,"pipeline_"),Ke(this,"transformers_"),Ke(this,"readable_"),Ke(this,"writable_"),Ke(this,"trackExpectedRate_"),this.reporter_=new po,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise((async(t,e)=>{if(!this.transformers_||0===this.transformers_.length)return this.report({message:nr.errors.transformer_none,variation:"Error"}),void e("[MediaProcessor] Need to set transformers.");if(!this.readable_)return this.report({variation:"Error",message:nr.errors.readable_null}),void e("[MediaProcessor] Readable is null.");if(!this.writable_)return this.report({variation:"Error",message:nr.errors.writable_null}),void e("[MediaProcessor] Writable is null.");let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new v2(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=no.pipeline_restarted:"pipeline_started_with_error"===t&&(t=no.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((async t=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),t()}))}report(t){this.reporter_.send({version:ai,action:"MediaProcessor",...t})}}class X2{constructor(){Ke(this,"processor_"),Ke(this,"generator_"),this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class W2{constructor(t){Ke(this,"insertableStreamHelper_"),Ke(this,"mediaProcessor_"),this.insertableStreamHelper_=new X2,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var di=(t=>(t.Low="Low",t.High="High",t))(di||{}),V2=(t=>(t.BackgroundBlur="BackgroundBlur",t.VirtualBackground="VirtualBackground",t.VideoBackground="VideoBackground",t.SilhouetteBlur="SilhouetteBlur",t))(V2||{}),R2=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(R2||{});const x2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var I2=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l,s="./this.program",c=function(t,e){throw e},u=!0,d="";typeof document<"u"&&document.currentScript&&(d=document.currentScript.src),t&&(d=t),d=0!==d.indexOf("blob:")?d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var h,f=i.print||console.log.bind(console),m=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(s=i.thisProgram),i.quit&&(c=i.quit),i.wasmBinary&&(h=i.wasmBinary);var p=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&L("no native wasm support detected");var b,g,y,Z,v,G=!1,X=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function W(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&X)return X.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function V(t,e){return t?W(Z,t,e):""}function x(t,e){return t%e>0&&(t+=e-t%e),t}function R(t){g=t,i.HEAP8=y=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=v=new Int32Array(t),i.HEAPU8=Z=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var I,w=[],S=[],Y=[],F=0;var T=0,C=null;function L(t){i.onAbort&&i.onAbort(t),m(t="Aborted("+t+")"),G=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var H,N,k,J="data:application/octet-stream;base64,";function U(t){return t.startsWith(J)}function K(t){try{if(t==H&&h)return new Uint8Array(h);if(!l)throw"both async and sync fetching of the wasm failed"}catch(t){L(t)}}function B(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?I.get(n)():I.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}U(H="tflite-simd.wasm")||(N=H,H=i.locateFile?i.locateFile(N,d):d+N),k=function(){return performance.now()};var j=!0;function z(t){try{return b.grow(t-g.byteLength+65535>>>16),R(b.buffer),1}catch{}}var M={};function A(){if(!A.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var e in M)void 0===M[e]?delete t[e]:t[e]=M[e];var n=[];for(var e in t)n.push(e+"="+t[e]);A.strings=n}return A.strings}var E={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=E.buffers[t];0===e||10===e?((1===t?f:m)(W(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return E.varargs+=4,v[E.varargs-4>>2]},getStr:function(t){return V(t)},get64:function(t,e){return t}};var O={a:function(t,e,n,r){L("Assertion failed: "+V(t)+", at: "+[e?V(e):"unknown filename",n,r?V(r):"unknown function"])},e:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){L("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t||!j)return function(t){v[_()>>2]=t}(28),-1;n=k()}return v[e>>2]=n/1e3|0,v[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){Z.copyWithin(t,e,e+n)},m:function(t){var e=Z.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),z(Math.min(n,x(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=k();k()-e<t;);},f:function(t,e){var n=0;return A().forEach((function(r,i){var o=e+n;v[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)y[e++>>0]=t.charCodeAt(r);n||(y[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=A();v[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),v[e>>2]=r,0},j:function(t){!function(t,e){!function(t){p||F>0||(i.onExit&&i.onExit(t),G=!0),c(t,new Q(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=v[e+8*o>>2],l=v[e+(8*o+4)>>2],s=0;s<l;s++)E.printChar(t,Z[a+s]);i+=l}return v[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){L("randomDevice")}}());for(var r=0;r<n;r++)y[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:O};function e(t,e){var n=t.exports;i.asm=n,R((b=i.asm.q).buffer),I=i.asm.E,function(t){S.unshift(t)}(i.asm.r),function(t){if(T--,i.monitorRunDependencies&&i.monitorRunDependencies(T),0==T&&C){var e=C;C=null,e()}}()}function n(t){e(t.instance)}function o(e){return(!h&&u&&"function"==typeof fetch?fetch(H,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+H+"'";return t.arrayBuffer()})).catch((function(){return K(H)})):Promise.resolve().then((function(){return K(H)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){m("failed to asynchronously prepare wasm: "+t),L(t)}))}if(T++,i.monitorRunDependencies&&i.monitorRunDependencies(T),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return m("Module.instantiateWasm callback failed with error: "+t),!1}(h||"function"!=typeof WebAssembly.instantiateStreaming||U(H)||"function"!=typeof fetch?o(n):fetch(H,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return m("wasm streaming compile failed: "+t),m("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var P,_=i.___errno_location=function(){return(_=i.___errno_location=i.asm.F).apply(null,arguments)};function Q(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function D(t){function e(){P||(P=!0,i.calledRun=!0,!G&&(B(S),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),Y.unshift(t);var t;B(Y)}()))}T>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;B(w)}(),T>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(C=function t(){P||D(),P||(C=t)},i.run=D,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return D(),e.ready}}();class S2{constructor(){Wt(this,"selectedTFLite"),Wt(this,"isSIMDSupported",!1),Wt(this,"isThreadsSupported",!1),Wt(this,"inputWidth",0),Wt(this,"inputHeight",0),Wt(this,"inputChannelCount",0),Wt(this,"inputMemoryOffset",0),Wt(this,"outputWidth",0),Wt(this,"outputHeight",0),Wt(this,"outputChannelCount",0),Wt(this,"outputMemoryOffset",0)}}const T2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",w2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function F2(t=T2,e=w2){let n=new S2;return new Promise((function(r,i){(async function(){return I2({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class Ws{constructor(){Wt(this,"canvas",new OffscreenCanvas(0,0)),Wt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0})),Wt(this,"pixelCount",0),Wt(this,"inputOffset",0),Wt(this,"outputOffset",0),Wt(this,"infos"),Wt(this,"mask")}async init(t,e){await this.initWasm(t,e),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(t,e){this.infos=await F2(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function o3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await Y2(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function Y2(t,e){const n=new Ws;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await x2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:L2()};try{await kl()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function L2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}const bi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function F(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},C=null;function L(t,e){void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array.prototype.slice;function U(t,e,n){return e===n?k||(k=new Uint8Array(0)):J?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var K=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?H(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function z(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}B.prototype.reset=function(){this.g=this.j};var A=[];function E(){this.g=new Uint8Array(64),this.h=0}function O(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,A.length?(n=A.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function _(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=z(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=z(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!_(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=z(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function $(t){var e,n=z(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=R(s,l),l.length=0);e=R(s,l)}return e}function q(){this.h=[],this.i=0,this.g=new E}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){O(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?K=0:(0,K=2147483648):isNaN(r)?(0,K=2147483647):34028234663852886e22<r?(0,K=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,K=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,K=(n<<31|e+127<<23|r)>>>0),n=K,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,U(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function ft(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function mt(t){var e=void 0!==e&&e,n=ft(t,1,e);return null==n&&(n=dt),n===dt&&bt(t,1,n=ct([]),e),n}function pt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function bt(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=mt(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=mt(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=ft(t,e))?0:t}function Gt(t,e){return null==(t=ft(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=U(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function xt(t){ut.call(this,t)}function Rt(t,e){for(;_(e);)switch(e.i){case 8:var n=z(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 26:bt(t,3,n=$(e));break;case 34:bt(t,4,n=$(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,wt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,L)},ut.prototype.toString=function(){return Zt(this).toString()},f(xt,ut),f(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,xt,e)};var wt=[1];function St(t){ut.call(this,t)}function Yt(t,e){for(;_(e);)switch(e.i){case 13:var n=M(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 29:bt(t,3,n=M(e.g));break;case 37:bt(t,4,n=M(e.g));break;case 45:bt(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Ft(t){ut.call(this,t,-1,Tt)}f(St,ut),f(Ft,ut);var Tt=[1];function Ct(t){ut.call(this,t)}function Lt(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ht(t){return gt(t,xt).map((function(t){return{index:vt(t,1),Y:pt(t,2),label:null!=ft(t,3)?Gt(t,3):void 0,displayName:null!=ft(t,4)?Gt(t,4):void 0}}))}function Nt(t){return{x:pt(t,1),y:pt(t,2),z:pt(t,3),visibility:null!=ft(t,4)?pt(t,4):void 0}}function kt(t,e){this.h=t,this.g=e,this.l=0}function Jt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Lt(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Lt(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Ut(t){this.g=t}f(Ct,ut);var Kt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(t,e){return e+t}function jt(t,e){window[t]=e}function zt(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||Bt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,f=this;return X(t,(function(t){switch(t.g){case 1:return e=f,f.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(f,f.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Kt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return jt("createMediapipeSolutionsWasm",{locateFile:f.locateFile}),jt("createMediapipeSolutionsPackedAssets",{locateFile:f.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=At(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,At(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:f.h=t.h,f.l=new OffscreenCanvas(1,1),f.h.canvas=f.l,o=f.h.GL.createContext(f.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),f.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(f.l=document.createElement("canvas"),!(h=f.l.getContext("webgl2",{}))&&!(h=f.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();f.D=h,f.h.canvas=f.l,f.h.createContext(f.l,!0,!0,{});case 4:f.i=new f.h.SolutionWasm,f.R=!1,t.g=0}}))}))}function At(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function Et(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,f,m,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new kt(i.h,i.D),i.s[e]=r),t.return(Jt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=v.get(x);t:{var I=new Ct;for(R=new P(R);_(R);)switch(R.i){case 13:var w=M(R.g);bt(I,1,w);break;case 21:bt(I,2,w=M(R.g));break;case 29:bt(I,3,w=M(R.g));break;case 37:bt(I,4,w=M(R.g));break;case 45:bt(I,5,w=M(R.g));break;case 48:for(var S=R.g,Y=128,F=0,T=w=0;4>T&&128<=Y;T++)F|=(127&(Y=S.h[S.g++]))<<7*T;if(128<=Y&&(F|=(127&(Y=S.h[S.g++]))<<28,w|=(127&Y)>>4),128<=Y)for(T=0;5>T&&128<=Y;T++)w|=(127&(Y=S.h[S.g++]))<<7*T+3;128>Y?(S=F>>>0,(w=2147483648&(Y=w>>>0))&&(Y=~Y>>>0,0==(S=1+~S>>>0)&&(Y=Y+1>>>0)),S=4294967296*Y+(S>>>0),w=w?-S:S):(S.l=!0,w=void 0),bt(I,6,w);break;default:if(!Wt(I,R))break t}}I={Z:pt(I,1),$:pt(I,2),height:pt(I,3),width:pt(I,4),rotation:pt(I,5,0),X:vt(I,6)},w=G.get(x);t:for(R=new Ft,w=new P(w);_(w);)if(10===w.i)yt(R,S=D(w,new St,Yt),St,void 0);else if(!Wt(R,w))break t;R=gt(R,St).map(Nt),S=W.get(x);t:for(w=new It,S=new P(S);_(S);)if(10===S.i)w.addClassification(D(S,new xt,Rt));else if(!Wt(w,S))break t;I={T:I,O:R,M:Ht(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===f){t.g=3;break}if("float_list"===h.type){r[d]=f,t.g=7;break}if("proto"===h.type){r[d]=f,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=Z.s[d])||(m=new kt(Z.h,Z.D),Z.s[d]=m),g(t,Jt(m,f,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Ot(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Et(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pt(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function _t(t){var e=this;t=t||{},this.g=new zt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Pt(t.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Pt(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,At(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=zt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,At(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ot(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,f=this;return X(n,(function(n){switch(n.g){case 1:return f.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,f.C,2)):n.return();case 2:return g(n,f.initialize(),3);case 3:for(i=new f.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=f.g.inputs[s]){t:{var m=f,p=t[s];switch(c.type){case"video":var b=m.m[c.stream];if(b||(b=new kt(m.h,m.D),m.m[c.stream]=b),0===(m=b).l&&(m.l=m.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:m.l,width:y,height:b},(y=m.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),m.h.bindTexture2d(m.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),m.h.bindTexture2d(0),m=b;break t;case"detections":for((b=m.m[c.stream])||(b=new Ut(m.h),m.m[c.stream]=b),(m=b).data||(m.data=new m.g.DetectionListData),m.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=m.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Ct;bt(W,1,X.Z),bt(W,2,X.$),bt(W,3,X.height),bt(W,4,X.width),bt(W,5,X.rotation),bt(W,6,X.X);var V=X=new q;nt(V,1,ft(W,1)),nt(V,2,ft(W,2)),nt(V,3,ft(W,3)),nt(V,4,ft(W,4)),nt(V,5,ft(W,5));var x=ft(W,6);if(null!=x&&null!=x){O(V.g,48);var R=V.g,I=x;x=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,x&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),x=K=w,w=I;0<w||127<x;)R.push(127&x|128),x=(x>>>7|w<<25)>>>0,w>>>=7;R.push(x)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=m.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),bt(V=new St,1,W.x),bt(V,2,W.y),bt(V,3,W.z),W.visibility&&bt(V,4,W.visibility),nt(R=W=new q,1,ft(V,1)),nt(R,2,ft(V,2)),nt(R,3,ft(V,3)),nt(R,4,ft(V,4)),nt(R,5,ft(V,5)),Xt(V,R),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=m.data).addClassification,X=b,W=y.M[Z],bt(V=new xt,2,W.Y),W.index&&bt(V,1,W.index),W.label&&bt(V,3,W.label),W.displayName&&bt(V,4,W.displayName),R=W=new q,null!=(w=ft(V,1))&&null!=w)if(O(R.g,8),x=R.g,0<=w)O(x,w);else{for(I=0;9>I;I++)x.push(127&w|128),w>>=7;x.push(1)}nt(R,2,ft(V,2)),null!=(x=ft(V,3))&&(x=F(x),O(R.g,26),O(R.g,x.length),tt(R,R.g.end()),tt(R,x)),null!=(x=ft(V,4))&&(x=F(x),O(R.g,34),O(R.g,x.length),tt(R,R.g.end()),tt(R,x)),Xt(V,R),W=et(W),G.call(v,X,W)}}m=m.data;break t;default:m={}}}switch(u=m,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return f.i.send(i),g(n,f.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",zt),x("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=_t.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},x("SelfieSegmentation",_t),x("VERSION","0.1.1632777926")}).call(bi);const yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.s=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",F=typeof TextEncoder<"u",T={},C=null;function L(t){var e;void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array;function U(t){return J&&null!=t&&t instanceof Uint8Array}function K(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&E(this,t)}function E(t,e){t.h=function(t,e){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return H(t);if(t.constructor===K)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||U(e)?e:"string"==typeof e?H(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=new Uint8Array(0)));if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}A.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,_.length?(n=_.pop(),e&&(n.v=e.v),t&&E(n,t),t=n):t=new A(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new Q}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var ft,mt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return Rt(t,e=void 0===e?wt:e)}function xt(t,e){if(null!=t){if(Array.isArray(t))t=Rt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=xt(t[n],e);t=r}else t=e(t);return t}}function Rt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=xt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(U(t))return L(t);if(t instanceof K){var e=t.L;return e=null==e||"string"==typeof e?e:J&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return U(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=ft),ft=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},f(Yt,St),mt){var Ft={};Object.defineProperties(Yt,(Ft[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Tt(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Ut(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Kt(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ct=Symbol();function Lt(t,e,n){return t[Ct]||(t[Ct]=function(t,r){return e(t,r,n)})}function Ht(t){var e=t[Ct];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ct]=e}return e}function Nt(t){var e=function(t){var e=t.ba;return e?Ht(e):(e=t.oa)?Lt(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Jt=Symbol();function Ut(t){var e=t[Jt];if(!e){var n=Et(t);e=function(t,e){return ee(t,e,n)},t[Jt]=e}return e}function Kt(t,e){var n=t[Jt];return n||(n=function(t,n){return Tt(t,n,e)},t[Jt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Ut(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function At(t,e,n,r,i,o){var a=Kt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function Et(t){return t[Bt]||kt(t,t[Bt]=[],jt,zt,Mt,At)}var Ot=Symbol();function Pt(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ht(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||kt(t,t[Ot]={},Pt,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(E(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Tt(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,Et(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?R():(l=t[o++],194>a||128!=(192&l)?(o--,R()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?R():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,R()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?R():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,R()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):R(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(f(ce,Yt),mt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function fe(t){ce.call(this,t,-1,pe)}function me(){return[1,se,de,he]}f(de,ce),f(fe,ce),fe.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}f(be,ce),f(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function xe(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Re(t){return t.map((function(t){return vt(te(t,ye,Ze),be,1).map(xe)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function we(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Se(t){this.g=t}f(Ge,ce);var Ye=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Fe(t,e){return e+t}function Te(t,e){window[t]=e}function Ce(t){if(this.g=t,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=t&&t.locateFile||Fe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Le(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ye),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Te("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Te("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=He(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,He(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,f.g=0}}))}function He(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function Ne(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(we(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=te(v.get(x),Ge,Xe);R={ea:{ka:Zt(R,1),la:Zt(R,2),height:Zt(R,3),width:Zt(R,4),rotation:Zt(R,5,0),ia:Xt(R,6)},Y:vt(te(G.get(x),ye,Ze),be,1).map(xe),V:Ve(te(W.get(x),fe,me))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.u[d])||(m=new Ie(t.h,t.G),t.u[d]=m),g(Z,we(m,f,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function ke(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Ne(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Je(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ue(t){var e=this;t=t||{},this.g=new Ce({locateFile:t.locateFile,files:function(t){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Je(t.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:Re},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:Re},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,fe,me))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i;return X((function(o){return 1==o.g?(n=Je(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,He(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.return(!0))}))}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}(t=Ce.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Le(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,He(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,ke(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ie(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new Se(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),b.Y)for(Z=0;Z<b.Y.length;++Z){var V=!!(W=b.Y[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.score),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Ce),x("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ue.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Hands",Ue),x("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),x("VERSION","0.4.1646424915")}).call(yi);var gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?k(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,w()}function _(t){t.g>t.i&&(t.l=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}E.prototype.reset=function(){this.g=this.m},E.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,_(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,_(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,_(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,_(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,_(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,w(),n):(_(this),n))))))},E.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,_(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,_(t);break t}e++}t.l=!0,w()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){q(t.g,8*e+2),q(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function ft(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function mt(t){return Array.isArray(t)&&ht(t,1),t}function pt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function bt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?k(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||bt(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&ft(t)&&mt(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&bt(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?mt(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?mt(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(mt([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function xt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?St(t,e,i=mt([]),r):n&&Array.isArray(i)&&2&ft(i)&&St(t,e,i=i.slice(),r),i}function Rt(t){var e=xt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function wt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function St(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function Yt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Ft(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=xt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&ft(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&pt(r[a].h);o&&(pt(r),Object.freeze(r)),t.g[n]=r}return r}function Tt(t,e,n,r,i){var o=Ft(t,r,e);n=n||new r,t=xt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Ct(n))):(o.push(n),t.push(Ct(n)))}function Ct(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Ct(n[r]);else n&&Ct(n)}return t.h}function Lt(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Ht(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Nt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ht(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Jt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Ut(t,e,n){if(null!=(e=Vt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=A)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Kt(t,e,n){return 5===t.h&&(St(e,n,t.g.o()),!0)}function Bt(t,e,n){return(5===t.h||2===t.h)&&(e=xt(e,n),2==t.h?ot(t,E.prototype.o,e):e.push(t.g.o()),!0)}function jt(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function zt(t,e,n){return 0===t.h&&(St(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return St(e,n,r),!0}function At(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Ct(t),e.g[n]=t,St(e,n,r,o),!0}function Et(t,e,n,r,i){return 2===t.h&&(Tt(e,n,t=it(t,new r,i),r,void 0),!0)}function Ot(t,e,n){return(0===t.h||2===t.h)&&(e=xt(e,n),2==t.h?ot(t,E.prototype.j,e):e.push(t.g.j()),!0)}function Pt(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function _t(t){vt.call(this,t,-1,qt)}function Qt(t,e){return Nt(t,e,Gt||(Gt={1:zt,2:zt,3:Bt,4:Pt}))}vt.prototype.toJSON=function(){return Zt(Ct(this),gt)},vt.prototype.toString=function(){return Ct(this).toString()},f(_t,vt),_t.prototype.getRows=function(){return Vt(this,1)},_t.prototype.getCols=function(){return Vt(this,2)},_t.prototype.getPackedDataList=function(){return Rt(this)},_t.prototype.getLayout=function(){return It(this,4,0)};var Dt,$t,qt=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Ut(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,L(r)),null!=(r=Vt(t,4))&&ct(e,4,L(r)),Lt(t,e)}function ne(t,e){return Nt(t,e,Dt||(Dt={1:zt,2:Kt,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return Nt(t,e,$t||($t={1:[Et,te,ne]}))}f(te,vt),f(re,vt),re.prototype.addClassification=function(t,e){return Tt(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Ut(e,t,1),Ut(e,t,2),Ut(e,t,3),Ut(e,t,4),Ut(e,t,5),Lt(t,e)}function ue(t,e){return Nt(t,e,oe||(oe={1:Kt,2:Kt,3:Kt,4:Kt,5:Kt}))}function de(t){vt.call(this,t,-1,pe)}function he(t,e){return Nt(t,e,ae||(ae={1:[Et,se,ue]}))}f(se,vt),f(de,vt);var fe,me,pe=[1];function be(t){vt.call(this,t)}function ge(t,e){Ut(e,t,1),Ut(e,t,2),Ut(e,t,3),Ut(e,t,4),Ut(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Lt(t,e)}function ye(t,e){return Nt(t,e,fe||(fe={1:Kt,2:Kt,3:Kt,4:Kt,5:Kt,6:jt}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return Nt(t,e,me||(me={1:Pt,2:Pt,3:Bt,4:Ot}))}f(be,vt),f(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return Rt(this)},Ze.prototype.getIndexBufferList=function(){return xt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return Nt(t,e,Ge||(Ge={1:[At,Ze,ve],2:[At,_t,Qt]}))}f(We,vt),We.prototype.getMesh=function(){return Yt(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return Yt(this,_t,2)};var xe=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Re=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],we=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Se=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ye=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Fe=[].concat(l(xe),l(Re),l(Ie),l(we),l(Se),l(Ye));function Te(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ce(t){return Ft(t,te,1).map((function(t){return{index:It(t,1,0),score:wt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Le(t){return{x:wt(t,1),y:wt(t,2),z:wt(t,3),visibility:null!=Vt(t,4)?wt(t,4):void 0}}function He(t){return Ft(Jt(t,de,he),se,1).map(Le)}function Ne(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Te(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Te(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Je(t){this.g=t}var Ue=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ke(t,e){return e+t}function Be(t,e){window[t]=e}function je(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ze(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ue),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,f.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ae(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Ne(t.h,t.D),t.s[e]=r),i.return(ke(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Jt(v.get(x),be,ye);R={T:{X:wt(R,1),Y:wt(R,2),height:wt(R,3),width:wt(R,4),rotation:wt(R,5,0),W:It(R,6,0)},O:He(G.get(x)),M:Ce(Jt(W.get(x),re,ie))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new Ne(t.h,t.D),t.s[d]=m),g(Z,ke(m,f,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ae(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Oe(t){return t.map(Pe)}function Pe(t){var e=(t=Jt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function _e(t){var e=this;t=t||{},this.g=new je({locateFile:t.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:He},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:He},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:He},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:He},ea:{type:"proto",stream:"world_landmarks",transform:He},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.g.reset(),0))}))}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}(t=je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ze(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.C,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new Ne(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Je(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new be;if(St(W,1,X.X),St(W,2,X.Y),St(W,3,X.height),St(W,4,X.width),St(W,5,X.rotation),St(W,6,X.W),X=kt(W,ge),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),St(V=new se,1,W.x),St(V,2,W.y),St(V,3,W.z),W.visibility&&St(V,4,W.visibility),W=kt(V,ce),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],St(V=new te,2,W.score),W.index&&St(V,1,W.index),W.label&&St(V,3,W.label),W.displayName&&St(V,4,W.displayName),W=kt(V,ee),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.C,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",je),x("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Holistic",_e),x("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),x("FACEMESH_LIPS",xe),x("FACEMESH_LEFT_EYE",Re),x("FACEMESH_LEFT_EYEBROW",Ie),x("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),x("FACEMESH_RIGHT_EYE",we),x("FACEMESH_RIGHT_EYEBROW",Se),x("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),x("FACEMESH_FACE_OVAL",Ye),x("FACEMESH_CONTOURS",Fe),x("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),x("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),x("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),x("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),x("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),x("VERSION","0.5.1635989137")}).call(gi);const Zi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.s=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",F=typeof TextEncoder<"u",T={},C=null;function L(t){var e;void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array;function U(t){return J&&null!=t&&t instanceof Uint8Array}function K(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&E(this,t)}function E(t,e){t.h=function(t,e){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return H(t);if(t.constructor===K)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||U(e)?e:"string"==typeof e?H(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=new Uint8Array(0)));if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}A.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,_.length?(n=_.pop(),e&&(n.v=e.v),t&&E(n,t),t=n):t=new A(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new Q}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var ft,mt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return Rt(t,e=void 0===e?wt:e)}function xt(t,e){if(null!=t){if(Array.isArray(t))t=Rt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=xt(t[n],e);t=r}else t=e(t);return t}}function Rt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=xt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(U(t))return L(t);if(t instanceof K){var e=t.L;return e=null==e||"string"==typeof e?e:J&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return U(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=ft),ft=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},f(Yt,St),mt){var Ft={};Object.defineProperties(Yt,(Ft[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Tt(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Ut(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Kt(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ct=Symbol();function Lt(t,e,n){return t[Ct]||(t[Ct]=function(t,r){return e(t,r,n)})}function Ht(t){var e=t[Ct];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ct]=e}return e}function Nt(t){var e=function(t){var e=t.aa;return e?Ht(e):(e=t.ka)?Lt(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Jt=Symbol();function Ut(t){var e=t[Jt];if(!e){var n=Et(t);e=function(t,e){return ee(t,e,n)},t[Jt]=e}return e}function Kt(t,e){var n=t[Jt];return n||(n=function(t,n){return Tt(t,n,e)},t[Jt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Ut(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function At(t,e,n,r,i,o){var a=Kt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function Et(t){return t[Bt]||kt(t,t[Bt]=[],jt,zt,Mt,At)}var Ot=Symbol();function Pt(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ht(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||kt(t,t[Ot]={},Pt,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(E(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Tt(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,Et(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?R():(l=t[o++],194>a||128!=(192&l)?(o--,R()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?R():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,R()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?R():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,R()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):R(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(f(ce,Yt),mt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function fe(t){ce.call(this,t,-1,pe)}function me(){return[1,se,de,he]}f(de,ce),f(fe,ce),fe.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}f(be,ce),f(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}f(Ge,ce);var We=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ve=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],xe=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Re=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],we=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Se=[].concat(l(We),l(Ve),l(xe),l(Re),l(Ie),l(we));function Ye(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Fe(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Te(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Ce(t,e){this.h=t,this.g=e,this.l=0}function Le(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Ye(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ye(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function He(t){this.g=t}var Ne=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function ke(t,e){return e+t}function Je(t,e){window[t]=e}function Ue(t){if(this.g=t,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=t&&t.locateFile||ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ke(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ne),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Je("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Je("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Be(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Be(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,f.g=0}}))}function Be(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function je(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ce(t.h,t.G),t.u[e]=r),i.return(Le(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=te(v.get(x),Ge,Xe);R={boundingBox:{xCenter:Zt(R,1),yCenter:Zt(R,2),height:Zt(R,3),width:Zt(R,4),rotation:Zt(R,5,0),rectId:Xt(R,6)},landmarks:vt(te(G.get(x),ye,Ze),be,1).map(Te),V:Fe(te(W.get(x),fe,me))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.u[d])||(m=new Ce(t.h,t.G),t.u[d]=m),g(Z,Le(m,f,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function ze(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=je(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ue({locateFile:t.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:n,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,Be(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ue.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ke(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,Be(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,ze(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ce(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new He(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),b.landmarks)for(Z=0;Z<b.landmarks.length;++Z){var V=!!(W=b.landmarks[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.ga),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Ue),x("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("FaceDetection",Me),x("FACEDETECTION_LIPS",We),x("FACEDETECTION_LEFT_EYE",Ve),x("FACEDETECTION_LEFT_EYEBROW",xe),x("FACEDETECTION_RIGHT_EYE",Re),x("FACEDETECTION_RIGHT_EYEBROW",Ie),x("FACEDETECTION_FACE_OVAL",we),x("FACEDETECTION_CONTOURS",Se),x("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("VERSION","0.4.1646425229")}).call(Zi);const vi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function F(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},C=null;function L(t,e){void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array.prototype.slice;function U(t,e,n){return e===n?k||(k=new Uint8Array(0)):J?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var K=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?H(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function z(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}B.prototype.reset=function(){this.g=this.l},B.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},B.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function A(){this.g=new Uint8Array(64),this.h=0}function E(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function P(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!P(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function Q(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function $(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=R(s,l),l.length=0);e=R(s,l)}return e}function q(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?q(t,B.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new A}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){E(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?K=0:(0,K=2147483648):isNaN(r)?(0,K=2147483647):34028234663852886e22<r?(0,K=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,K=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,K=(n<<31|e+127<<23|8388607&r)>>>0),n=K,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,U(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=ft):(mt(this),(r=this.i[t])?dt(r):this.i[t]=ft)}var ft=Object.freeze(dt([]));function mt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function pt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function bt(t,e){var n=void 0!==n&&n,r=pt(t,e,n);return null==r&&(r=ft),r===ft&&vt(t,e,r=dt([]),n),r}function gt(t){var e=bt(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=pt(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=pt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(mt(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=pt(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=bt(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&xt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=bt(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,xt(e))):(i.push(e),t.push(xt(e)))}function xt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&xt(r[i]);else r&&xt(r)}return t.h}function Rt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=U(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function wt(t){ht.call(this,t,-1,Yt)}function St(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=z(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(xt(this),st,L)},ht.prototype.toString=function(){return xt(this).toString()},f(wt,ht),wt.prototype.getRows=function(){return pt(this,1)},wt.prototype.getCols=function(){return pt(this,2)},wt.prototype.getPackedDataList=function(){return gt(this)},wt.prototype.getLayout=function(){return yt(this,4,0)};var Yt=[3];function Ft(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Tt(t){ht.call(this,t)}function Ct(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=$(e));break;case 34:vt(t,4,n=$(e));break;default:if(!It(t,e))return t}return t}function Lt(t){ht.call(this,t,-1,Ht)}f(Tt,ht),f(Lt,ht),Lt.prototype.addClassification=function(t,e){return Vt(this,t,Tt,e),this};var Ht=[1];function Nt(t){ht.call(this,t)}function kt(t,e){for(;P(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Jt(t){ht.call(this,t,-1,Kt)}function Ut(t){t:{var e=new Jt;for(t=new O(t);P(t);)if(10===t.i){Vt(e,Q(t,new Nt,kt),Nt,void 0)}else if(!It(e,t))break t}return e}f(Nt,ht),f(Jt,ht);var Kt=[1];function Bt(t){ht.call(this,t)}function jt(t){ht.call(this,t,-1,Mt)}function zt(t,e){for(;P(e);)switch(e.i){case 8:var n=z(e.g);vt(t,1,n);break;case 16:vt(t,2,n=z(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?q(n,B.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}f(Bt,ht),f(jt,ht),jt.prototype.getVertexType=function(){return yt(this,1,0)},jt.prototype.getPrimitiveType=function(){return yt(this,2,0)},jt.prototype.getVertexBufferList=function(){return gt(this)},jt.prototype.getIndexBufferList=function(){return bt(this,4)};var Mt=[3,4];function At(t){ht.call(this,t)}function Et(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ot(t){return Xt(t,Tt).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=pt(t,3)?yt(t,3,""):void 0,displayName:null!=pt(t,4)?yt(t,4,""):void 0}}))}function Pt(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=pt(t,4)?Zt(t,4):void 0}}function _t(t,e){this.h=t,this.g=e,this.l=0}function Qt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Et(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Et(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Dt(t){this.g=t}f(At,ht),At.prototype.getMesh=function(){return Gt(this,jt,1)},At.prototype.getPoseTransformMatrix=function(){return Gt(this,wt,2)};var $t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function qt(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||qt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Ft(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,f=this;return X(t,(function(t){switch(t.g){case 1:return e=f,f.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(f,f.j),g(t,function(){return Ft(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate($t),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:f.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:f.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Ft(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Ft(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:f.h=t.h,f.l=new OffscreenCanvas(1,1),f.h.canvas=f.l,o=f.h.GL.createContext(f.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),f.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(f.l=document.createElement("canvas"),!(h=f.l.getContext("webgl2",{}))&&!(h=f.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();f.D=h,f.h.canvas=f.l,f.h.createContext(f.l,!0,!0,{});case 4:f.i=new f.h.SolutionWasm,f.R=!1,t.g=0}}))}))}function re(t,e){return Ft(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Ft(t,(function t(){var r,i,o,l,s,c,u,d,h,f,m,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Ft(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new _t(i.h,i.D),i.s[e]=r),t.return(Qt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=v.get(x);t:{var I=new Bt;for(R=new O(R);P(R);)switch(R.i){case 13:var w=D(R);vt(I,1,w);break;case 21:vt(I,2,w=D(R));break;case 29:vt(I,3,w=D(R));break;case 37:vt(I,4,w=D(R));break;case 45:vt(I,5,w=D(R));break;case 48:vt(I,6,w=z(R.g));break;default:if(!It(I,R))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},R=Xt(Ut(G.get(x)),Nt).map(Pt);var S=W.get(x);t:for(w=new Lt,S=new O(S);P(S);)if(10===S.i)w.addClassification(Q(S,new Tt,Ct));else if(!It(w,S))break t;I={T:I,O:R,M:Ot(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===f){t.g=3;break}if("float_list"===h.type){r[d]=f,t.g=7;break}if("proto"===h.type){r[d]=f,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=Z.s[d])||(m=new _t(Z.h,Z.D),Z.s[d]=m),g(t,Qt(m,f,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new At;for(t=new O(t);P(t);)switch(t.i){case 10:var n=Q(t,new jt,zt);Wt(e,1,n);break;case 18:Wt(e,2,n=Q(t,new wt,St));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Ft(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Ft(this,(function n(){var r,i,o,l,s,c,u,d,h,f=this;return X(n,(function(n){switch(n.g){case 1:return f.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,f.C,2)):n.return();case 2:return g(n,f.initialize(),3);case 3:for(i=new f.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=f.g.inputs[s]){t:{var m=f,p=t[s];switch(c.type){case"video":var b=m.m[c.stream];if(b||(b=new _t(m.h,m.D),m.m[c.stream]=b),0===(m=b).l&&(m.l=m.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:m.l,width:y,height:b},(y=m.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),m.h.bindTexture2d(m.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),m.h.bindTexture2d(0),m=b;break t;case"detections":for((b=m.m[c.stream])||(b=new Dt(m.h),m.m[c.stream]=b),(m=b).data||(m.data=new m.g.DetectionListData),m.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=m.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Bt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,pt(W,1)),it(V,2,pt(W,2)),it(V,3,pt(W,3)),it(V,4,pt(W,4)),it(V,5,pt(W,5));var x=pt(W,6);if(null!=x&&null!=x){E(V.g,48);var R=V.g,I=x;x=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,x&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),x=K=w,w=I;0<w||127<x;)R.push(127&x|128),x=(x>>>7|w<<25)>>>0,w>>>=7;R.push(x)}if(Rt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=m.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new Nt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(R=W=new et,1,pt(V,1)),it(R,2,pt(V,2)),it(R,3,pt(V,3)),it(R,4,pt(V,4)),it(R,5,pt(V,5)),Rt(V,R),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=m.data).addClassification,X=b,W=y.M[Z],vt(V=new Tt,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),R=W=new et,null!=(w=pt(V,1))&&null!=w)if(E(R.g,8),x=R.g,0<=w)E(x,w);else{for(I=0;9>I;I++)x.push(127&w|128),w>>=7;x.push(1)}it(R,2,pt(V,2)),null!=(x=pt(V,3))&&(x=F(x),E(R.g,26),E(R.g,x.length),nt(R,R.g.end()),nt(R,x)),null!=(x=pt(V,4))&&(x=F(x),E(R.g,34),E(R.g,x.length),nt(R,R.g.end()),nt(R,x)),Rt(V,R),W=rt(W),G.call(v,X,W)}}m=m.data;break t;default:m={}}}switch(u=m,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return f.i.send(i),g(n,f.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",ee),x("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Ut(t),Nt).map(Pt)}))}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},se=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],fe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],me=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(fe));function pe(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=pe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Ft(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},x("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),x("FaceMesh",pe),x("FACEMESH_LIPS",se),x("FACEMESH_LEFT_EYE",ce),x("FACEMESH_LEFT_EYEBROW",ue),x("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),x("FACEMESH_RIGHT_EYE",de),x("FACEMESH_RIGHT_EYEBROW",he),x("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),x("FACEMESH_FACE_OVAL",fe),x("FACEMESH_CONTOURS",me),x("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),x("VERSION","0.4.1633559619")}).call(vi);const Gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){throw t}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,w()}function _(t){t.g>t.i&&(t.j=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,_(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,_(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,_(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,_(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,_(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(_(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,_(t),(e<<0|n<<8|r<<16|i<<24)>>>0}E.prototype.reset=function(){this.g=this.l},E.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var $=[];function q(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,$.length?(n=$.pop(),e&&(n.v=e.v),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,_(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?it(t):(e=Q(t.g),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=Q(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}q.prototype.length=function(){return this.h},q.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new q}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function ft(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function mt(t,e){if(null!=t)return Array.isArray(t)||ft(t)?pt(t,e):e(t)}function pt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=mt(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=mt(t[n],e);return i}function bt(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(B&&null!=t&&t instanceof Uint8Array)return k(t);if(t instanceof j){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:B&&e instanceof Uint8Array?k(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?pt(t,bt):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&ft(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function xt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function Rt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function St(t,e){return null==(t=vt(t,e))?0:t}function Yt(t,e){return null==(t=vt(t,e))?"":t}function Ft(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return pt(this.u,bt)},gt.prototype.toString=function(){return this.u.toString()};var Tt=Symbol();function Ct(t,e,n){return t[Tt]||(t[Tt]=function(t,r){return e(t,r,n)})}function Lt(t){var e=t[Tt];if(!e){var n=t[kt]||(t[kt]=t());e=function(t,e){return Jt(t,e,n)},t[Tt]=e}return e}function Ht(t){var e=function(t){var e=t.da;if(e)return Lt(e);if(e=t.ia){var n=t.Y;return delete t.Y,Ct(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Nt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Lt(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Lt(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Ct(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Ct(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var kt=Symbol();function Jt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=Nt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Ht(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Ut(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Kt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Jt(new e,t,n[kt]||(n[kt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Bt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=A)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function jt(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,xt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function zt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=E.prototype.m;var r=Q(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function At(t,e,n){return 5===t.h&&(xt(e,n,t=t.g.m(),0),!0)}function Et(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Vt(e,n,Q(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(xt(e,n,t=Q(t.g),0),!0)}function _t(t,e,n){return 0===t.h&&(xt(e,n,t=!!Q(t.g),!1),!0)}function Qt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function $t(t,e,n,r,i){return 2===t.h&&(wt(e,n,t=ot(t,new r,i),r,void 0),!0)}function qt(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Ot,2:zt,3:Qt,4:Qt}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}Bt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,L(r)),null!=(r=vt(t,4))&&ct(e,4,L(r)),Ft(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[$t,te,ee]}}f(te,gt),f(re,gt),re.prototype.addClassification=function(t,e){return wt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:zt,2:zt,3:zt,4:zt,5:zt}}function se(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5),Ft(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[$t,ae,le]}}f(ae,gt),f(ce,gt);var de=[1];function he(t){gt.call(this,t)}function fe(){return{1:zt,2:zt,3:zt,4:zt,5:zt,6:Et}}function me(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Ft(t,e)}function pe(t){gt.call(this,t,-1,Ze)}function be(){return{1:qt,2:qt,3:Mt,4:[Dt,ge,ye],5:Ot,6:Ot,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:zt,2:zt,3:zt}}f(he,gt),f(pe,gt),f(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:At,2:At,3:At}}function Xe(t){gt.call(this,t)}function We(){return{1:At,2:At,3:At}}function Ve(t){gt.call(this,t)}function xe(){return{1:Pt,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:_t}}function Re(t){gt.call(this,t,-1,we)}function Ie(){return{1:Pt,2:[$t,Ve,xe],3:At,4:Mt,5:Mt,6:Mt}}f(ve,gt),f(Xe,gt),f(Ve,gt),f(Re,gt);var we=[2,4,5,6];function Se(t){gt.call(this,t,-1,Fe)}function Ye(){return{1:Pt,2:[$t,Re,Ie],3:[Dt,pe,be],4:jt,5:Mt,6:Mt}}f(Se,gt);var Fe=[2,5,6];function Te(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ce(t){return It(t,te,1).map((function(t){return{index:St(t,1),$:Wt(t,2),label:null!=vt(t,3)?Yt(t,3):void 0,displayName:null!=vt(t,4)?Yt(t,4):void 0}}))}function Le(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function He(t,e){this.h=t,this.g=e,this.l=0}function Ne(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Te(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Te(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function ke(t){this.g=t}var Je=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ue(t,e){return e+t}function Ke(t,e){window[t]=e}function Be(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Ue,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function je(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Je),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Ke("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ke("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,f.g=0}}))}function ze(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new He(t.h,t.F),t.s[e]=r),i.return(Ne(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Kt(v.get(x),he,fe);R={U:{aa:Wt(R,1),ba:Wt(R,2),height:Wt(R,3),width:Wt(R,4),rotation:Wt(R,5,0),Z:St(R,6)},P:It(Kt(G.get(x),ce,ue),ae,1).map(Le),N:Ce(Kt(W.get(x),re,ie))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new He(t.h,t.F),t.s[d]=m),g(Z,Ne(m,f,t.H),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ee(t){var e=St(t,1),n=Rt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=Rt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Oe(t){var e=Kt(t,Se,Ye);t=[],e=It(e,Re,2);for(var n=0;n<e.length;n++)t.push({id:St(e[n],1),keypoints:It(e[n],Ve,2).map(Ee),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Pe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=Be.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,je(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new He(h.h,h.F),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new ke(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Ut(W,me),v.call(Z,G,X),b.P)for(Z=0;Z<b.P.length;++Z){var V=!!(W=b.P[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Ut(V,se),G.call(v,X,W)}if(b.N)for(Z=0;Z<b.N.length;++Z)G=(v=p.data).addClassification,X=y,W=b.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Ut(V,ne),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Be),x("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var _e={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function Qe(t){var e=this;t=t||{},this.g=new Be({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Pe(n)},_e),r=function(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}(n),i="object_detection_3d.tflite",g(a,ze(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},_e),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},_e),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Objectron",Qe),x("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),x("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),x("VERSION","0.4.1636596145")}).call(Gi);const Xi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?k(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){t.g>t.i&&(t.j=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,P(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,P(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,P(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,P(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,P(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(P(t),r))))))}E.prototype.reset=function(){this.g=this.l};var Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,P(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?nt(t):(e=_(t.g),(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){q(t.g,8*e+2),q(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function ft(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?k(t):t;default:return t}}function bt(t,e){if(null!=t)return Array.isArray(t)||mt(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=bt(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=bt(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&mt(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?Rt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&Rt(t,e,i=i.slice(),r),i}function xt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function Rt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&ft(r[a].g);o&&(ft(r),Object.freeze(r)),t.i[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,St(n))):(o.push(n),t.push(St(n)))}function St(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&St(n[r]);else n&&St(n)}return t.g}function Yt(t,e){return null==(t=Wt(t,e))?0:t}function Ft(t,e){return null==(t=Wt(t,e))?"":t}function Tt(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Ct(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Lt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ct(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Ht(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(it.length){var r=it.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function kt(t,e,n){if(null!=(e=Wt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=A)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Jt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,Rt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Ut(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,w(),t=void 0),Rt(e,n,t),!0}function Kt(t,e,n){return 0===t.h&&(Rt(e,n,_(t.g)),!0)}function Bt(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return Rt(e,n,r),!0}function jt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=_(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,wt(e,n,o,r,void 0),!0}function zt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}kt(e,t,2),null!=(r=Wt(t,3))&<(e,3,L(r)),null!=(r=Wt(t,4))&<(e,4,L(r)),Tt(t,e)}function At(t,e){return Lt(t,e,Zt||(Zt={1:Kt,2:Jt,3:Bt,4:Bt}))}function Et(t){yt.call(this,t,-1,Qt)}function Ot(t,e){return Lt(t,e,vt||(vt={1:[jt,zt,At]}))}yt.prototype.toJSON=function(){return gt(St(this),pt)},yt.prototype.toString=function(){return St(this).toString()},f(zt,yt),f(Et,yt),Et.prototype.addClassification=function(t,e){return wt(this,1,t,zt,e),this};var Pt,_t,Qt=[1];function Dt(t){yt.call(this,t)}function $t(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5),Tt(t,e)}function qt(t,e){return Lt(t,e,Pt||(Pt={1:Jt,2:Jt,3:Jt,4:Jt,5:Jt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Lt(t,e,_t||(_t={1:[jt,Dt,qt]}))}f(Dt,yt),f(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Tt(t,e)}function ae(t,e){return Lt(t,e,ne||(ne={1:Jt,2:Jt,3:Jt,4:Jt,5:Jt,6:Ut}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,zt,1).map((function(t){return{index:Yt(t,1),X:xt(t,2),label:null!=Wt(t,3)?Ft(t,3):void 0,displayName:null!=Wt(t,4)?Ft(t,4):void 0}}))}function ce(t){return{x:xt(t,1),y:xt(t,2),z:xt(t,3),visibility:null!=Wt(t,4)?xt(t,4):void 0}}function ue(t){return It(Nt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function fe(t){this.g=t}f(ie,yt);var me=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function pe(t,e){return e+t}function be(t,e){window[t]=e}function ge(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||pe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(me),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,f.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Nt(v.get(x),ie,ae);R={T:{Y:xt(R,1),Z:xt(R,2),height:xt(R,3),width:xt(R,4),rotation:xt(R,5,0),W:Yt(R,6)},O:ue(G.get(x)),M:se(Nt(W.get(x),Et,Ot))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new de(t.h,t.D),t.s[d]=m),g(Z,he(m,f,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:Xe(t.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.return(!0))}))}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.C,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new de(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new fe(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new ie;if(Rt(W,1,X.Y),Rt(W,2,X.Z),Rt(W,3,X.height),Rt(W,4,X.width),Rt(W,5,X.rotation),Rt(W,6,X.W),X=Ht(W,oe),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Rt(V=new Dt,1,W.x),Rt(V,2,W.y),Rt(V,3,W.z),W.visibility&&Rt(V,4,W.visibility),W=Ht(V,$t),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],Rt(V=new zt,2,W.X),W.index&&Rt(V,1,W.index),W.label&&Rt(V,3,W.label),W.displayName&&Rt(V,4,W.displayName),W=Ht(V,Mt),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.C,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",ge),x("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Pose",We),x("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),x("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),x("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),x("VERSION","0.5.1635988162")}).call(Xi);const tr=class{constructor(){Wt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return Zi.VERSION;case"face_mesh":return vi.VERSION;case"hands":return yi.VERSION;case"holistic":return gi.VERSION;case"objectron":return Gi.VERSION;case"selfie_segmentation":return bi.VERSION;case"pose":return Xi.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new vi.FaceMesh({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new Zi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new yi.Hands({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new gi.Holistic({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new Gi.Objectron({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new bi.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Xi.Pose({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let _i=tr;Wt(_i,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const or=new WeakMap,yr=new WeakMap,er=new WeakMap,Wi=Symbol("anyProducer"),qo=Promise.resolve(),Vi=Symbol("listenerAdded"),Ri=Symbol("listenerRemoved");let xi=!1,Qi=!1;function Ir(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function qr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Sr(t,e){const n=yr.get(t);if(n.has(e))return n.get(e)}function Ur(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Wi,r=er.get(t);if(r.has(n))return r.get(n)}function C2(t,e,n){const r=er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Wi)){const t=Promise.all([e,n]);for(const e of r.get(Wi))e.enqueue(t)}}function ts(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=Ur(t,n);e||(e=new Set,er.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=Ur(t,n);e&&(e.delete(o),0===e.size&&er.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function es(t){if(void 0===t)return ns;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ns.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Lr=t=>t===Vi||t===Ri;function ti(t,e,n){if(Lr(e))try{xi=!0,t.emit(e,n)}finally{xi=!1}}class ur{static mixin(t,e){return e=es(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new ur}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return Qi;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||Qi}static set isDebugEnabled(t){Qi=t}constructor(t={}){var e;or.set(this,new Set),yr.set(this,new Map),er.set(this,new Map),er.get(this).set(Wi,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(ur.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t){Ir(n);let t=Sr(this,n);t||(t=new Set,yr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),Lr(n)||ti(this,Vi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t){Ir(n);const t=Sr(this,n);t&&(t.delete(e),0===t.size&&yr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),Lr(n)||ti(this,Ri,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Ir(e);return ts(this,t)}async emit(t,e){var n;if(Ir(t),Lr(t)&&!xi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),C2(this,t,e);const r=null!=(n=Sr(this,t))?n:new Set,i=or.get(this),o=[...r],a=Lr(t)?[]:[...i];await qo,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(Ir(t),Lr(t)&&!xi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=Sr(this,t))?n:new Set,i=or.get(this),o=[...r],a=[...i];await qo;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return qr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(t),ti(this,Vi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return ts(this)}offAny(t){qr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ti(this,Ri,{listener:t}),or.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=Sr(this,e);t&&t.clear();const n=Ur(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{or.get(this).clear();for(const[t,e]of yr.get(this).entries())e.clear(),yr.get(this).delete(t);for(const[t,e]of er.get(this).entries()){for(const t of e)t.finish();e.clear(),er.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&Ir(s),l+=or.get(this).size;for(const t of yr.get(this).values())l+=t.size;for(const t of er.get(this).values())l+=t.size}else l+=or.get(this).size+(null!=(n=null==(e=Sr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=Ur(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=Ur(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=es(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ns=Object.getOwnPropertyNames(ur.prototype).filter((t=>"constructor"!==t));function bo(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}Object.defineProperty(ur,"listenerAdded",{value:Vi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(ur,"listenerRemoved",{value:Ri,writable:!1,enumerable:!0,configurable:!1});const Cr=bo("globals",{});var Dn=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Dn||{});function Vs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let H2=0;function Ii(t,e,n,r,i){const o=H2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Vs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function zr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Vs(t))))}const Si=bo("workerized",{});function yo(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function N2(){if(yo())zr({type:Dn.GLOBALS_SYNC},Cr);else{const t=[];for(const e in Si){const{worker:n,resolvers:r}=Si[e].workerContext;n&&t.push(Ii(n,Dn.GLOBALS_SYNC,"",[Cr],r))}await Promise.all(t)}}function Br(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Br(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Br(t[n],e[n])):e[n]=t[n]}async function J2(t,e,n){const r=new e;if(r.addEventListener("message",(async({data:t})=>{var e,r,i,o,a,l,s;if(t.type===Dn.GLOBALS_SYNC)t.id?(null==(r=n.get(null!=(e=t.id)?e:-1))||r(t.result),n.delete(null!=(i=t.id)?i:-1)):(Br(null!=(o=t.result)?o:{},Cr),await N2());else null==(l=n.get(null!=(a=t.id)?a:-1))||l(t.result),n.delete(null!=(s=t.id)?s:-1)})),!await Ii(r,Dn.INIT,"",[t.workerId,Cr],n))throw"Failed to instantiate workerized class";return r}let E2=0;async function k2(t,e,n){const r={},i=E2++;return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>Ii(e,Dn.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const o=await Ii(e,Dn.TERMINATE,"",t,n);return delete Si[i],e.terminate(),r.workerContext.worker=void 0,o},r.workerContext={id:i,worker:e,resolvers:n},Si[i]=r,r}async function U2(t,e){const n=new Map;return k2(t,await J2(t,e,n),n)}async function B2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;zr(t,await e.instance[n](...null!=r?r:[]))}const Rs=bo("registeredWorkers",{});function A2(t,e){e.workerId=t,yo()&&(Rs[e.workerId]=e)}function M2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Rs[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Br(r,Cr),zr(t,void 0!==typeof e.instance)}async function K2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),zr(t,r)}function j2(t){if(!t.args)throw"Missing globals while syncing";Br(t.args[0],Cr),zr(t,{})}function z2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Dn.INIT:M2(n,t);break;case Dn.FORWARD:B2(n,t);break;case Dn.TERMINATE:K2(n,t);break;case Dn.GLOBALS_SYNC:j2(n)}}}yo()&&z2();class rs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}var O2=Object.defineProperty,P2=(t,e,n)=>e in t?O2(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,_2=(t,e,n)=>(P2(t,"symbol"!=typeof e?e+"":e,n),n);const Q2="hlg.tokbox.com/prod/logging/vcp_webrtc",D2="https://",$2=1e4;let ei;const q2=new Uint8Array(16);function t1(){if(!ei&&(ei=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!ei))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ei(q2)}const Bn=[];for(let t=0;t<256;++t)Bn.push((t+256).toString(16).slice(1));function e1(t,e=0){return(Bn[t[e+0]]+Bn[t[e+1]]+Bn[t[e+2]]+Bn[t[e+3]]+"-"+Bn[t[e+4]]+Bn[t[e+5]]+"-"+Bn[t[e+6]]+Bn[t[e+7]]+"-"+Bn[t[e+8]]+Bn[t[e+9]]+"-"+Bn[t[e+10]]+Bn[t[e+11]]+Bn[t[e+12]]+Bn[t[e+13]]+Bn[t[e+14]]+Bn[t[e+15]]).toLowerCase()}const n1=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),is={randomUUID:n1};function r1(t,e,n){if(is.randomUUID&&!e&&!t)return is.randomUUID();const r=(t=t||{}).random||(t.rng||t1)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return e1(r)}function go(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}const cr=go("globals",{});var Zr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Zr||{});function xs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let i1=0;function o1(t,e,n,r,i){const o=i1++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>xs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function Or(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>xs(t))))}const os=go("workerized",{});function Is(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function s1(){if(Is())Or({type:Zr.GLOBALS_SYNC},cr);else{const t=[];for(const e in os){const{worker:n,resolvers:r}=os[e].workerContext;n&&t.push(o1(n,Zr.GLOBALS_SYNC,"",[cr],r))}await Promise.all(t)}}function Ti(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ti(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ti(t[n],e[n])):e[n]=t[n]}async function l1(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Or(t,await e.instance[n](...null!=r?r:[]))}const c1=go("registeredWorkers",{});function u1(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=c1[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ti(r,cr),Or(t,void 0!==typeof e.instance)}async function a1(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Or(t,r)}function d1(t){if(!t.args)throw"Missing globals while syncing";Ti(t.args[0],cr),Or(t,{})}function h1(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Zr.INIT:u1(n,t);break;case Zr.FORWARD:l1(n,t);break;case Zr.TERMINATE:a1(n,t);break;case Zr.GLOBALS_SYNC:d1(n)}}}function f1(t,e){return cr[t]||(cr[t]=e),[()=>cr[t],async e=>{cr[t]=e,await s1()}]}function m1(t,e){return f1(t,e)}Is()&&h1();const[p1,s3]=m1("metadata");function Di(){return p1()}class b1{constructor(t){_2(this,"uuid",r1()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=Di())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),$2);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=Di().proxyUrl)?t:D2;return e+=("/"===e.at(-1)?"":"/")+Q2,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=Di();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const y1="4.3.5";async function Ss(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}var Ts=(t=>(t.PUSH="PUSH",t.POP="POP",t))(Ts||{});class g1{constructor(t){Wt(this,"context"),Wt(this,"extension"),Wt(this,"queries",[]),Wt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await Ss(200)}}}
|
|
1
|
+
var Hl=Object.defineProperty,Nl=(t,e,n)=>e in t?Hl(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Wt=(t,e,n)=>(Nl(t,"symbol"!=typeof e?e+"":e,n),n),Jl=Object.defineProperty,El=(t,e,n)=>e in t?Jl(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Ke=(t,e,n)=>(El(t,"symbol"!=typeof e?e+"":e,n),n);function kl(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class nr{}Ke(nr,"updates",{transformer_new:"New transformer",transformer_null:"Null transformer"}),Ke(nr,"errors",{transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"});const ir=new WeakMap,ci=new WeakMap,Er=new WeakMap,eo=Symbol("anyProducer"),Oo=Promise.resolve(),fi=Symbol("listenerAdded"),mi=Symbol("listenerRemoved");let zi=!1;function Rr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function Dr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function xr(t,e){const n=ci.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function kr(t,e){const n="string"==typeof e||"symbol"==typeof e?e:eo,r=Er.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function Ul(t,e,n){const r=Er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(eo)){const t=Promise.all([e,n]);for(const e of r.get(eo))e.enqueue(t)}}function Po(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)kr(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)kr(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function _o(t){if(void 0===t)return Qo;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Qo.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Oi=t=>t===fi||t===mi;class Gr{static mixin(t,e){return e=_o(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Gr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return zi;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||zi}static set isDebugEnabled(t){zi=t}constructor(t={}){ir.set(this,new Set),ci.set(this,new Map),Er.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){Dr(e),t=Array.isArray(t)?t:[t];for(const n of t)Rr(n),xr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),Oi(n)||this.emit(fi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){Dr(e),t=Array.isArray(t)?t:[t];for(const n of t)Rr(n),xr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),Oi(n)||this.emit(mi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Rr(e);return Po(this,t)}async emit(t,e){Rr(t),this.logIfDebugEnabled("emit",t,e),Ul(this,t,e);const n=xr(this,t),r=ir.get(this),i=[...n],o=Oi(t)?[]:[...r];await Oo,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Rr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=xr(this,t),r=ir.get(this),i=[...n],o=[...r];await Oo;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return Dr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ir.get(this).add(t),this.emit(fi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Po(this)}offAny(t){Dr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(mi,{listener:t}),ir.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){xr(this,e).clear();const t=kr(this,e);for(const e of t)e.finish();t.clear()}else{ir.get(this).clear();for(const t of ci.get(this).values())t.clear();for(const t of Er.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Rr(n),e+=ir.get(this).size;for(const t of ci.get(this).values())e+=t.size;for(const t of Er.get(this).values())e+=t.size}else e+=ir.get(this).size+xr(this,n).size+kr(this,n).size+kr(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=_o(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Qo=Object.getOwnPropertyNames(Gr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Gr,"listenerAdded",{value:fi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Gr,"listenerRemoved",{value:mi,writable:!1,enumerable:!0,configurable:!1});var fo=Gr;function Bl(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function Al(t){if(Bl(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function Pi(t){return Al(t).message}var Ml=Object.defineProperty,Kl=(t,e,n)=>e in t?Ml(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,jl=(t,e,n)=>(Kl(t,"symbol"!=typeof e?e+"":e,n),n);const zl="hlg.tokbox.com/prod/logging/vcp_webrtc",Ol="https://",Pl=1e4;let $r;const _l=new Uint8Array(16);function Ql(){if(!$r&&($r=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!$r))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $r(_l)}const Un=[];for(let t=0;t<256;++t)Un.push((t+256).toString(16).slice(1));function Dl(t,e=0){return(Un[t[e+0]]+Un[t[e+1]]+Un[t[e+2]]+Un[t[e+3]]+"-"+Un[t[e+4]]+Un[t[e+5]]+"-"+Un[t[e+6]]+Un[t[e+7]]+"-"+Un[t[e+8]]+Un[t[e+9]]+"-"+Un[t[e+10]]+Un[t[e+11]]+Un[t[e+12]]+Un[t[e+13]]+Un[t[e+14]]+Un[t[e+15]]).toLowerCase()}const $l=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Do={randomUUID:$l};function ql(t,e,n){if(Do.randomUUID&&!e&&!t)return Do.randomUUID();const r=(t=t||{}).random||(t.rng||Ql)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return Dl(r)}function mo(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}const lr=mo("globals",{});var gr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(gr||{});function Gs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let t2=0;function e2(t,e,n,r,i){const o=t2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Gs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function jr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Gs(t))))}const $o=mo("workerized",{});function Xs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function n2(){if(Xs())jr({type:gr.GLOBALS_SYNC},lr);else{const t=[];for(const e in $o){const{worker:n,resolvers:r}=$o[e].workerContext;n&&t.push(e2(n,gr.GLOBALS_SYNC,"",[lr],r))}await Promise.all(t)}}function pi(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],pi(t[n],e[n])):"object"==typeof t[n]?(e[n]={},pi(t[n],e[n])):e[n]=t[n]}async function r2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;jr(t,await e.instance[n](...null!=r?r:[]))}const i2=mo("registeredWorkers",{});function o2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=i2[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),pi(r,lr),jr(t,void 0!==typeof e.instance)}async function s2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),jr(t,r)}function l2(t){if(!t.args)throw"Missing globals while syncing";pi(t.args[0],lr),jr(t,{})}function c2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case gr.INIT:o2(n,t);break;case gr.FORWARD:r2(n,t);break;case gr.TERMINATE:s2(n,t);break;case gr.GLOBALS_SYNC:l2(n)}}}function u2(t,e){return lr[t]||(lr[t]=e),[()=>lr[t],async e=>{lr[t]=e,await n2()}]}function a2(t,e){return u2(t,e)}Xs()&&c2();const[d2,h2]=a2("metadata");function f2(t){h2(t)}function ui(){return d2()}class po{constructor(t){jl(this,"uuid",ql()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=ui())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),Pl);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=ui().proxyUrl)?t:Ol;return e+=("/"===e.at(-1)?"":"/")+zl,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=ui();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const ai="2.0.2";class m2{constructor(t){Ke(this,"frameTransformedCount",0),Ke(this,"frameFromSourceCount",0),Ke(this,"startAt",0),Ke(this,"reporter"),this.config=t,this.reporter=new po(t)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:t,frameFromSourceCount:e}=this;return e/((Date.now()-t)/1e3)}async onFrameTransformed(t={},e=!1){0===this.startAt&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:n,frameTransformedCount:r,frameFromSourceCount:i}=this,o=Date.now(),a=(o-n)/1e3,l=r/a,s=i/a;return e||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=o,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:s,transformedFps:l,framesTransformed:r,...t})):"success"}}var p2=(t=>(t.FPS_DROP="fps_drop",t))(p2||{}),b2=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(b2||{}),no=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(no||{});const y2=500,g2=.8;class Z2 extends fo{constructor(t,e){super(),Ke(this,"reporter_",new po),Ke(this,"reporterQos_",new m2({loggingIntervalFrameCount:y2,report:{version:ai}})),Ke(this,"transformerType_"),Ke(this,"transformer_"),Ke(this,"shouldStop_"),Ke(this,"isFlashed_"),Ke(this,"mediaTransformerQosReportStartTimestamp_"),Ke(this,"videoHeight_"),Ke(this,"videoWidth_"),Ke(this,"trackExpectedRate_"),Ke(this,"index_"),Ke(this,"controller_"),this.index_=e,this.transformer_=t,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in t&&(this.transformerType_=t.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){this.report({message:nr.errors.transformer_start,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",e)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else{try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),this.reportQos()}catch(t){this.report({message:nr.errors.transformer_transform,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",e)}if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*g2>this.reporterQos_.fps){const t={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",t)}}}async flush(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){this.report({message:nr.errors.transformer_flush,variation:"Error",error:Pi(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",e)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(t){this.reporter_.send({version:ai,action:"MediaTransformer",transformerType:this.transformerType_,...t})}reportQos(t=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:ai,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},t)}}class v2 extends fo{constructor(t){super(),Ke(this,"transformers_"),Ke(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new Z2(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class G2 extends fo{constructor(){super(),Ke(this,"reporter_"),Ke(this,"pipeline_"),Ke(this,"transformers_"),Ke(this,"readable_"),Ke(this,"writable_"),Ke(this,"trackExpectedRate_"),this.reporter_=new po,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise((async(t,e)=>{if(!this.transformers_||0===this.transformers_.length)return this.report({message:nr.errors.transformer_none,variation:"Error"}),void e("[MediaProcessor] Need to set transformers.");if(!this.readable_)return this.report({variation:"Error",message:nr.errors.readable_null}),void e("[MediaProcessor] Readable is null.");if(!this.writable_)return this.report({variation:"Error",message:nr.errors.writable_null}),void e("[MediaProcessor] Writable is null.");let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new v2(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=no.pipeline_restarted:"pipeline_started_with_error"===t&&(t=no.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((async t=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),t()}))}report(t){this.reporter_.send({version:ai,action:"MediaProcessor",...t})}}class X2{constructor(){Ke(this,"processor_"),Ke(this,"generator_"),this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class W2{constructor(t){Ke(this,"insertableStreamHelper_"),Ke(this,"mediaProcessor_"),this.insertableStreamHelper_=new X2,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var di=(t=>(t.Low="Low",t.High="High",t))(di||{}),V2=(t=>(t.BackgroundBlur="BackgroundBlur",t.VirtualBackground="VirtualBackground",t.VideoBackground="VideoBackground",t.SilhouetteBlur="SilhouetteBlur",t))(V2||{}),R2=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(R2||{});const x2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var I2=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l,s="./this.program",c=function(t,e){throw e},u=!0,d="";typeof document<"u"&&document.currentScript&&(d=document.currentScript.src),t&&(d=t),d=0!==d.indexOf("blob:")?d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var h,f=i.print||console.log.bind(console),m=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(s=i.thisProgram),i.quit&&(c=i.quit),i.wasmBinary&&(h=i.wasmBinary);var p=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&L("no native wasm support detected");var b,g,y,Z,v,G=!1,X=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function W(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&X)return X.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function V(t,e){return t?W(Z,t,e):""}function x(t,e){return t%e>0&&(t+=e-t%e),t}function R(t){g=t,i.HEAP8=y=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=v=new Int32Array(t),i.HEAPU8=Z=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var I,w=[],S=[],Y=[],F=0;var T=0,C=null;function L(t){i.onAbort&&i.onAbort(t),m(t="Aborted("+t+")"),G=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var H,N,k,J="data:application/octet-stream;base64,";function U(t){return t.startsWith(J)}function K(t){try{if(t==H&&h)return new Uint8Array(h);if(!l)throw"both async and sync fetching of the wasm failed"}catch(t){L(t)}}function B(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?I.get(n)():I.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}U(H="tflite-simd.wasm")||(N=H,H=i.locateFile?i.locateFile(N,d):d+N),k=function(){return performance.now()};var j=!0;function z(t){try{return b.grow(t-g.byteLength+65535>>>16),R(b.buffer),1}catch{}}var M={};function A(){if(!A.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var e in M)void 0===M[e]?delete t[e]:t[e]=M[e];var n=[];for(var e in t)n.push(e+"="+t[e]);A.strings=n}return A.strings}var E={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=E.buffers[t];0===e||10===e?((1===t?f:m)(W(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return E.varargs+=4,v[E.varargs-4>>2]},getStr:function(t){return V(t)},get64:function(t,e){return t}};var O={a:function(t,e,n,r){L("Assertion failed: "+V(t)+", at: "+[e?V(e):"unknown filename",n,r?V(r):"unknown function"])},e:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){L("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t||!j)return function(t){v[_()>>2]=t}(28),-1;n=k()}return v[e>>2]=n/1e3|0,v[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){Z.copyWithin(t,e,e+n)},m:function(t){var e=Z.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),z(Math.min(n,x(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=k();k()-e<t;);},f:function(t,e){var n=0;return A().forEach((function(r,i){var o=e+n;v[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)y[e++>>0]=t.charCodeAt(r);n||(y[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=A();v[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),v[e>>2]=r,0},j:function(t){!function(t,e){!function(t){p||F>0||(i.onExit&&i.onExit(t),G=!0),c(t,new Q(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=v[e+8*o>>2],l=v[e+(8*o+4)>>2],s=0;s<l;s++)E.printChar(t,Z[a+s]);i+=l}return v[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){L("randomDevice")}}());for(var r=0;r<n;r++)y[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:O};function e(t,e){var n=t.exports;i.asm=n,R((b=i.asm.q).buffer),I=i.asm.E,function(t){S.unshift(t)}(i.asm.r),function(t){if(T--,i.monitorRunDependencies&&i.monitorRunDependencies(T),0==T&&C){var e=C;C=null,e()}}()}function n(t){e(t.instance)}function o(e){return(!h&&u&&"function"==typeof fetch?fetch(H,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+H+"'";return t.arrayBuffer()})).catch((function(){return K(H)})):Promise.resolve().then((function(){return K(H)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){m("failed to asynchronously prepare wasm: "+t),L(t)}))}if(T++,i.monitorRunDependencies&&i.monitorRunDependencies(T),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return m("Module.instantiateWasm callback failed with error: "+t),!1}(h||"function"!=typeof WebAssembly.instantiateStreaming||U(H)||"function"!=typeof fetch?o(n):fetch(H,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return m("wasm streaming compile failed: "+t),m("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var P,_=i.___errno_location=function(){return(_=i.___errno_location=i.asm.F).apply(null,arguments)};function Q(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function D(t){function e(){P||(P=!0,i.calledRun=!0,!G&&(B(S),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),Y.unshift(t);var t;B(Y)}()))}T>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;B(w)}(),T>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(C=function t(){P||D(),P||(C=t)},i.run=D,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return D(),e.ready}}();class S2{constructor(){Wt(this,"selectedTFLite"),Wt(this,"isSIMDSupported",!1),Wt(this,"isThreadsSupported",!1),Wt(this,"inputWidth",0),Wt(this,"inputHeight",0),Wt(this,"inputChannelCount",0),Wt(this,"inputMemoryOffset",0),Wt(this,"outputWidth",0),Wt(this,"outputHeight",0),Wt(this,"outputChannelCount",0),Wt(this,"outputMemoryOffset",0)}}const T2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",w2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function F2(t=T2,e=w2){let n=new S2;return new Promise((function(r,i){(async function(){return I2({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class Ws{constructor(){Wt(this,"canvas",new OffscreenCanvas(0,0)),Wt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0})),Wt(this,"pixelCount",0),Wt(this,"inputOffset",0),Wt(this,"outputOffset",0),Wt(this,"infos"),Wt(this,"mask")}async init(t,e){await this.initWasm(t,e),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(t,e){this.infos=await F2(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function o3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await Y2(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function Y2(t,e){const n=new Ws;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await x2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:L2()};try{await kl()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function L2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}const bi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function F(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},C=null;function L(t,e){void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array.prototype.slice;function U(t,e,n){return e===n?k||(k=new Uint8Array(0)):J?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var K=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?H(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function z(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}B.prototype.reset=function(){this.g=this.j};var A=[];function E(){this.g=new Uint8Array(64),this.h=0}function O(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,A.length?(n=A.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function _(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=z(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=z(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!_(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=z(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function $(t){var e,n=z(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=R(s,l),l.length=0);e=R(s,l)}return e}function q(){this.h=[],this.i=0,this.g=new E}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){O(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?K=0:(0,K=2147483648):isNaN(r)?(0,K=2147483647):34028234663852886e22<r?(0,K=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,K=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,K=(n<<31|e+127<<23|r)>>>0),n=K,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,U(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function ft(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function mt(t){var e=void 0!==e&&e,n=ft(t,1,e);return null==n&&(n=dt),n===dt&&bt(t,1,n=ct([]),e),n}function pt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function bt(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=mt(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=mt(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=ft(t,e))?0:t}function Gt(t,e){return null==(t=ft(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=U(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function xt(t){ut.call(this,t)}function Rt(t,e){for(;_(e);)switch(e.i){case 8:var n=z(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 26:bt(t,3,n=$(e));break;case 34:bt(t,4,n=$(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,wt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,L)},ut.prototype.toString=function(){return Zt(this).toString()},f(xt,ut),f(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,xt,e)};var wt=[1];function St(t){ut.call(this,t)}function Yt(t,e){for(;_(e);)switch(e.i){case 13:var n=M(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 29:bt(t,3,n=M(e.g));break;case 37:bt(t,4,n=M(e.g));break;case 45:bt(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Ft(t){ut.call(this,t,-1,Tt)}f(St,ut),f(Ft,ut);var Tt=[1];function Ct(t){ut.call(this,t)}function Lt(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ht(t){return gt(t,xt).map((function(t){return{index:vt(t,1),Y:pt(t,2),label:null!=ft(t,3)?Gt(t,3):void 0,displayName:null!=ft(t,4)?Gt(t,4):void 0}}))}function Nt(t){return{x:pt(t,1),y:pt(t,2),z:pt(t,3),visibility:null!=ft(t,4)?pt(t,4):void 0}}function kt(t,e){this.h=t,this.g=e,this.l=0}function Jt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Lt(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Lt(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Ut(t){this.g=t}f(Ct,ut);var Kt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(t,e){return e+t}function jt(t,e){window[t]=e}function zt(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||Bt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,f=this;return X(t,(function(t){switch(t.g){case 1:return e=f,f.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(f,f.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Kt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return jt("createMediapipeSolutionsWasm",{locateFile:f.locateFile}),jt("createMediapipeSolutionsPackedAssets",{locateFile:f.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=At(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,At(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:f.h=t.h,f.l=new OffscreenCanvas(1,1),f.h.canvas=f.l,o=f.h.GL.createContext(f.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),f.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(f.l=document.createElement("canvas"),!(h=f.l.getContext("webgl2",{}))&&!(h=f.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();f.D=h,f.h.canvas=f.l,f.h.createContext(f.l,!0,!0,{});case 4:f.i=new f.h.SolutionWasm,f.R=!1,t.g=0}}))}))}function At(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function Et(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,f,m,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new kt(i.h,i.D),i.s[e]=r),t.return(Jt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=v.get(x);t:{var I=new Ct;for(R=new P(R);_(R);)switch(R.i){case 13:var w=M(R.g);bt(I,1,w);break;case 21:bt(I,2,w=M(R.g));break;case 29:bt(I,3,w=M(R.g));break;case 37:bt(I,4,w=M(R.g));break;case 45:bt(I,5,w=M(R.g));break;case 48:for(var S=R.g,Y=128,F=0,T=w=0;4>T&&128<=Y;T++)F|=(127&(Y=S.h[S.g++]))<<7*T;if(128<=Y&&(F|=(127&(Y=S.h[S.g++]))<<28,w|=(127&Y)>>4),128<=Y)for(T=0;5>T&&128<=Y;T++)w|=(127&(Y=S.h[S.g++]))<<7*T+3;128>Y?(S=F>>>0,(w=2147483648&(Y=w>>>0))&&(Y=~Y>>>0,0==(S=1+~S>>>0)&&(Y=Y+1>>>0)),S=4294967296*Y+(S>>>0),w=w?-S:S):(S.l=!0,w=void 0),bt(I,6,w);break;default:if(!Wt(I,R))break t}}I={Z:pt(I,1),$:pt(I,2),height:pt(I,3),width:pt(I,4),rotation:pt(I,5,0),X:vt(I,6)},w=G.get(x);t:for(R=new Ft,w=new P(w);_(w);)if(10===w.i)yt(R,S=D(w,new St,Yt),St,void 0);else if(!Wt(R,w))break t;R=gt(R,St).map(Nt),S=W.get(x);t:for(w=new It,S=new P(S);_(S);)if(10===S.i)w.addClassification(D(S,new xt,Rt));else if(!Wt(w,S))break t;I={T:I,O:R,M:Ht(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===f){t.g=3;break}if("float_list"===h.type){r[d]=f,t.g=7;break}if("proto"===h.type){r[d]=f,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=Z.s[d])||(m=new kt(Z.h,Z.D),Z.s[d]=m),g(t,Jt(m,f,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Ot(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Et(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pt(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function _t(t){var e=this;t=t||{},this.g=new zt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Pt(t.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Pt(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,At(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=zt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,At(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ot(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,f=this;return X(n,(function(n){switch(n.g){case 1:return f.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,f.C,2)):n.return();case 2:return g(n,f.initialize(),3);case 3:for(i=new f.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=f.g.inputs[s]){t:{var m=f,p=t[s];switch(c.type){case"video":var b=m.m[c.stream];if(b||(b=new kt(m.h,m.D),m.m[c.stream]=b),0===(m=b).l&&(m.l=m.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:m.l,width:y,height:b},(y=m.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),m.h.bindTexture2d(m.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),m.h.bindTexture2d(0),m=b;break t;case"detections":for((b=m.m[c.stream])||(b=new Ut(m.h),m.m[c.stream]=b),(m=b).data||(m.data=new m.g.DetectionListData),m.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=m.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Ct;bt(W,1,X.Z),bt(W,2,X.$),bt(W,3,X.height),bt(W,4,X.width),bt(W,5,X.rotation),bt(W,6,X.X);var V=X=new q;nt(V,1,ft(W,1)),nt(V,2,ft(W,2)),nt(V,3,ft(W,3)),nt(V,4,ft(W,4)),nt(V,5,ft(W,5));var x=ft(W,6);if(null!=x&&null!=x){O(V.g,48);var R=V.g,I=x;x=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,x&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),x=K=w,w=I;0<w||127<x;)R.push(127&x|128),x=(x>>>7|w<<25)>>>0,w>>>=7;R.push(x)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=m.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),bt(V=new St,1,W.x),bt(V,2,W.y),bt(V,3,W.z),W.visibility&&bt(V,4,W.visibility),nt(R=W=new q,1,ft(V,1)),nt(R,2,ft(V,2)),nt(R,3,ft(V,3)),nt(R,4,ft(V,4)),nt(R,5,ft(V,5)),Xt(V,R),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=m.data).addClassification,X=b,W=y.M[Z],bt(V=new xt,2,W.Y),W.index&&bt(V,1,W.index),W.label&&bt(V,3,W.label),W.displayName&&bt(V,4,W.displayName),R=W=new q,null!=(w=ft(V,1))&&null!=w)if(O(R.g,8),x=R.g,0<=w)O(x,w);else{for(I=0;9>I;I++)x.push(127&w|128),w>>=7;x.push(1)}nt(R,2,ft(V,2)),null!=(x=ft(V,3))&&(x=F(x),O(R.g,26),O(R.g,x.length),tt(R,R.g.end()),tt(R,x)),null!=(x=ft(V,4))&&(x=F(x),O(R.g,34),O(R.g,x.length),tt(R,R.g.end()),tt(R,x)),Xt(V,R),W=et(W),G.call(v,X,W)}}m=m.data;break t;default:m={}}}switch(u=m,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return f.i.send(i),g(n,f.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",zt),x("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=_t.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},x("SelfieSegmentation",_t),x("VERSION","0.1.1632777926")}).call(bi);const yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.s=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",F=typeof TextEncoder<"u",T={},C=null;function L(t){var e;void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array;function U(t){return J&&null!=t&&t instanceof Uint8Array}function K(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&E(this,t)}function E(t,e){t.h=function(t,e){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return H(t);if(t.constructor===K)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||U(e)?e:"string"==typeof e?H(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=new Uint8Array(0)));if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}A.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,_.length?(n=_.pop(),e&&(n.v=e.v),t&&E(n,t),t=n):t=new A(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new Q}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var ft,mt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return Rt(t,e=void 0===e?wt:e)}function xt(t,e){if(null!=t){if(Array.isArray(t))t=Rt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=xt(t[n],e);t=r}else t=e(t);return t}}function Rt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=xt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(U(t))return L(t);if(t instanceof K){var e=t.L;return e=null==e||"string"==typeof e?e:J&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return U(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=ft),ft=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},f(Yt,St),mt){var Ft={};Object.defineProperties(Yt,(Ft[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Tt(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Ut(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Kt(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ct=Symbol();function Lt(t,e,n){return t[Ct]||(t[Ct]=function(t,r){return e(t,r,n)})}function Ht(t){var e=t[Ct];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ct]=e}return e}function Nt(t){var e=function(t){var e=t.ba;return e?Ht(e):(e=t.oa)?Lt(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Jt=Symbol();function Ut(t){var e=t[Jt];if(!e){var n=Et(t);e=function(t,e){return ee(t,e,n)},t[Jt]=e}return e}function Kt(t,e){var n=t[Jt];return n||(n=function(t,n){return Tt(t,n,e)},t[Jt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Ut(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function At(t,e,n,r,i,o){var a=Kt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function Et(t){return t[Bt]||kt(t,t[Bt]=[],jt,zt,Mt,At)}var Ot=Symbol();function Pt(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ht(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||kt(t,t[Ot]={},Pt,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(E(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Tt(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,Et(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?R():(l=t[o++],194>a||128!=(192&l)?(o--,R()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?R():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,R()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?R():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,R()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):R(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(f(ce,Yt),mt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function fe(t){ce.call(this,t,-1,pe)}function me(){return[1,se,de,he]}f(de,ce),f(fe,ce),fe.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}f(be,ce),f(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function xe(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Re(t){return t.map((function(t){return vt(te(t,ye,Ze),be,1).map(xe)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function we(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Se(t){this.g=t}f(Ge,ce);var Ye=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Fe(t,e){return e+t}function Te(t,e){window[t]=e}function Ce(t){if(this.g=t,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=t&&t.locateFile||Fe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Le(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ye),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Te("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Te("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=He(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,He(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,f.g=0}}))}function He(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function Ne(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(we(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=te(v.get(x),Ge,Xe);R={ea:{ka:Zt(R,1),la:Zt(R,2),height:Zt(R,3),width:Zt(R,4),rotation:Zt(R,5,0),ia:Xt(R,6)},Y:vt(te(G.get(x),ye,Ze),be,1).map(xe),V:Ve(te(W.get(x),fe,me))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.u[d])||(m=new Ie(t.h,t.G),t.u[d]=m),g(Z,we(m,f,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function ke(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Ne(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Je(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ue(t){var e=this;t=t||{},this.g=new Ce({locateFile:t.locateFile,files:function(t){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Je(t.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:Re},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:Re},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,fe,me))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i;return X((function(o){return 1==o.g?(n=Je(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,He(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.return(!0))}))}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}(t=Ce.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Le(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,He(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,ke(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ie(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new Se(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),b.Y)for(Z=0;Z<b.Y.length;++Z){var V=!!(W=b.Y[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.score),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Ce),x("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ue.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Hands",Ue),x("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),x("VERSION","0.4.1646424915")}).call(yi);var gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?k(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,w()}function _(t){t.g>t.i&&(t.l=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}E.prototype.reset=function(){this.g=this.m},E.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,_(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,_(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,_(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,_(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,_(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,w(),n):(_(this),n))))))},E.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,_(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,_(t);break t}e++}t.l=!0,w()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){q(t.g,8*e+2),q(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function ft(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function mt(t){return Array.isArray(t)&&ht(t,1),t}function pt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function bt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?k(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||bt(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&ft(t)&&mt(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&bt(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?mt(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?mt(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(mt([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function xt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?St(t,e,i=mt([]),r):n&&Array.isArray(i)&&2&ft(i)&&St(t,e,i=i.slice(),r),i}function Rt(t){var e=xt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function wt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function St(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function Yt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Ft(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=xt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&ft(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&pt(r[a].h);o&&(pt(r),Object.freeze(r)),t.g[n]=r}return r}function Tt(t,e,n,r,i){var o=Ft(t,r,e);n=n||new r,t=xt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Ct(n))):(o.push(n),t.push(Ct(n)))}function Ct(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Ct(n[r]);else n&&Ct(n)}return t.h}function Lt(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Ht(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Nt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ht(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Jt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Ut(t,e,n){if(null!=(e=Vt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=A)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Kt(t,e,n){return 5===t.h&&(St(e,n,t.g.o()),!0)}function Bt(t,e,n){return(5===t.h||2===t.h)&&(e=xt(e,n),2==t.h?ot(t,E.prototype.o,e):e.push(t.g.o()),!0)}function jt(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function zt(t,e,n){return 0===t.h&&(St(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return St(e,n,r),!0}function At(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Ct(t),e.g[n]=t,St(e,n,r,o),!0}function Et(t,e,n,r,i){return 2===t.h&&(Tt(e,n,t=it(t,new r,i),r,void 0),!0)}function Ot(t,e,n){return(0===t.h||2===t.h)&&(e=xt(e,n),2==t.h?ot(t,E.prototype.j,e):e.push(t.g.j()),!0)}function Pt(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function _t(t){vt.call(this,t,-1,qt)}function Qt(t,e){return Nt(t,e,Gt||(Gt={1:zt,2:zt,3:Bt,4:Pt}))}vt.prototype.toJSON=function(){return Zt(Ct(this),gt)},vt.prototype.toString=function(){return Ct(this).toString()},f(_t,vt),_t.prototype.getRows=function(){return Vt(this,1)},_t.prototype.getCols=function(){return Vt(this,2)},_t.prototype.getPackedDataList=function(){return Rt(this)},_t.prototype.getLayout=function(){return It(this,4,0)};var Dt,$t,qt=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Ut(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,L(r)),null!=(r=Vt(t,4))&&ct(e,4,L(r)),Lt(t,e)}function ne(t,e){return Nt(t,e,Dt||(Dt={1:zt,2:Kt,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return Nt(t,e,$t||($t={1:[Et,te,ne]}))}f(te,vt),f(re,vt),re.prototype.addClassification=function(t,e){return Tt(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Ut(e,t,1),Ut(e,t,2),Ut(e,t,3),Ut(e,t,4),Ut(e,t,5),Lt(t,e)}function ue(t,e){return Nt(t,e,oe||(oe={1:Kt,2:Kt,3:Kt,4:Kt,5:Kt}))}function de(t){vt.call(this,t,-1,pe)}function he(t,e){return Nt(t,e,ae||(ae={1:[Et,se,ue]}))}f(se,vt),f(de,vt);var fe,me,pe=[1];function be(t){vt.call(this,t)}function ge(t,e){Ut(e,t,1),Ut(e,t,2),Ut(e,t,3),Ut(e,t,4),Ut(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Lt(t,e)}function ye(t,e){return Nt(t,e,fe||(fe={1:Kt,2:Kt,3:Kt,4:Kt,5:Kt,6:jt}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return Nt(t,e,me||(me={1:Pt,2:Pt,3:Bt,4:Ot}))}f(be,vt),f(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return Rt(this)},Ze.prototype.getIndexBufferList=function(){return xt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return Nt(t,e,Ge||(Ge={1:[At,Ze,ve],2:[At,_t,Qt]}))}f(We,vt),We.prototype.getMesh=function(){return Yt(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return Yt(this,_t,2)};var xe=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Re=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],we=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Se=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ye=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Fe=[].concat(l(xe),l(Re),l(Ie),l(we),l(Se),l(Ye));function Te(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ce(t){return Ft(t,te,1).map((function(t){return{index:It(t,1,0),score:wt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Le(t){return{x:wt(t,1),y:wt(t,2),z:wt(t,3),visibility:null!=Vt(t,4)?wt(t,4):void 0}}function He(t){return Ft(Jt(t,de,he),se,1).map(Le)}function Ne(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Te(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Te(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Je(t){this.g=t}var Ue=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ke(t,e){return e+t}function Be(t,e){window[t]=e}function je(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ze(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ue),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,f.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ae(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Ne(t.h,t.D),t.s[e]=r),i.return(ke(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Jt(v.get(x),be,ye);R={T:{X:wt(R,1),Y:wt(R,2),height:wt(R,3),width:wt(R,4),rotation:wt(R,5,0),W:It(R,6,0)},O:He(G.get(x)),M:Ce(Jt(W.get(x),re,ie))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new Ne(t.h,t.D),t.s[d]=m),g(Z,ke(m,f,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ae(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Oe(t){return t.map(Pe)}function Pe(t){var e=(t=Jt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function _e(t){var e=this;t=t||{},this.g=new je({locateFile:t.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:He},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:He},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:He},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:He},ea:{type:"proto",stream:"world_landmarks",transform:He},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.g.reset(),0))}))}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}(t=je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ze(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.C,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new Ne(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Je(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new be;if(St(W,1,X.X),St(W,2,X.Y),St(W,3,X.height),St(W,4,X.width),St(W,5,X.rotation),St(W,6,X.W),X=kt(W,ge),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),St(V=new se,1,W.x),St(V,2,W.y),St(V,3,W.z),W.visibility&&St(V,4,W.visibility),W=kt(V,ce),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],St(V=new te,2,W.score),W.index&&St(V,1,W.index),W.label&&St(V,3,W.label),W.displayName&&St(V,4,W.displayName),W=kt(V,ee),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.C,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",je),x("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Holistic",_e),x("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),x("FACEMESH_LIPS",xe),x("FACEMESH_LEFT_EYE",Re),x("FACEMESH_LEFT_EYEBROW",Ie),x("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),x("FACEMESH_RIGHT_EYE",we),x("FACEMESH_RIGHT_EYEBROW",Se),x("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),x("FACEMESH_FACE_OVAL",Ye),x("FACEMESH_CONTOURS",Fe),x("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),x("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),x("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),x("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),x("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),x("VERSION","0.5.1635989137")}).call(gi);const Zi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.s=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",F=typeof TextEncoder<"u",T={},C=null;function L(t){var e;void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array;function U(t){return J&&null!=t&&t instanceof Uint8Array}function K(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&E(this,t)}function E(t,e){t.h=function(t,e){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return H(t);if(t.constructor===K)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||U(e)?e:"string"==typeof e?H(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=new Uint8Array(0)));if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}A.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,_.length?(n=_.pop(),e&&(n.v=e.v),t&&E(n,t),t=n):t=new A(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new Q}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var ft,mt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return Rt(t,e=void 0===e?wt:e)}function xt(t,e){if(null!=t){if(Array.isArray(t))t=Rt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=xt(t[n],e);t=r}else t=e(t);return t}}function Rt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=xt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(U(t))return L(t);if(t instanceof K){var e=t.L;return e=null==e||"string"==typeof e?e:J&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return U(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=ft),ft=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},f(Yt,St),mt){var Ft={};Object.defineProperties(Yt,(Ft[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Tt(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Ut(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Kt(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ct=Symbol();function Lt(t,e,n){return t[Ct]||(t[Ct]=function(t,r){return e(t,r,n)})}function Ht(t){var e=t[Ct];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ct]=e}return e}function Nt(t){var e=function(t){var e=t.aa;return e?Ht(e):(e=t.ka)?Lt(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Jt=Symbol();function Ut(t){var e=t[Jt];if(!e){var n=Et(t);e=function(t,e){return ee(t,e,n)},t[Jt]=e}return e}function Kt(t,e){var n=t[Jt];return n||(n=function(t,n){return Tt(t,n,e)},t[Jt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Ut(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function At(t,e,n,r,i,o){var a=Kt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function Et(t){return t[Bt]||kt(t,t[Bt]=[],jt,zt,Mt,At)}var Ot=Symbol();function Pt(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ht(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||kt(t,t[Ot]={},Pt,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(E(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Tt(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,Et(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?R():(l=t[o++],194>a||128!=(192&l)?(o--,R()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?R():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,R()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?R():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,R()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):R(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(f(ce,Yt),mt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function fe(t){ce.call(this,t,-1,pe)}function me(){return[1,se,de,he]}f(de,ce),f(fe,ce),fe.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}f(be,ce),f(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}f(Ge,ce);var We=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ve=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],xe=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Re=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],we=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Se=[].concat(l(We),l(Ve),l(xe),l(Re),l(Ie),l(we));function Ye(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Fe(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Te(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Ce(t,e){this.h=t,this.g=e,this.l=0}function Le(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Ye(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ye(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function He(t){this.g=t}var Ne=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function ke(t,e){return e+t}function Je(t,e){window[t]=e}function Ue(t){if(this.g=t,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=t&&t.locateFile||ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ke(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ne),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Je("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Je("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Be(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Be(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,f.g=0}}))}function Be(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function je(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ce(t.h,t.G),t.u[e]=r),i.return(Le(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=te(v.get(x),Ge,Xe);R={boundingBox:{xCenter:Zt(R,1),yCenter:Zt(R,2),height:Zt(R,3),width:Zt(R,4),rotation:Zt(R,5,0),rectId:Xt(R,6)},landmarks:vt(te(G.get(x),ye,Ze),be,1).map(Te),V:Fe(te(W.get(x),fe,me))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.u[d])||(m=new Ce(t.h,t.G),t.u[d]=m),g(Z,Le(m,f,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function ze(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=je(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ue({locateFile:t.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:n,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,Be(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ue.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ke(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,Be(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,ze(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ce(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new He(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),b.landmarks)for(Z=0;Z<b.landmarks.length;++Z){var V=!!(W=b.landmarks[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.ga),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Ue),x("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("FaceDetection",Me),x("FACEDETECTION_LIPS",We),x("FACEDETECTION_LEFT_EYE",Ve),x("FACEDETECTION_LEFT_EYEBROW",xe),x("FACEDETECTION_RIGHT_EYE",Re),x("FACEDETECTION_RIGHT_EYEBROW",Ie),x("FACEDETECTION_FACE_OVAL",we),x("FACEDETECTION_CONTOURS",Se),x("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("VERSION","0.4.1646425229")}).call(Zi);const vi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function F(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},C=null;function L(t,e){void 0===e&&(e=0),N(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function H(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=C[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function N(){if(!C){C={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===C[o]&&(C[o]=i)}}}}var k,J="function"==typeof Uint8Array.prototype.slice;function U(t,e,n){return e===n?k||(k=new Uint8Array(0)):J?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var K=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?H(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function z(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}B.prototype.reset=function(){this.g=this.l},B.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},B.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function A(){this.g=new Uint8Array(64),this.h=0}function E(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function P(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!P(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function Q(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function $(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=R(s,l),l.length=0);e=R(s,l)}return e}function q(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?q(t,B.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new A}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){E(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?K=0:(0,K=2147483648):isNaN(r)?(0,K=2147483647):34028234663852886e22<r?(0,K=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,K=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,K=(n<<31|e+127<<23|8388607&r)>>>0),n=K,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,U(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=ft):(mt(this),(r=this.i[t])?dt(r):this.i[t]=ft)}var ft=Object.freeze(dt([]));function mt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function pt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function bt(t,e){var n=void 0!==n&&n,r=pt(t,e,n);return null==r&&(r=ft),r===ft&&vt(t,e,r=dt([]),n),r}function gt(t){var e=bt(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=pt(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=pt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(mt(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=pt(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=bt(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&xt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=bt(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,xt(e))):(i.push(e),t.push(xt(e)))}function xt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&xt(r[i]);else r&&xt(r)}return t.h}function Rt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=U(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function wt(t){ht.call(this,t,-1,Yt)}function St(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=z(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(xt(this),st,L)},ht.prototype.toString=function(){return xt(this).toString()},f(wt,ht),wt.prototype.getRows=function(){return pt(this,1)},wt.prototype.getCols=function(){return pt(this,2)},wt.prototype.getPackedDataList=function(){return gt(this)},wt.prototype.getLayout=function(){return yt(this,4,0)};var Yt=[3];function Ft(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Tt(t){ht.call(this,t)}function Ct(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=$(e));break;case 34:vt(t,4,n=$(e));break;default:if(!It(t,e))return t}return t}function Lt(t){ht.call(this,t,-1,Ht)}f(Tt,ht),f(Lt,ht),Lt.prototype.addClassification=function(t,e){return Vt(this,t,Tt,e),this};var Ht=[1];function Nt(t){ht.call(this,t)}function kt(t,e){for(;P(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Jt(t){ht.call(this,t,-1,Kt)}function Ut(t){t:{var e=new Jt;for(t=new O(t);P(t);)if(10===t.i){Vt(e,Q(t,new Nt,kt),Nt,void 0)}else if(!It(e,t))break t}return e}f(Nt,ht),f(Jt,ht);var Kt=[1];function Bt(t){ht.call(this,t)}function jt(t){ht.call(this,t,-1,Mt)}function zt(t,e){for(;P(e);)switch(e.i){case 8:var n=z(e.g);vt(t,1,n);break;case 16:vt(t,2,n=z(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?q(n,B.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}f(Bt,ht),f(jt,ht),jt.prototype.getVertexType=function(){return yt(this,1,0)},jt.prototype.getPrimitiveType=function(){return yt(this,2,0)},jt.prototype.getVertexBufferList=function(){return gt(this)},jt.prototype.getIndexBufferList=function(){return bt(this,4)};var Mt=[3,4];function At(t){ht.call(this,t)}function Et(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ot(t){return Xt(t,Tt).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=pt(t,3)?yt(t,3,""):void 0,displayName:null!=pt(t,4)?yt(t,4,""):void 0}}))}function Pt(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=pt(t,4)?Zt(t,4):void 0}}function _t(t,e){this.h=t,this.g=e,this.l=0}function Qt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Et(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Et(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function Dt(t){this.g=t}f(At,ht),At.prototype.getMesh=function(){return Gt(this,jt,1)},At.prototype.getPoseTransformMatrix=function(){return Gt(this,wt,2)};var $t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function qt(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||qt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Ft(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,f=this;return X(t,(function(t){switch(t.g){case 1:return e=f,f.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(f,f.j),g(t,function(){return Ft(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate($t),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:f.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:f.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Ft(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Ft(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:f.h=t.h,f.l=new OffscreenCanvas(1,1),f.h.canvas=f.l,o=f.h.GL.createContext(f.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),f.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(f.l=document.createElement("canvas"),!(h=f.l.getContext("webgl2",{}))&&!(h=f.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();f.D=h,f.h.canvas=f.l,f.h.createContext(f.l,!0,!0,{});case 4:f.i=new f.h.SolutionWasm,f.R=!1,t.g=0}}))}))}function re(t,e){return Ft(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Ft(t,(function t(){var r,i,o,l,s,c,u,d,h,f,m,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Ft(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new _t(i.h,i.D),i.s[e]=r),t.return(Qt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=v.get(x);t:{var I=new Bt;for(R=new O(R);P(R);)switch(R.i){case 13:var w=D(R);vt(I,1,w);break;case 21:vt(I,2,w=D(R));break;case 29:vt(I,3,w=D(R));break;case 37:vt(I,4,w=D(R));break;case 45:vt(I,5,w=D(R));break;case 48:vt(I,6,w=z(R.g));break;default:if(!It(I,R))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},R=Xt(Ut(G.get(x)),Nt).map(Pt);var S=W.get(x);t:for(w=new Lt,S=new O(S);P(S);)if(10===S.i)w.addClassification(Q(S,new Tt,Ct));else if(!It(w,S))break t;I={T:I,O:R,M:Ot(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===f){t.g=3;break}if("float_list"===h.type){r[d]=f,t.g=7;break}if("proto"===h.type){r[d]=f,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=Z.s[d])||(m=new _t(Z.h,Z.D),Z.s[d]=m),g(t,Qt(m,f,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new At;for(t=new O(t);P(t);)switch(t.i){case 10:var n=Q(t,new jt,zt);Wt(e,1,n);break;case 18:Wt(e,2,n=Q(t,new wt,St));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Ft(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Ft(this,(function n(){var r,i,o,l,s,c,u,d,h,f=this;return X(n,(function(n){switch(n.g){case 1:return f.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,f.C,2)):n.return();case 2:return g(n,f.initialize(),3);case 3:for(i=new f.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=f.g.inputs[s]){t:{var m=f,p=t[s];switch(c.type){case"video":var b=m.m[c.stream];if(b||(b=new _t(m.h,m.D),m.m[c.stream]=b),0===(m=b).l&&(m.l=m.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:m.l,width:y,height:b},(y=m.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),m.h.bindTexture2d(m.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),m.h.bindTexture2d(0),m=b;break t;case"detections":for((b=m.m[c.stream])||(b=new Dt(m.h),m.m[c.stream]=b),(m=b).data||(m.data=new m.g.DetectionListData),m.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=m.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Bt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,pt(W,1)),it(V,2,pt(W,2)),it(V,3,pt(W,3)),it(V,4,pt(W,4)),it(V,5,pt(W,5));var x=pt(W,6);if(null!=x&&null!=x){E(V.g,48);var R=V.g,I=x;x=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,x&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),x=K=w,w=I;0<w||127<x;)R.push(127&x|128),x=(x>>>7|w<<25)>>>0,w>>>=7;R.push(x)}if(Rt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=m.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new Nt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(R=W=new et,1,pt(V,1)),it(R,2,pt(V,2)),it(R,3,pt(V,3)),it(R,4,pt(V,4)),it(R,5,pt(V,5)),Rt(V,R),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=m.data).addClassification,X=b,W=y.M[Z],vt(V=new Tt,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),R=W=new et,null!=(w=pt(V,1))&&null!=w)if(E(R.g,8),x=R.g,0<=w)E(x,w);else{for(I=0;9>I;I++)x.push(127&w|128),w>>=7;x.push(1)}it(R,2,pt(V,2)),null!=(x=pt(V,3))&&(x=F(x),E(R.g,26),E(R.g,x.length),nt(R,R.g.end()),nt(R,x)),null!=(x=pt(V,4))&&(x=F(x),E(R.g,34),E(R.g,x.length),nt(R,R.g.end()),nt(R,x)),Rt(V,R),W=rt(W),G.call(v,X,W)}}m=m.data;break t;default:m={}}}switch(u=m,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return f.i.send(i),g(n,f.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",ee),x("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Ut(t),Nt).map(Pt)}))}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},se=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],fe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],me=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(fe));function pe(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=pe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Ft(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},x("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),x("FaceMesh",pe),x("FACEMESH_LIPS",se),x("FACEMESH_LEFT_EYE",ce),x("FACEMESH_LEFT_EYEBROW",ue),x("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),x("FACEMESH_RIGHT_EYE",de),x("FACEMESH_RIGHT_EYEBROW",he),x("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),x("FACEMESH_FACE_OVAL",fe),x("FACEMESH_CONTOURS",me),x("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),x("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),x("VERSION","0.4.1633559619")}).call(vi);const Gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){throw t}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,w()}function _(t){t.g>t.i&&(t.j=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,_(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,_(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,_(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,_(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,_(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(_(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,_(t),(e<<0|n<<8|r<<16|i<<24)>>>0}E.prototype.reset=function(){this.g=this.l},E.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var $=[];function q(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,$.length?(n=$.pop(),e&&(n.v=e.v),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,_(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?it(t):(e=Q(t.g),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=Q(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}q.prototype.length=function(){return this.h},q.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new q}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function ft(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function mt(t,e){if(null!=t)return Array.isArray(t)||ft(t)?pt(t,e):e(t)}function pt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=mt(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=mt(t[n],e);return i}function bt(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(B&&null!=t&&t instanceof Uint8Array)return k(t);if(t instanceof j){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:B&&e instanceof Uint8Array?k(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?pt(t,bt):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&ft(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function xt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function Rt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function St(t,e){return null==(t=vt(t,e))?0:t}function Yt(t,e){return null==(t=vt(t,e))?"":t}function Ft(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return pt(this.u,bt)},gt.prototype.toString=function(){return this.u.toString()};var Tt=Symbol();function Ct(t,e,n){return t[Tt]||(t[Tt]=function(t,r){return e(t,r,n)})}function Lt(t){var e=t[Tt];if(!e){var n=t[kt]||(t[kt]=t());e=function(t,e){return Jt(t,e,n)},t[Tt]=e}return e}function Ht(t){var e=function(t){var e=t.da;if(e)return Lt(e);if(e=t.ia){var n=t.Y;return delete t.Y,Ct(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Nt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Lt(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Lt(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Ct(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Ct(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var kt=Symbol();function Jt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=Nt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Ht(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Ut(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Kt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Jt(new e,t,n[kt]||(n[kt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Bt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=A)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function jt(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,xt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function zt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=E.prototype.m;var r=Q(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function At(t,e,n){return 5===t.h&&(xt(e,n,t=t.g.m(),0),!0)}function Et(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Vt(e,n,Q(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(xt(e,n,t=Q(t.g),0),!0)}function _t(t,e,n){return 0===t.h&&(xt(e,n,t=!!Q(t.g),!1),!0)}function Qt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function $t(t,e,n,r,i){return 2===t.h&&(wt(e,n,t=ot(t,new r,i),r,void 0),!0)}function qt(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Ot,2:zt,3:Qt,4:Qt}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}Bt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,L(r)),null!=(r=vt(t,4))&&ct(e,4,L(r)),Ft(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[$t,te,ee]}}f(te,gt),f(re,gt),re.prototype.addClassification=function(t,e){return wt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:zt,2:zt,3:zt,4:zt,5:zt}}function se(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5),Ft(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[$t,ae,le]}}f(ae,gt),f(ce,gt);var de=[1];function he(t){gt.call(this,t)}function fe(){return{1:zt,2:zt,3:zt,4:zt,5:zt,6:Et}}function me(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Ft(t,e)}function pe(t){gt.call(this,t,-1,Ze)}function be(){return{1:qt,2:qt,3:Mt,4:[Dt,ge,ye],5:Ot,6:Ot,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:zt,2:zt,3:zt}}f(he,gt),f(pe,gt),f(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:At,2:At,3:At}}function Xe(t){gt.call(this,t)}function We(){return{1:At,2:At,3:At}}function Ve(t){gt.call(this,t)}function xe(){return{1:Pt,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:_t}}function Re(t){gt.call(this,t,-1,we)}function Ie(){return{1:Pt,2:[$t,Ve,xe],3:At,4:Mt,5:Mt,6:Mt}}f(ve,gt),f(Xe,gt),f(Ve,gt),f(Re,gt);var we=[2,4,5,6];function Se(t){gt.call(this,t,-1,Fe)}function Ye(){return{1:Pt,2:[$t,Re,Ie],3:[Dt,pe,be],4:jt,5:Mt,6:Mt}}f(Se,gt);var Fe=[2,5,6];function Te(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ce(t){return It(t,te,1).map((function(t){return{index:St(t,1),$:Wt(t,2),label:null!=vt(t,3)?Yt(t,3):void 0,displayName:null!=vt(t,4)?Yt(t,4):void 0}}))}function Le(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function He(t,e){this.h=t,this.g=e,this.l=0}function Ne(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Te(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Te(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function ke(t){this.g=t}var Je=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ue(t,e){return e+t}function Ke(t,e){window[t]=e}function Be(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Ue,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function je(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Je),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return Ke("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ke("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,f.g=0}}))}function ze(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new He(t.h,t.F),t.s[e]=r),i.return(Ne(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Kt(v.get(x),he,fe);R={U:{aa:Wt(R,1),ba:Wt(R,2),height:Wt(R,3),width:Wt(R,4),rotation:Wt(R,5,0),Z:St(R,6)},P:It(Kt(G.get(x),ce,ue),ae,1).map(Le),N:Ce(Kt(W.get(x),re,ie))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new He(t.h,t.F),t.s[d]=m),g(Z,Ne(m,f,t.H),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ee(t){var e=St(t,1),n=Rt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=Rt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Oe(t){var e=Kt(t,Se,Ye);t=[],e=It(e,Re,2);for(var n=0;n<e.length;n++)t.push({id:St(e[n],1),keypoints:It(e[n],Ve,2).map(Ee),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Pe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=Be.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,je(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.D,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new He(h.h,h.F),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new ke(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Ut(W,me),v.call(Z,G,X),b.P)for(Z=0;Z<b.P.length;++Z){var V=!!(W=b.P[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Ut(V,se),G.call(v,X,W)}if(b.N)for(Z=0;Z<b.N.length;++Z)G=(v=p.data).addClassification,X=y,W=b.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Ut(V,ne),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.D,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",Be),x("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var _e={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function Qe(t){var e=this;t=t||{},this.g=new Be({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Pe(n)},_e),r=function(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}(n),i="object_detection_3d.tflite",g(a,ze(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},_e),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},_e),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Objectron",Qe),x("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),x("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),x("VERSION","0.4.1636596145")}).call(Gi);const Xi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function f(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function x(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function R(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){R(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){R(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,F,T=typeof TextDecoder<"u",C=typeof TextEncoder<"u";function L(t){if(C)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},N=null;function k(t){var e;void 0===e&&(e=0),U(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function J(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}U();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function U(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var K,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?k(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?K||(K=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var A=0;function E(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return J(t);if(t.constructor===j){if(null==t.g)var e=K||(K=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?J(n):null,e=new e(t=t.g=n)}return e}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){t.g>t.i&&(t.j=!0,R(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,P(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,P(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,P(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,P(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,P(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(P(t),r))))))}E.prototype.reset=function(){this.g=this.l};var Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new E(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,P(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?nt(t):(e=_(t.g),(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,R(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,R(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){q(t.g,8*e+2),q(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function ft(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?k(t):t;default:return t}}function bt(t,e){if(null!=t)return Array.isArray(t)||mt(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=bt(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=bt(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&mt(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?Rt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&Rt(t,e,i=i.slice(),r),i}function xt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function Rt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&ft(r[a].g);o&&(ft(r),Object.freeze(r)),t.i[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,St(n))):(o.push(n),t.push(St(n)))}function St(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&St(n[r]);else n&&St(n)}return t.g}function Yt(t,e){return null==(t=Wt(t,e))?0:t}function Ft(t,e){return null==(t=Wt(t,e))?"":t}function Tt(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Ct(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Lt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ct(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Ht(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(it.length){var r=it.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function kt(t,e,n){if(null!=(e=Wt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?A=0:(0,A=2147483648):isNaN(r)?(0,A=2147483647):34028234663852886e22<r?(0,A=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,A=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,A=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=A)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Jt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,Rt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Ut(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,w(),t=void 0),Rt(e,n,t),!0}function Kt(t,e,n){return 0===t.h&&(Rt(e,n,_(t.g)),!0)}function Bt(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,T)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return Rt(e,n,r),!0}function jt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=_(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,wt(e,n,o,r,void 0),!0}function zt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}kt(e,t,2),null!=(r=Wt(t,3))&<(e,3,L(r)),null!=(r=Wt(t,4))&<(e,4,L(r)),Tt(t,e)}function At(t,e){return Lt(t,e,Zt||(Zt={1:Kt,2:Jt,3:Bt,4:Bt}))}function Et(t){yt.call(this,t,-1,Qt)}function Ot(t,e){return Lt(t,e,vt||(vt={1:[jt,zt,At]}))}yt.prototype.toJSON=function(){return gt(St(this),pt)},yt.prototype.toString=function(){return St(this).toString()},f(zt,yt),f(Et,yt),Et.prototype.addClassification=function(t,e){return wt(this,1,t,zt,e),this};var Pt,_t,Qt=[1];function Dt(t){yt.call(this,t)}function $t(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5),Tt(t,e)}function qt(t,e){return Lt(t,e,Pt||(Pt={1:Jt,2:Jt,3:Jt,4:Jt,5:Jt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Lt(t,e,_t||(_t={1:[jt,Dt,qt]}))}f(Dt,yt),f(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=A=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Tt(t,e)}function ae(t,e){return Lt(t,e,ne||(ne={1:Jt,2:Jt,3:Jt,4:Jt,5:Jt,6:Ut}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,zt,1).map((function(t){return{index:Yt(t,1),X:xt(t,2),label:null!=Wt(t,3)?Ft(t,3):void 0,displayName:null!=Wt(t,4)?Ft(t,4):void 0}}))}function ce(t){return{x:xt(t,1),y:xt(t,2),z:xt(t,3),visibility:null!=Wt(t,4)?xt(t,4):void 0}}function ue(t){return It(Nt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),e(t.i)})))}function fe(t){this.g=t}f(ie,yt);var me=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function pe(t,e){return e+t}function be(t,e){window[t]=e}function ge(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=t&&t.locateFile||pe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(f){switch(f.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(f,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(me),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):f.return();case 2:if(n=f.h,"object"==typeof window)return be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(f,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(f,createMediapipeSolutionsWasm(Module),6);case 6:i.h=f.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),f.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),f.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,f.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,f,m,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(f=e[h.stream],"detection_list"===h.type){if(f){for(var v=f.getRectList(),G=f.getLandmarksList(),W=f.getClassificationsList(),V=[],x=0;x<v.size();++x){var R=Nt(v.get(x),ie,ae);R={T:{Y:xt(R,1),Z:xt(R,2),height:xt(R,3),width:xt(R,4),rotation:xt(R,5,0),W:Yt(R,6)},O:ue(G.get(x)),M:se(Nt(W.get(x),Et,Ot))},V.push(R)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(f){for(v=Array(f.size()),G=0;G<f.size();G++)v[G]=f.get(G);f.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===f){Z.g=3;break}if("float_list"===h.type){r[d]=f,Z.g=7;break}if("proto"===h.type){r[d]=f,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(m=t.s[d])||(m=new de(t.h,t.D),t.s[d]=m),g(Z,he(m,f,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:Xe(t.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.return(!0))}))}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(f){switch(f.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(f,h.C,2)):f.return();case 2:return g(f,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var m=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new de(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&m instanceof HTMLVideoElement)var b=m.videoWidth,y=m.videoHeight;else typeof HTMLImageElement<"u"&&m instanceof HTMLImageElement?(b=m.naturalWidth,y=m.naturalHeight):(b=m.width,y=m.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,m),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new fe(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(m.length),y=0;y<m.length;++y){b=m[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new ie;if(Rt(W,1,X.Y),Rt(W,2,X.Z),Rt(W,3,X.height),Rt(W,4,X.width),Rt(W,5,X.rotation),Rt(W,6,X.W),X=Ht(W,oe),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Rt(V=new Dt,1,W.x),Rt(V,2,W.y),Rt(V,3,W.z),W.visibility&&Rt(V,4,W.visibility),W=Ht(V,$t),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],Rt(V=new zt,2,W.X),W.index&&Rt(V,1,W.index),W.label&&Rt(V,3,W.label),W.displayName&&Rt(V,4,W.displayName),W=Ht(V,Mt),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(f,h.C,4);case 4:r.delete(),f.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},x("Solution",ge),x("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},x("Pose",We),x("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),x("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),x("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),x("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),x("VERSION","0.5.1635988162")}).call(Xi);const tr=class{constructor(){Wt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return Zi.VERSION;case"face_mesh":return vi.VERSION;case"hands":return yi.VERSION;case"holistic":return gi.VERSION;case"objectron":return Gi.VERSION;case"selfie_segmentation":return bi.VERSION;case"pose":return Xi.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new vi.FaceMesh({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new Zi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new yi.Hands({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new gi.Holistic({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new Gi.Objectron({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new bi.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Xi.Pose({locateFile:(t,e)=>(r.assetsUri||tr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let _i=tr;Wt(_i,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const or=new WeakMap,yr=new WeakMap,er=new WeakMap,Wi=Symbol("anyProducer"),qo=Promise.resolve(),Vi=Symbol("listenerAdded"),Ri=Symbol("listenerRemoved");let xi=!1,Qi=!1;function Ir(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function qr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Sr(t,e){const n=yr.get(t);if(n.has(e))return n.get(e)}function Ur(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Wi,r=er.get(t);if(r.has(n))return r.get(n)}function C2(t,e,n){const r=er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Wi)){const t=Promise.all([e,n]);for(const e of r.get(Wi))e.enqueue(t)}}function ts(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=Ur(t,n);e||(e=new Set,er.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=Ur(t,n);e&&(e.delete(o),0===e.size&&er.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function es(t){if(void 0===t)return ns;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ns.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Lr=t=>t===Vi||t===Ri;function ti(t,e,n){if(Lr(e))try{xi=!0,t.emit(e,n)}finally{xi=!1}}class ur{static mixin(t,e){return e=es(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new ur}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return Qi;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||Qi}static set isDebugEnabled(t){Qi=t}constructor(t={}){var e;or.set(this,new Set),yr.set(this,new Map),er.set(this,new Map),er.get(this).set(Wi,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(ur.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t){Ir(n);let t=Sr(this,n);t||(t=new Set,yr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),Lr(n)||ti(this,Vi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t){Ir(n);const t=Sr(this,n);t&&(t.delete(e),0===t.size&&yr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),Lr(n)||ti(this,Ri,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Ir(e);return ts(this,t)}async emit(t,e){var n;if(Ir(t),Lr(t)&&!xi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),C2(this,t,e);const r=null!=(n=Sr(this,t))?n:new Set,i=or.get(this),o=[...r],a=Lr(t)?[]:[...i];await qo,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(Ir(t),Lr(t)&&!xi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=Sr(this,t))?n:new Set,i=or.get(this),o=[...r],a=[...i];await qo;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return qr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(t),ti(this,Vi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return ts(this)}offAny(t){qr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ti(this,Ri,{listener:t}),or.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=Sr(this,e);t&&t.clear();const n=Ur(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{or.get(this).clear();for(const[t,e]of yr.get(this).entries())e.clear(),yr.get(this).delete(t);for(const[t,e]of er.get(this).entries()){for(const t of e)t.finish();e.clear(),er.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&Ir(s),l+=or.get(this).size;for(const t of yr.get(this).values())l+=t.size;for(const t of er.get(this).values())l+=t.size}else l+=or.get(this).size+(null!=(n=null==(e=Sr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=Ur(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=Ur(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=es(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ns=Object.getOwnPropertyNames(ur.prototype).filter((t=>"constructor"!==t));function bo(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}Object.defineProperty(ur,"listenerAdded",{value:Vi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(ur,"listenerRemoved",{value:Ri,writable:!1,enumerable:!0,configurable:!1});const Cr=bo("globals",{});var Dn=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Dn||{});function Vs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let H2=0;function Ii(t,e,n,r,i){const o=H2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Vs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function zr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Vs(t))))}const Si=bo("workerized",{});function yo(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function N2(){if(yo())zr({type:Dn.GLOBALS_SYNC},Cr);else{const t=[];for(const e in Si){const{worker:n,resolvers:r}=Si[e].workerContext;n&&t.push(Ii(n,Dn.GLOBALS_SYNC,"",[Cr],r))}await Promise.all(t)}}function Br(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Br(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Br(t[n],e[n])):e[n]=t[n]}async function J2(t,e,n){const r=new e;if(r.addEventListener("message",(async({data:t})=>{var e,r,i,o,a,l,s;if(t.type===Dn.GLOBALS_SYNC)t.id?(null==(r=n.get(null!=(e=t.id)?e:-1))||r(t.result),n.delete(null!=(i=t.id)?i:-1)):(Br(null!=(o=t.result)?o:{},Cr),await N2());else null==(l=n.get(null!=(a=t.id)?a:-1))||l(t.result),n.delete(null!=(s=t.id)?s:-1)})),!await Ii(r,Dn.INIT,"",[t.workerId,Cr],n))throw"Failed to instantiate workerized class";return r}let E2=0;async function k2(t,e,n){const r={},i=E2++;return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>Ii(e,Dn.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const o=await Ii(e,Dn.TERMINATE,"",t,n);return delete Si[i],e.terminate(),r.workerContext.worker=void 0,o},r.workerContext={id:i,worker:e,resolvers:n},Si[i]=r,r}async function U2(t,e){const n=new Map;return k2(t,await J2(t,e,n),n)}async function B2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;zr(t,await e.instance[n](...null!=r?r:[]))}const Rs=bo("registeredWorkers",{});function A2(t,e){e.workerId=t,yo()&&(Rs[e.workerId]=e)}function M2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Rs[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Br(r,Cr),zr(t,void 0!==typeof e.instance)}async function K2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),zr(t,r)}function j2(t){if(!t.args)throw"Missing globals while syncing";Br(t.args[0],Cr),zr(t,{})}function z2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Dn.INIT:M2(n,t);break;case Dn.FORWARD:B2(n,t);break;case Dn.TERMINATE:K2(n,t);break;case Dn.GLOBALS_SYNC:j2(n)}}}yo()&&z2();class rs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}var O2=Object.defineProperty,P2=(t,e,n)=>e in t?O2(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,_2=(t,e,n)=>(P2(t,"symbol"!=typeof e?e+"":e,n),n);const Q2="hlg.tokbox.com/prod/logging/vcp_webrtc",D2="https://",$2=1e4;let ei;const q2=new Uint8Array(16);function t1(){if(!ei&&(ei=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!ei))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ei(q2)}const Bn=[];for(let t=0;t<256;++t)Bn.push((t+256).toString(16).slice(1));function e1(t,e=0){return(Bn[t[e+0]]+Bn[t[e+1]]+Bn[t[e+2]]+Bn[t[e+3]]+"-"+Bn[t[e+4]]+Bn[t[e+5]]+"-"+Bn[t[e+6]]+Bn[t[e+7]]+"-"+Bn[t[e+8]]+Bn[t[e+9]]+"-"+Bn[t[e+10]]+Bn[t[e+11]]+Bn[t[e+12]]+Bn[t[e+13]]+Bn[t[e+14]]+Bn[t[e+15]]).toLowerCase()}const n1=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),is={randomUUID:n1};function r1(t,e,n){if(is.randomUUID&&!e&&!t)return is.randomUUID();const r=(t=t||{}).random||(t.rng||t1)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return e1(r)}function go(t,e){return globalThis[t]||(globalThis[t]=e),globalThis[t]}const cr=go("globals",{});var Zr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Zr||{});function xs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let i1=0;function o1(t,e,n,r,i){const o=i1++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>xs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function Or(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>xs(t))))}const os=go("workerized",{});function Is(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function s1(){if(Is())Or({type:Zr.GLOBALS_SYNC},cr);else{const t=[];for(const e in os){const{worker:n,resolvers:r}=os[e].workerContext;n&&t.push(o1(n,Zr.GLOBALS_SYNC,"",[cr],r))}await Promise.all(t)}}function Ti(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ti(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ti(t[n],e[n])):e[n]=t[n]}async function l1(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Or(t,await e.instance[n](...null!=r?r:[]))}const c1=go("registeredWorkers",{});function u1(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=c1[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ti(r,cr),Or(t,void 0!==typeof e.instance)}async function a1(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Or(t,r)}function d1(t){if(!t.args)throw"Missing globals while syncing";Ti(t.args[0],cr),Or(t,{})}function h1(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Zr.INIT:u1(n,t);break;case Zr.FORWARD:l1(n,t);break;case Zr.TERMINATE:a1(n,t);break;case Zr.GLOBALS_SYNC:d1(n)}}}function f1(t,e){return cr[t]||(cr[t]=e),[()=>cr[t],async e=>{cr[t]=e,await s1()}]}function m1(t,e){return f1(t,e)}Is()&&h1();const[p1,s3]=m1("metadata");function Di(){return p1()}class b1{constructor(t){_2(this,"uuid",r1()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=Di())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),$2);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=Di().proxyUrl)?t:D2;return e+=("/"===e.at(-1)?"":"/")+Q2,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=Di();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const y1="4.3.6";async function Ss(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}var Ts=(t=>(t.PUSH="PUSH",t.POP="POP",t))(Ts||{});class g1{constructor(t){Wt(this,"context"),Wt(this,"extension"),Wt(this,"queries",[]),Wt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await Ss(200)}}}
|
|
2
2
|
/* @license twgl.js 5.3.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
3
3
|
Available via the MIT license.
|
|
4
|
-
see: http://github.com/greggman/twgl.js for details */const Zo=5120,Ar=5121,vo=5122,Go=5123,Xo=5124,Wo=5125,Vo=5126,Z1=32819,v1=32820,G1=33635,X1=5131,W1=33640,V1=35899,R1=35902,x1=36269,I1=34042,ws={};{const t=ws;t[Zo]=Int8Array,t[Ar]=Uint8Array,t[vo]=Int16Array,t[Go]=Uint16Array,t[Xo]=Int32Array,t[Wo]=Uint32Array,t[Vo]=Float32Array,t[Z1]=Uint16Array,t[v1]=Uint16Array,t[G1]=Uint16Array,t[X1]=Uint16Array,t[W1]=Uint32Array,t[V1]=Uint32Array,t[R1]=Uint32Array,t[x1]=Uint32Array,t[I1]=Uint32Array}function Ro(t){if(t instanceof Int8Array)return Zo;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Ar;if(t instanceof Int16Array)return vo;if(t instanceof Uint16Array)return Go;if(t instanceof Int32Array)return Xo;if(t instanceof Uint32Array)return Wo;if(t instanceof Float32Array)return Vo;throw new Error("unsupported typed array type")}function Fs(t){if(t===Int8Array)return Zo;if(t===Uint8Array||t===Uint8ClampedArray)return Ar;if(t===Int16Array)return vo;if(t===Uint16Array)return Go;if(t===Int32Array)return Xo;if(t===Uint32Array)return Wo;if(t===Float32Array)return Vo;throw new Error("unsupported typed array type")}function Ys(t){const e=ws[t];if(!e)throw new Error("unknown gl type");return e}const wi=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function Ls(...t){console.error(...t)}const ss=new Map;function Ni(t,e){if(!t||"object"!=typeof t)return!1;let n=ss.get(e);n||(n=new WeakMap,ss.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function S1(t,e){return typeof WebGLBuffer<"u"&&Ni(e,"WebGLBuffer")}function T1(t,e){return typeof WebGLRenderbuffer<"u"&&Ni(e,"WebGLRenderbuffer")}function xo(t,e){return typeof WebGLTexture<"u"&&Ni(e,"WebGLTexture")}function w1(t,e){return typeof WebGLSampler<"u"&&Ni(e,"WebGLSampler")}const Cs=35044,vr=34962,F1=34963,Y1=34660,L1=5120,C1=5121,H1=5122,N1=5123,J1=5124,E1=5125,Hs=5126,Ns={attribPrefix:""};function k1(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||Cs)}function Js(t,e,n,r){if(S1(t,e))return e;n=n||vr;const i=t.createBuffer();return k1(t,n,i,e,r),i}function Es(t){return"indices"===t}function U1(t){return t===Int8Array||t===Uint8Array}function B1(t){return t.length?t:t.data}const A1=/coord|texture/i,M1=/color|colour/i;function K1(t,e){let n;if(n=A1.test(t)?2:M1.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function j1(t,e,n){return t.numComponents||t.size||K1(e,n||B1(t).length)}function ks(t,e){if(wi(t))return t;if(wi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?Io(t.type):void 0;return n||(n=Es(e)?Uint16Array:Float32Array),new n(t.data)}function z1(t){return"number"==typeof t?t:t?Fs(t):Hs}function Io(t){return"number"==typeof t?Ys(t):t||Float32Array}function O1(t,e){return{buffer:e.buffer,numValues:24,type:z1(e.type),arrayType:Io(e.type)}}function P1(t,e){const n=e.data||e,r=Io(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(vr,o),t.bufferData(vr,i,e.drawType||Cs),{buffer:o,numValues:n,type:Fs(r),arrayType:r}}function _1(t,e,n){const r=ks(e,n);return{arrayType:r.constructor,buffer:Js(t,r,void 0,e.drawType),type:Ro(r),numValues:0}}function Q1(t,e){const n={};return Object.keys(e).forEach((function(r){if(!Es(r)){const i=e[r],o=i.attrib||i.name||i.attribName||Ns.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!wi(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?O1:"number"==typeof i||"number"==typeof i.data?P1:_1;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:U1(c),d=j1(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(vr,null),n}function D1(t,e){return e===L1||e===C1?1:e===H1||e===N1?2:e===J1||e===E1||e===Hs?4:0}const $i=["position","positions","a_position"];function $1(t,e){let n,r;for(r=0;r<$i.length&&(n=$i[r],!(n in e)&&(n=Ns.attribPrefix+n,!(n in e)));++r);r===$i.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(vr,i.buffer);const o=t.getBufferParameter(vr,Y1);t.bindBuffer(vr,null);const a=o/D1(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function q1(t,e,n){const r=Q1(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=ks(o,"indices");i.indices=Js(t,e,F1),i.numElements=e.length,i.elementType=Ro(e)}else i.numElements||(i.numElements=$1(t,i.attribs));return i}function Pr(t){return!!t.texStorage2D}const Us=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Mr=wi,Bs=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),ls=6406,qn=6407,Vn=6408,cs=6409,us=6410,Nr=6402,as=34041,Fi=33071,tc=9728,ec=9729,hr=3553,ar=34067,Xr=32879,Wr=35866,So=34069,nc=34070,rc=34071,ic=34072,oc=34073,sc=34074,ro=10241,io=10240,Yi=10242,Li=10243,ds=32882,lc=33082,cc=33083,uc=33084,ac=33085,To=3317,As=3314,Ms=32878,Ks=3316,js=3315,zs=32877,dc=37443,hc=37441,fc=37440,mc=33321,pc=36756,bc=33325,yc=33326,gc=33330,Zc=33329,vc=33338,Gc=33337,Xc=33340,Wc=33339,Vc=33323,Rc=36757,xc=33327,Ic=33328,Sc=33336,Tc=33335,wc=33332,Fc=33331,Yc=33334,Lc=33333,Cc=32849,Hc=35905,Nc=36194,Jc=36758,Ec=35898,kc=35901,Uc=34843,Bc=34837,Ac=36221,Mc=36239,Kc=36215,jc=36233,zc=36209,Oc=36227,Pc=32856,_c=35907,Qc=36759,Dc=32855,$c=32854,qc=32857,tu=34842,eu=34836,nu=36220,ru=36238,iu=36975,ou=36214,su=36232,lu=36226,cu=36208,uu=33189,au=33190,du=36012,hu=36013,fu=35056,sr=5120,Zn=5121,ni=5122,Tr=5123,ri=5124,pr=5125,jn=5126,hs=32819,fs=32820,ms=33635,Qn=5131,Jr=36193,qi=33640,mu=35899,pu=35902,bu=36269,yu=34042,ii=33319,wr=33320,oi=6403,Fr=36244,Yr=36248,br=36249;let to;function Ji(t){if(!to){const t={};t[ls]={textureFormat:ls,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,Qn,Jr,jn]},t[cs]={textureFormat:cs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,Qn,Jr,jn]},t[us]={textureFormat:us,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Zn,Qn,Jr,jn]},t[qn]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Zn,Qn,Jr,jn,ms]},t[Vn]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Zn,Qn,Jr,jn,hs,fs]},t[Nr]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[pr,Tr]},t[mc]={textureFormat:oi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Zn]},t[pc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[sr]},t[bc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[jn,Qn]},t[yc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[gc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Zn]},t[Zc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[sr]},t[wc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Tr]},t[Fc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[ni]},t[Yc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},t[Lc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ri]},t[Vc]={textureFormat:ii,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Zn]},t[Rc]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[sr]},t[xc]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[jn,Qn]},t[Ic]={textureFormat:ii,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[jn]},t[Sc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Zn]},t[Tc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[sr]},t[vc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},t[Gc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ni]},t[Xc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[pr]},t[Wc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ri]},t[Cc]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[Hc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[Nc]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Zn,ms]},t[Jc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[sr]},t[Ec]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,Qn,mu]},t[kc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,Qn,pu]},t[Uc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[jn,Qn]},t[Bc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[jn]},t[Ac]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Zn]},t[Mc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[sr]},t[Kc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Tr]},t[jc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[ni]},t[zc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[pr]},t[Oc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ri]},t[Pc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[_c]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[Qc]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[sr]},t[Dc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Zn,fs,qi]},t[$c]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Zn,hs]},t[qc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[qi]},t[tu]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[jn,Qn]},t[eu]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[jn]},t[nu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Zn]},t[ru]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[sr]},t[iu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[qi]},t[ou]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},t[su]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ni]},t[lu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[ri]},t[cu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[pr]},t[uu]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,pr]},t[au]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},t[du]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[fu]={textureFormat:as,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yu]},t[hu]={textureFormat:as,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[bu]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),to=t}return to[t]}function gu(t,e){const n=Ji(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function _r(t){const e=Ji(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function ps(t){return 0==(t&t-1)}function Zu(t,e,n,r){if(!Pr(t))return ps(e)&&ps(n);const i=Ji(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function vu(t){const e=Ji(t);if(!e)throw"unknown internal format";return e.textureFilterable}function Gu(t,e,n){return Mr(e)?Ro(e):n||Zn}function si(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===ar?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Hr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(dc,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(hc,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(fc,e.flipY)}function Os(t){t.pixelStorei(To,4),Pr(t)&&(t.pixelStorei(As,0),t.pixelStorei(Ms,0),t.pixelStorei(Ks,0),t.pixelStorei(js,0),t.pixelStorei(zs,0))}function Xu(t,e,n,r){r.minMag&&(n.call(t,e,ro,r.minMag),n.call(t,e,io,r.minMag)),r.min&&n.call(t,e,ro,r.min),r.mag&&n.call(t,e,io,r.mag),r.wrap&&(n.call(t,e,Yi,r.wrap),n.call(t,e,Li,r.wrap),(e===Xr||w1(t,e))&&n.call(t,e,ds,r.wrap)),r.wrapR&&n.call(t,e,ds,r.wrapR),r.wrapS&&n.call(t,e,Yi,r.wrapS),r.wrapT&&n.call(t,e,Li,r.wrapT),r.minLod&&n.call(t,e,lc,r.minLod),r.maxLod&&n.call(t,e,cc,r.maxLod),r.baseLevel&&n.call(t,e,uc,r.baseLevel),r.maxLevel&&n.call(t,e,ac,r.maxLevel)}function Ps(t,e,n){const r=n.target||hr;t.bindTexture(r,e),Xu(t,r,t.texParameteri,n)}function Wu(t){return t=t||dr.textureColor,Mr(t)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function oo(t,e,n,r,i,o){n=n||dr.textureOptions,o=o||Vn;const a=n.target||hr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),Zu(t,r,i,o))t.generateMipmap(a);else{const e=vu(o)?ec:tc;t.texParameteri(a,ro,e),t.texParameteri(a,io,e),t.texParameteri(a,Yi,Fi),t.texParameteri(a,Li,Fi)}}function Kr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function so(t,e){return(e=e||{}).cubeFaceOrder||[So,nc,rc,ic,oc,sc]}function lo(t,e){const n=so(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function _s(t,e,n,r){const i=(r=r||dr.textureOptions).target||hr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Vn,c=_r(s),u=r.format||c.format,d=r.type||c.type;if(Hr(t,r),t.bindTexture(i,e),i===ar){const c=n.width,h=n.height;let f,m;if(c/6===h)f=h,m=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)f=c,m=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)f=c/3,m=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);f=c/2,m=[0,0,1,0,0,1,1,1,0,2,1,2]}const p=Bs();p?(p.canvas.width=f,p.canvas.height=f,a=f,l=f,lo(t,r).forEach((function(e){const r=m[2*e.ndx+0]*f,i=m[2*e.ndx+1]*f;p.drawImage(n,r,i,f,f,0,0,f,f),t.texImage2D(e.face,o,s,u,d,p.canvas)})),p.canvas.width=1,p.canvas.height=1):typeof createImageBitmap<"u"&&(a=f,l=f,lo(t,r).forEach((function(c){const h=m[2*c.ndx+0]*f,p=m[2*c.ndx+1]*f;t.texImage2D(c.face,o,s,f,f,0,u,d,null),createImageBitmap(n,h,p,f,f,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Hr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),Kr(r)&&oo(t,e,r,a,l,s)}))})))}else if(i===Xr||i===Wr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(To,1),t.pixelStorei(As,n.width),t.pixelStorei(Ms,0),t.pixelStorei(zs,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(Ks,a),t.pixelStorei(js,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}Os(t)}else t.texImage2D(i,o,s,u,d,n);Kr(r)&&oo(t,e,r,a,l,s),Ps(t,e,r)}function Qr(){}function Vu(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function Ru(t,e){return void 0!==e||Vu(t)?e:"anonymous"}function xu(t,e,n){let r;if(n=n||Qr,e=void 0!==e?e:dr.crossOrigin,e=Ru(t,e),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;Ls(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function Qs(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function wo(t,e,n){return Qs(t)?(setTimeout((function(){n(null,t)})),t):xu(t,e,n)}function Fo(t,e,n){const r=(n=n||dr.textureOptions).target||hr;if(t.bindTexture(r,e),!1===n.color)return;const i=Wu(n.color);if(r===ar)for(let e=0;e<6;++e)t.texImage2D(So+e,0,Vn,1,1,0,Vn,Zn,i);else r===Xr||r===Wr?t.texImage3D(r,0,Vn,1,1,1,0,Vn,Zn,i):t.texImage2D(r,0,Vn,1,1,0,Vn,Zn,i)}function Iu(t,e,n,r){return r=r||Qr,n=n||dr.textureOptions,Fo(t,e,n),wo((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(_s(t,e,o,n),r(null,e,o))}))}function Su(t,e,n,r){r=r||Qr;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Vn,l=_r(a),s=n.format||l.format,c=n.type||Zn,u=n.target||hr;if(u!==ar)throw"target must be TEXTURE_CUBE_MAP";Fo(t,e,n),n=Object.assign({},n);let d=6;const h=[],f=so(t,n);let m;m=i.map((function(i,l){return wo(i,n.crossOrigin,function(i){return function(l,f){--d,l?h.push(l):f.width!==f.height?h.push("cubemap face img is not a square: "+f.src):(Hr(t,n),t.bindTexture(u,e),5===d?so().forEach((function(e){t.texImage2D(e,o,a,s,c,f)})):t.texImage2D(i,o,a,s,c,f),Kr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,m)}}(f[l]))}))}function Tu(t,e,n,r){r=r||Qr;const i=n.src,o=n.internalFormat||n.format||Vn,a=_r(o),l=n.format||a.format,s=n.type||Zn,c=n.target||Wr;if(c!==Xr&&c!==Wr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Fo(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const f=n.level||0;let m=n.width,p=n.height;const b=i.length;let g=!0;h=i.map((function(i,a){return wo(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Hr(t,n),t.bindTexture(c,e),g){g=!1,m=n.width||y.width,p=n.height||y.height,t.texImage3D(c,f,o,m,p,b,0,l,s,null);for(let e=0;e<b;++e)t.texSubImage3D(c,f,0,0,e,m,p,1,l,s,y)}else{let e,n=y;(y.width!==m||y.height!==p)&&(e=Bs(),n=e.canvas,e.canvas.width=m,e.canvas.height=p,e.drawImage(y,0,0,m,p)),t.texSubImage3D(c,f,0,0,i,m,p,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}Kr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function wu(t,e,n,r){const i=(r=r||dr.textureOptions).target||hr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Vn,u=_r(c),d=r.format||u.format,h=r.type||Gu(t,n,u.type);if(Mr(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=Ys(h);n=new t(n)}const f=gu(c,h),m=n.byteLength/f;if(m%1)throw"length wrong size for format: "+Us(t,d);let p;if(i===Xr||i===Wr)if(o||a||l)!o||a&&l?!a||o&&l?(p=si(t,i,o,a,m/l),o=p.width,a=p.height):(p=si(t,i,o,l,m/a),o=p.width,l=p.height):(p=si(t,i,a,l,m/o),a=p.width,l=p.height);else{const t=Math.cbrt(m);if(t%1!=0)throw"can't guess cube size of array of numElements: "+m;o=t,a=t,l=t}else p=si(t,i,o,a,m),o=p.width,a=p.height;if(Os(t),t.pixelStorei(To,r.unpackAlignment||1),Hr(t,r),i===ar){const e=m/6*(f/n.BYTES_PER_ELEMENT);lo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Xr||i===Wr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function Fu(t,e,n){const r=n.target||hr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Vn,a=_r(o),l=n.format||a.format,s=n.type||a.type;if(Hr(t,n),r===ar)for(let e=0;e<6;++e)t.texImage2D(So+e,i,o,n.width,n.height,0,l,s,null);else r===Xr||r===Wr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function Ds(t,e,n){n=n||Qr,e=e||dr.textureOptions;const r=t.createTexture(),i=e.target||hr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Vn;t.bindTexture(i,r),i===ar&&(t.texParameteri(i,Yi,Fi),t.texParameteri(i,Li,Fi));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)Iu(t,r,e,n);else if(Mr(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||Mr(s[0]))){const n=wu(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||Qs(s[0]))?i===ar?Su(t,r,e,n):Tu(t,r,e,n):(_s(t,r,s,e),o=s.width,a=s.height);else Fu(t,r,e);return Kr(e)&&oo(t,r,e,o,a,l),Ps(t,r,e),r}const Yo=Ls;function $s(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const Ci=33984,Ei=34962,Yu=34963,Lu=35713,Cu=35714,Hu=35632,Nu=35633,Ju=35981,qs=35718,Eu=35721,ku=35971,Uu=35382,Bu=35396,Au=35398,Mu=35392,Ku=35395,ki=5126,tl=35664,el=35665,nl=35666,Lo=5124,rl=35667,il=35668,ol=35669,sl=35670,ll=35671,cl=35672,ul=35673,al=35674,dl=35675,hl=35676,ju=35678,zu=35680,Ou=35679,Pu=35682,_u=35685,Qu=35686,Du=35687,$u=35688,qu=35689,ta=35690,ea=36289,na=36292,ra=36293,Co=5125,fl=36294,ml=36295,pl=36296,ia=36298,oa=36299,sa=36300,la=36303,ca=36306,ua=36307,aa=36308,da=36311,Ui=3553,Bi=34067,Ho=32879,Ai=35866,ge={};function bl(t,e){return ge[e].bindPoint}function ha(t,e){return function(n){t.uniform1f(e,n)}}function fa(t,e){return function(n){t.uniform1fv(e,n)}}function ma(t,e){return function(n){t.uniform2fv(e,n)}}function pa(t,e){return function(n){t.uniform3fv(e,n)}}function ba(t,e){return function(n){t.uniform4fv(e,n)}}function yl(t,e){return function(n){t.uniform1i(e,n)}}function gl(t,e){return function(n){t.uniform1iv(e,n)}}function Zl(t,e){return function(n){t.uniform2iv(e,n)}}function vl(t,e){return function(n){t.uniform3iv(e,n)}}function Gl(t,e){return function(n){t.uniform4iv(e,n)}}function ya(t,e){return function(n){t.uniform1ui(e,n)}}function ga(t,e){return function(n){t.uniform1uiv(e,n)}}function Za(t,e){return function(n){t.uniform2uiv(e,n)}}function va(t,e){return function(n){t.uniform3uiv(e,n)}}function Ga(t,e){return function(n){t.uniform4uiv(e,n)}}function Xa(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function Wa(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function Va(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function Ra(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function xa(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function Ia(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function Sa(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function Ta(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function wa(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function zn(t,e,n,r){const i=bl(t,e);return Pr(t)?function(e){let o,a;!e||xo(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(Ci+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(Ci+n),t.bindTexture(i,e)}}function On(t,e,n,r,i){const o=bl(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return Pr(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(Ci+a[r]),xo(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(Ci+a[n]),t.bindTexture(o,e)}))}}function Mi(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||ki,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function fr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Lo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function Ki(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Co,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function No(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(Ei,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||ki,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[ki]={Type:Float32Array,size:4,setter:ha,arraySetter:fa},ge[tl]={Type:Float32Array,size:8,setter:ma,cols:2},ge[el]={Type:Float32Array,size:12,setter:pa,cols:3},ge[nl]={Type:Float32Array,size:16,setter:ba,cols:4},ge[Lo]={Type:Int32Array,size:4,setter:yl,arraySetter:gl},ge[rl]={Type:Int32Array,size:8,setter:Zl,cols:2},ge[il]={Type:Int32Array,size:12,setter:vl,cols:3},ge[ol]={Type:Int32Array,size:16,setter:Gl,cols:4},ge[Co]={Type:Uint32Array,size:4,setter:ya,arraySetter:ga},ge[fl]={Type:Uint32Array,size:8,setter:Za,cols:2},ge[ml]={Type:Uint32Array,size:12,setter:va,cols:3},ge[pl]={Type:Uint32Array,size:16,setter:Ga,cols:4},ge[sl]={Type:Uint32Array,size:4,setter:yl,arraySetter:gl},ge[ll]={Type:Uint32Array,size:8,setter:Zl,cols:2},ge[cl]={Type:Uint32Array,size:12,setter:vl,cols:3},ge[ul]={Type:Uint32Array,size:16,setter:Gl,cols:4},ge[al]={Type:Float32Array,size:32,setter:Xa,rows:2,cols:2},ge[dl]={Type:Float32Array,size:48,setter:Wa,rows:3,cols:3},ge[hl]={Type:Float32Array,size:64,setter:Va,rows:4,cols:4},ge[_u]={Type:Float32Array,size:32,setter:Ra,rows:2,cols:3},ge[Qu]={Type:Float32Array,size:32,setter:Ia,rows:2,cols:4},ge[Du]={Type:Float32Array,size:48,setter:xa,rows:3,cols:2},ge[$u]={Type:Float32Array,size:48,setter:Ta,rows:3,cols:4},ge[qu]={Type:Float32Array,size:64,setter:Sa,rows:4,cols:2},ge[ta]={Type:Float32Array,size:64,setter:wa,rows:4,cols:3},ge[ju]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[zu]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[Ou]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[Pu]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[ea]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[na]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[ra]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[ia]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[oa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[sa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[la]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[ca]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[ua]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[aa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[da]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai};const Cn={};Cn[ki]={size:4,setter:Mi},Cn[tl]={size:8,setter:Mi},Cn[el]={size:12,setter:Mi},Cn[nl]={size:16,setter:Mi},Cn[Lo]={size:4,setter:fr},Cn[rl]={size:8,setter:fr},Cn[il]={size:12,setter:fr},Cn[ol]={size:16,setter:fr},Cn[Co]={size:4,setter:Ki},Cn[fl]={size:8,setter:Ki},Cn[ml]={size:12,setter:Ki},Cn[pl]={size:16,setter:Ki},Cn[sl]={size:4,setter:fr},Cn[ll]={size:8,setter:fr},Cn[cl]={size:12,setter:fr},Cn[ul]={size:16,setter:fr},Cn[al]={size:4,setter:No,count:2},Cn[dl]={size:9,setter:No,count:3},Cn[hl]={size:16,setter:No,count:4};const Fa=/ERROR:\s*\d+:(\d+)/gi;function Ya(t,e="",n=0){const r=[...e.matchAll(Fa)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const bs=/^[ \t]*\n/;function Xl(t){let e=0;return bs.test(t)&&(e=1,t=t.replace(bs,"")),{lineOffset:e,shaderSource:t}}function La(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function Ca(t,e,n,r){if(r=r||Yo,!t.getShaderParameter(n,Lu)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=Xl(t.getShaderSource(n)),l=`${Ya(a,i,o)}\nError compiling ${Us(t,e)}: ${i}`;return r(l),l}return""}function Jo(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Yo,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const Ha=["VERTEX_SHADER","FRAGMENT_SHADER"];function Na(t,e){return e.indexOf("frag")>=0?Hu:e.indexOf("vert")>=0?Nu:void 0}function Ja(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const Ea=(t=0)=>new Promise((e=>setTimeout(e,t)));function ka(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=Jo(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=$s(i),o=e?e.text:i;let a=t[Ha[n]];e&&e.type&&(a=Na(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,Xl(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||Ju))}return t.linkProgram(r),r}function Ua(t,e,n,r,i){const o=Jo(n,r,i),a=new Set(e),l=ka(t,e,o);function s(t,e){const n=Aa(t,e,o.errorCallback);return n&&Ja(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;Ba(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function Ba(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await Ea(i),i=1e3/60}while(!r(t,e))}function Aa(t,e,n){if(n=n||Yo,!t.getProgramParameter(e,Cu)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>Ca(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function Ma(t,e,n,r,i){return Ua(t,e,n,r,i)}function Wl(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const Ka=/(\.|\[|]|\w+)/g,ja=t=>t>="0"&&t<="9";function za(t,e,n,r){const i=t.split(Ka).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=ja(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){Vl(t,e)}}(l),a+=t}}}function Oa(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,qs);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(Wl(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,za(l,t,o,i)}}return i}function Pa(t,e){const n={},r=t.getProgramParameter(e,ku);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function _a(t,e){const n=t.getProgramParameter(e,qs),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,Uu);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,Bu),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,Au),size:t.getActiveUniformBlockParameter(e,n,Mu),uniformIndices:t.getActiveUniformBlockParameter(e,n,Ku)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function Vl(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):Vl(t[n],e[n])}}function Rl(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)Rl(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function Qa(t,e){const n={},r=t.getProgramParameter(e,Eu);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(Wl(r))continue;const o=t.getAttribLocation(e,r.name),a=Cn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function Da(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function $a(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(Da(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(Yu,n.indices))}function ys(t,e){const n={program:e,uniformSetters:Oa(t,e),attribSetters:Qa(t,e)};return Pr(t)&&(n.uniformBlockSpec=_a(t,e),n.transformFeedbackInfo=Pa(t,e)),n}const qa=/\s|{|}|;/;function t0(t,e,n,r,i){const o=Jo(n,r,i),a=[];if(e=e.map((function(t){if(!qa.test(t)){const e=$s(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return La(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:ys(t,n))});const s=Ma(t,e,o);return s?ys(t,s):null}const e0=4,gs=5123;function n0(t,e,n,r,i,o){n=void 0===n?e0:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?gs:e.elementType,i,o):t.drawElements(n,s,void 0===l?gs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const xl=36160,li=36161,r0=3553,i0=5121,o0=6402,s0=6408,l0=33190,c0=36012,u0=35056,a0=36013,d0=32854,h0=32855,f0=36194,Il=33189,Sl=6401,Tl=36168,Eo=34041,co=36064,ji=36096,wl=36128,ko=33306,uo=33071,ao=9729,m0=[{format:s0,type:i0,min:ao,wrap:uo},{format:Eo}],$n={};function p0(t,e){return $n[t]||$n[e]}$n[Eo]=ko,$n[Sl]=wl,$n[Tl]=wl,$n[o0]=ji,$n[Il]=ji,$n[l0]=ji,$n[c0]=ji,$n[u0]=ko,$n[a0]=ko;const mr={};function b0(t){return mr[t]}mr[d0]=!0,mr[h0]=!0,mr[f0]=!0,mr[Eo]=!0,mr[Il]=!0,mr[Sl]=!0,mr[Tl]=!0;const y0=32;function g0(t){return t>=co&&t<co+y0}function Hi(t,e,n,r){const i=xl,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||m0).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||p0(u,e.internalFormat);if(d||(d=co+o),g0(d)&&a.push(d),!s)if(void 0!==c||b0(u))s=t.createRenderbuffer(),t.bindRenderbuffer(li,s),c>1?t.renderbufferStorageMultisample(li,c,u,n,r):t.renderbufferStorage(li,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||ao,i.mag=i.mag||i.minMag||ao,i.wrapS=i.wrapS||i.wrap||uo,i.wrapT=i.wrapT||i.wrap||uo),s=Ds(t,i)}if(T1(t,s))t.framebufferRenderbuffer(i,d,li,s);else{if(!xo(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||r0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function Z0(t,e,n){n=n||xl,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function bn(t,e){return()=>e instanceof WebGLTexture?e:Ds(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Zs=2;class Vr{constructor(t){Wt(this,"id","_"),Wt(this,"context"),Wt(this,"output"),Wt(this,"fbi"),Wt(this,"options"),Wt(this,"programInfo"),Wt(this,"bufferInfo"),Wt(this,"profiler"),Wt(this,"lastRun");const{context:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=t0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=q1(this.context,this.getBuffers()),this.fbi=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),$a(this.context,this.programInfo,this.bufferInfo),Rl(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),Z0(this.context,this.options.disableFramebuffer?null:this.fbi),n0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const v0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",G0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class X0 extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return v0+this.createLoopFunction()}getVertexShader(){return G0}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const W0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",V0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class Uo extends Vr{getFragmentShader(){return W0}getVertexShader(){return V0}}class Bo{constructor(){Wt(this,"steps",[]),Wt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class Ao extends Bo{constructor(){super(...arguments),Wt(this,"preciseMaskEnabled",!1)}}const R0=10,x0=2,I0=8;class S0 extends Ao{constructor(t,e){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),Wt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new X0({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new Uo({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:bn(t,this.inputImage),mask:bn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:bn(t,this.blur.output),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class Fl extends Ao{constructor(t){super(),Wt(this,"inputImage"),Wt(this,"inputBackgroundImage"),Wt(this,"inputMask"),Wt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new Uo({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:bn(t,this.inputBackgroundImage),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class T0 extends Fl{constructor(){super(...arguments),Wt(this,"frameReader"),Wt(this,"preciseMaskEnabled",!0)}set inputVideo(t){this.frameReader=t.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}const w0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",F0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var Mo=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))(Mo||{});class Yl extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return w0+this.createLoopFunction()}getVertexShader(){return F0}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class Y0 extends Ao{constructor(t,e){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new Yl({...n,radius:e,type:Mo.GAUSSIAN}),i=new Uo({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:bn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:bn(t,this.inputImage),foreground:bn(t,r.output),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class Ko extends Vr{constructor(t){super(t),Wt(this,"fbi2"),this.fbi2=Hi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const L0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",C0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class H0 extends Ko{getFragmentShader(){return L0}getVertexShader(){return C0}}const N0="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",J0="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class E0 extends Vr{getFragmentShader(){return N0}getVertexShader(){return J0}}const k0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",U0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class B0 extends Vr{getFragmentShader(){return k0}getVertexShader(){return U0}}const A0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",M0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class K0 extends Ko{getFragmentShader(){return A0}getVertexShader(){return M0}}const j0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",z0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class O0 extends Ko{getFragmentShader(){return j0}getVertexShader(){return z0}}class P0 extends Bo{constructor(t,e,n){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),Wt(this,"previousInputImage"),Wt(this,"previousInputMask"),Wt(this,"output"),Wt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1}),this.context=t;const r={context:t,height:n,width:e},i=new H0(r),o=new Yl({...r,radius:1,type:Mo.GAUSSIAN}),a=new O0(r),l=new K0(r),s=new B0(r),c=new E0({...r});let u=1;u*=Math.max(2.5,480/144);const d=Math.max(1,.66*Math.sqrt(u)),h=1/640,f=1/480;this.addStep({program:i,getUniforms:()=>({image_now:bn(t,this.inputImage),image_before:bn(t,this.previousInputImage),mask_now:bn(t,this.inputMask),mask_before:bn(t,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:a,getUniforms:()=>({inputs:bn(t,this.inputMask),threshold:bn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:bn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:bn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:bn(t,l.output)})}),this.addStep({program:c,getUniforms:()=>({input_frame:bn(t,this.inputImage),segmentation_mask:bn(t,this.inputMask),threshold:bn(t,o.output),texel_size:[h,f],step:d,radius:u,offset:d>1?.5*d:0,sigma_texel:Math.max(h,f)*u,sigma_color:.1})}),this.output=c.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}}const _0="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",Q0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class D0 extends Vr{getFragmentShader(){return _0}getVertexShader(){return Q0}}class $0 extends Bo{constructor(t,e,n){super(),Wt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new D0({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:bn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}class q0{constructor(t){Wt(this,"resize"),Wt(this,"canvas"),Wt(this,"context"),this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=t.width,this.canvas.height=t.height,this.resize=new $0(this.context,t.width,t.height)}resizeForeground(t,e){this.canvas.width=t,this.canvas.height=e,this.resize.resizeOutput(t,e)}async process(t){var e,n;return this.canvas.width=this.canvas.width,null==(e=this.resize)||e.setData(t),null==(n=this.resize)||n.run(),this.canvas}}class t3{constructor(t,e){Wt(this,"improveMaskSegmentation"),Wt(this,"backgroundResizer"),Wt(this,"backgroundImage"),Wt(this,"backgroundVideo"),Wt(this,"profiler"),Wt(this,"activePipeline"),Wt(this,"canvas"),Wt(this,"options"),Wt(this,"context"),Wt(this,"virtualBGImage"),this.id=t,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=e.foregroundWidth,this.canvas.height=e.foregroundHeight,this.improveMaskSegmentation=new P0(this.context,e.maskWidth,e.maskHeight),this.backgroundImage=new Fl(this.context),this.backgroundVideo=new T0(this.context),this.backgroundResizer=new q0({width:e.foregroundWidth,height:e.foregroundHeight})}setBackgroundOptions(t){switch(t.transformerType){case"BackgroundBlur":this.activePipeline=new S0(this.context,this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.activePipeline=new Y0(this.context,this.getBlurSize(t.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage}this.options=t}setFlickeringOptions(t){var e;null==(e=this.improveMaskSegmentation)||e.setOptions(t)}setVideoBGReadable(t){this.backgroundVideo.inputVideo=t}async setVirtualBGImage(t){this.virtualBGImage=t,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(t)}async process(t,e){var n,r,i,o,a,l,s;if(this.activePipeline&&t.width&&(null==e?void 0:e.width)){const c=`[${this.id}] background-filter`;null==(n=this.profiler)||n.pushContext(c);let u=e;((null==(r=this.options)?void 0:r.selfieSegmentationType)&&"PRECISE"===(null==(i=this.options)?void 0:i.selfieSegmentationType)||!(null!=(o=this.options)&&o.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(t,e),this.improveMaskSegmentation.run(),u=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),null==(a=this.activePipeline)||a.setData(t,u),null==(l=this.activePipeline)||l.run(),null==(s=this.profiler)||s.popContext(c)}}async resizeForeground(t,e){var n;this.canvas.width=t,this.canvas.height=e,this.backgroundImage.resizeOutput(t,e),this.backgroundVideo.resizeOutput(t,e),this.backgroundResizer.resizeForeground(t,e),null==(n=this.activePipeline)||n.resizeOutput(t,e),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(t){const e=new g1(this.context);return this.profiler=e,e.start(),await Ss(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}getBlurSize(t=di.Low){switch(t){case di.Low:return 5;case di.High:return 12}return t}}class e3{constructor(){Wt(this,"selfieSegmentation",new Ws),Wt(this,"backgroundFilter"),Wt(this,"reporter",new b1),Wt(this,"previousDimensions",{width:0,height:0}),Wt(this,"backgroundOptions")}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath);const{width:n,height:r}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new t3(t,{foregroundWidth:1,foregroundHeight:1,maskWidth:n,maskHeight:r}),this.report({variation:"Create"})}async transform(t,e){var n,r,i,o;const a=null!=(n=t.timestamp)?n:0,l=await createImageBitmap(t),s=await this.selfieSegmentation.process(l);s?((l.width!==this.previousDimensions.width||l.height!==this.previousDimensions.height)&&(this.previousDimensions.width=l.width,this.previousDimensions.height=l.height,await(null==(r=this.backgroundFilter)?void 0:r.resizeForeground(l.width,l.height))),await(null==(i=this.backgroundFilter)?void 0:i.process(l,s)),t.close(),e.enqueue(new VideoFrame(null==(o=this.backgroundFilter)?void 0:o.canvas,{timestamp:a,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;this.backgroundOptions=t,await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t)),this.report({variation:"Update"})}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t),this.report({variation:"Update"})}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}getTransformerType(){var t,e;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"}report(t){var e;this.reporter.send({version:y1,action:"MlTransformers",transformerType:null==(e=this.backgroundOptions)?void 0:e.transformerType,config:JSON.stringify(this.backgroundOptions),...t})}}const jo=class{constructor(){Wt(this,"backgroundTransformer",new e3),Wt(this,"mediaProcessor",new G2),Wt(this,"rate",30),Wt(this,"resolveOnMediaProcessor"),Wt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){f2(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let ho=jo;A2("ProcessorWorker",jo);const Ll="dmFyIGlsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgb2w9KHEsWCx6KT0+WCBpbiBxP2lsKHEsWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pOnFbWF09ejt2YXIgcD0ocSxYLHopPT4ob2wocSx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLHopLHopOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBxKHIsZSl7cmV0dXJuIGdsb2JhbFRoaXNbcl18fChnbG9iYWxUaGlzW3JdPWUpLGdsb2JhbFRoaXNbcl19Y29uc3QgWD1xKCJnbG9iYWxzIix7fSk7dmFyIHo9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHp8fHt9KTtmdW5jdGlvbiBwaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIHplKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+cGkobykpKX1xKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gU3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIFdlKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxXZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sV2Uoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIHlpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7emUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFJyPXEoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gX2kocixlKXtlLndvcmtlcklkPXIsU3IoKSYmKFJyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIHhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPVJyW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7V2UobixYKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBnaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIGJpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1dlKHIuYXJnc1swXSxYKSx6ZShyLHt9KX1mdW5jdGlvbiB2aSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIHouSU5JVDp4aSh0LHIpO2JyZWFrO2Nhc2Ugei5GT1JXQVJEOnlpKHQscik7YnJlYWs7Y2FzZSB6LlRFUk1JTkFURTpnaSh0LHIpO2JyZWFrO2Nhc2Ugei5HTE9CQUxTX1NZTkM6YmkodCk7YnJlYWt9fX1TcigpJiZ2aSgpO3ZhciBFaT1PYmplY3QuZGVmaW5lUHJvcGVydHksVGk9KHIsZSx0KT0+ZSBpbiByP0VpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxBPShyLGUsdCk9PihUaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y2xhc3MgSnt9QShKLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksQShKLCJlcnJvcnMiLHt0cmFuc2Zvcm1lcl9ub25lOiJObyB0cmFuc2Zvcm1lcnMgcHJvdmlkZWQiLHRyYW5zZm9ybWVyX3N0YXJ0OiJDYW5ub3Qgc3RhcnQgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX3RyYW5zZm9ybToiQ2Fubm90IHRyYW5zZm9ybSBmcmFtZSIsdHJhbnNmb3JtZXJfZmx1c2g6IkNhbm5vdCBmbHVzaCB0cmFuc2Zvcm1lciIscmVhZGFibGVfbnVsbDoiUmVhZGFibGUgaXMgbnVsbCIsd3JpdGFibGVfbnVsbDoiV3JpdGFibGUgaXMgbnVsbCJ9KTtjb25zdCBlZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxSZT1uZXcgV2Vha01hcCxSdD1TeW1ib2woImFueVByb2R1Y2VyIiksSXI9UHJvbWlzZS5yZXNvbHZlKCksSGU9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksWWU9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgSXQ9ITE7ZnVuY3Rpb24gYmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBqZShyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2ZShyLGUpe2NvbnN0IHQ9VmUuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBJZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpSdCxuPVJlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gQWkocixlLHQpe2NvbnN0IG49UmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhSdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KFJ0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIEZyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpSWUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlJZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIFByKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIERyO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighRHIuaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBGdD1yPT5yPT09SGV8fHI9PT1ZZTtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Qcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIEl0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fEl0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7SXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtlZS5zZXQodGhpcyxuZXcgU2V0KSxWZS5zZXQodGhpcyxuZXcgTWFwKSxSZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9Pnt0cnl7bz1KU09OLnN0cmluZ2lmeShvKX1jYXRjaHtvPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhvKS5qb2luKCIsIil9YH10eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGZlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7amUodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpYmUobiksdmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksRnQobil8fHRoaXMuZW1pdChIZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtqZSh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSliZShuKSx2ZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLEZ0KG4pfHx0aGlzLmVtaXQoWWUse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpYmUodCk7cmV0dXJuIEZyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe2JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksQWkodGhpcyxlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPUZ0KGUpP1tdOlsuLi5pXTthd2FpdCBJcixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtiZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBJcjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gamUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxlZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChIZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBGcih0aGlzKX1vZmZBbnkoZSl7amUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChZZSx7bGlzdGVuZXI6ZX0pLGVlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7dmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49SWUodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7ZWUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9ZWUuZ2V0KHRoaXMpLnNpemUrdmUodGhpcyxuKS5zaXplK0llKHRoaXMsbikuc2l6ZStJZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmYmUobiksdCs9ZWUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9UHIodCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IERyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpIZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6WWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgUHQ9ZmU7ZnVuY3Rpb24gd2kocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIFNpKHIpe2lmKHdpKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIER0KHIpe3JldHVybiBTaShyKS5tZXNzYWdlfXZhciBSaT1PYmplY3QuZGVmaW5lUHJvcGVydHksSWk9KHIsZSx0KT0+ZSBpbiByP1JpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxGaT0ocixlLHQpPT4oSWkocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NvbnN0IFBpPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsRGk9Imh0dHBzOi8vIixOaT0xZTQ7bGV0IFhlO2NvbnN0IE1pPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBVaSgpe2lmKCFYZSYmKFhlPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWGUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWGUoTWkpfWNvbnN0IE09W107Zm9yKGxldCByPTA7cjwyNTY7KytyKU0ucHVzaCgocisyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24ga2kocixlPTApe3JldHVybihNW3JbZSswXV0rTVtyW2UrMV1dK01bcltlKzJdXStNW3JbZSszXV0rIi0iK01bcltlKzRdXStNW3JbZSs1XV0rIi0iK01bcltlKzZdXStNW3JbZSs3XV0rIi0iK01bcltlKzhdXStNW3JbZSs5XV0rIi0iK01bcltlKzEwXV0rTVtyW2UrMTFdXStNW3JbZSsxMl1dK01bcltlKzEzXV0rTVtyW2UrMTRdXStNW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IENpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLE5yPXtyYW5kb21VVUlEOkNpfTtmdW5jdGlvbiBPaShyLGUsdCl7aWYoTnIucmFuZG9tVVVJRCYmIWUmJiFyKXJldHVybiBOci5yYW5kb21VVUlEKCk7cj1yfHx7fTtjb25zdCBuPXIucmFuZG9tfHwoci5ybmd8fFVpKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IobGV0IGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4ga2kobil9ZnVuY3Rpb24gTnQocixlKXtyZXR1cm4gZ2xvYmFsVGhpc1tyXXx8KGdsb2JhbFRoaXNbcl09ZSksZ2xvYmFsVGhpc1tyXX1jb25zdCB0ZT1OdCgiZ2xvYmFscyIse30pO3ZhciBsZT0ocj0+KHIuSU5JVD0iSU5JVCIsci5GT1JXQVJEPSJGT1JXQVJEIixyLlRFUk1JTkFURT0iVEVSTUlOQVRFIixyLkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIixyKSkobGV8fHt9KTtmdW5jdGlvbiBNcihyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWxldCBCaT0wO2Z1bmN0aW9uIExpKHIsZSx0LG4saSl7Y29uc3Qgbz1CaSsrO3JldHVybiByLnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6ZSxmdW5jdGlvbk5hbWU6dCxhcmdzOm59LG4uZmlsdGVyKHM9Pk1yKHMpKSksbmV3IFByb21pc2Uocz0+e2k9PW51bGx8fGkuc2V0KG8scyl9KX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89Pk1yKG8pKSl9Y29uc3QgVXI9TnQoIndvcmtlcml6ZWQiLHt9KTtmdW5jdGlvbiBrcigpe3JldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9YXN5bmMgZnVuY3Rpb24gR2koKXtpZihrcigpKUZlKHt0eXBlOmxlLkdMT0JBTFNfU1lOQ30sdGUpO2Vsc2V7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBpbiBVcil7Y29uc3R7d29ya2VyOnQscmVzb2x2ZXJzOm59PVVyW2VdLndvcmtlckNvbnRleHQ7dCYmci5wdXNoKExpKHQsbGUuR0xPQkFMU19TWU5DLCIiLFt0ZV0sbikpfWF3YWl0IFByb21pc2UuYWxsKHIpfX1mdW5jdGlvbiBRZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sUWUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFFlKHJbdF0sZVt0XSkpOmVbdF09clt0XX1hc3luYyBmdW5jdGlvbiAkaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO0ZlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCB6aT1OdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBXaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT16aVt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1FlKG4sdGUpLEZlKHIsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIFZpKHIsZSl7Y29uc3R7YXJnczp0fT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnQhPW51bGw/dDpbXSkpLEZlKHIsbil9ZnVuY3Rpb24gSGkocil7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7UWUoci5hcmdzWzBdLHRlKSxGZShyLHt9KX1mdW5jdGlvbiBZaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIGxlLklOSVQ6V2kodCxyKTticmVhaztjYXNlIGxlLkZPUldBUkQ6JGkodCxyKTticmVhaztjYXNlIGxlLlRFUk1JTkFURTpWaSh0LHIpO2JyZWFrO2Nhc2UgbGUuR0xPQkFMU19TWU5DOkhpKHQpO2JyZWFrfX19a3IoKSYmWWkoKTtmdW5jdGlvbiBqaShyLGUpe3JldHVybiB0ZVtyXXx8KHRlW3JdPWUpLFsoKT0+dGVbcl0sYXN5bmMgdD0+e3RlW3JdPXQsYXdhaXQgR2koKX1dfWZ1bmN0aW9uIFhpKHIsZSl7cmV0dXJuIGppKHIsZSl9Y29uc3RbUWksS2ldPVhpKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIHFpKHIpe0tpKHIpfWZ1bmN0aW9uIE10KCl7cmV0dXJuIFFpKCl9Y2xhc3MgVXR7Y29uc3RydWN0b3IoZSl7RmkodGhpcywidXVpZCIsT2koKSksdGhpcy5jb25maWc9ZX1hc3luYyBzZW5kKGUpe3ZhciB0LG4saTtjb25zdHthcHBJZDpvLHNvdXJjZVR5cGU6c309KHQ9TXQoKSkhPW51bGw/dDp7fTtpZighb3x8IXMpcmV0dXJuIm1ldGFkYXRhIG1pc3NpbmciO2NvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldFRpbWVvdXQoKCk9PmEuYWJvcnQoKSxOaSk7cmV0dXJuIGF3YWl0KChpPShuPXRoaXMuY29uZmlnKT09bnVsbD92b2lkIDA6bi5mZXRjaCkhPW51bGw/aTpmZXRjaCkodGhpcy5nZXRVcmwoKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuZ2V0SGVhZGVycygpLGJvZHk6SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFJlcG9ydChlKSksc2lnbmFsOmEuc2lnbmFsfSksY2xlYXJUaW1lb3V0KHUpLCJzdWNjZXNzIn1nZXRVcmwoKXt2YXIgZTtsZXQgdD0oZT1NdCgpLnByb3h5VXJsKSE9bnVsbD9lOkRpO3JldHVybiB0Kz0odC5hdCgtMSk9PT0iLyI/IiI6Ii8iKStQaSx0fWdldEhlYWRlcnMoKXtyZXR1cm57IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX1idWlsZFJlcG9ydChlKXtjb25zdCB0PU10KCk7cmV0dXJue2d1aWQ6dGhpcy51dWlkLC4uLmUsYXBwbGljYXRpb25JZDp0LmFwcElkLHRpbWVzdGFtcDpEYXRlLm5vdygpLHByb3h5VXJsOnQucHJveHlVcmwsc291cmNlOnQuc291cmNlVHlwZX19fWNvbnN0IEtlPSIyLjAuMiI7Y2xhc3MgSml7Y29uc3RydWN0b3IoZSl7QSh0aGlzLCJmcmFtZVRyYW5zZm9ybWVkQ291bnQiLDApLEEodGhpcywiZnJhbWVGcm9tU291cmNlQ291bnQiLDApLEEodGhpcywic3RhcnRBdCIsMCksQSh0aGlzLCJyZXBvcnRlciIpLHRoaXMuY29uZmlnPWUsdGhpcy5yZXBvcnRlcj1uZXcgVXQoZSl9YXN5bmMgb25GcmFtZUZyb21Tb3VyY2UoKXt0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50Kyt9Z2V0IGZwcygpe2NvbnN0e3N0YXJ0QXQ6ZSxmcmFtZUZyb21Tb3VyY2VDb3VudDp0fT10aGlzLG49KERhdGUubm93KCktZSkvMWUzO3JldHVybiB0L259YXN5bmMgb25GcmFtZVRyYW5zZm9ybWVkKGU9e30sdD0hMSl7dGhpcy5zdGFydEF0PT09MCYmKHRoaXMuc3RhcnRBdD1EYXRlLm5vdygpKSx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudCsrO2NvbnN0e3N0YXJ0QXQ6bixmcmFtZVRyYW5zZm9ybWVkQ291bnQ6aSxmcmFtZUZyb21Tb3VyY2VDb3VudDpvfT10aGlzLHM9RGF0ZS5ub3coKSxhPShzLW4pLzFlMyx1PWkvYSxmPW8vYTtyZXR1cm4gdHx8dGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ+PXRoaXMuY29uZmlnLmxvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ/KHRoaXMuZnJhbWVGcm9tU291cmNlQ291bnQ9MCx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD0wLHRoaXMuc3RhcnRBdD1zLHRoaXMucmVwb3J0ZXIuY29uZmlnPXRoaXMuY29uZmlnLHRoaXMucmVwb3J0ZXIuc2VuZCh7Li4udGhpcy5jb25maWcucmVwb3J0LHZhcmlhdGlvbjoiUW9TIixmcHM6Zix0cmFuc2Zvcm1lZEZwczp1LGZyYW1lc1RyYW5zZm9ybWVkOmksLi4uZX0pKToic3VjY2VzcyJ9fXZhciBrdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShrdHx8e30pO2NvbnN0IFppPTUwMCxlbz0uODtjbGFzcyB0byBleHRlbmRzIFB0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSxBKHRoaXMsInJlcG9ydGVyXyIsbmV3IFV0KSxBKHRoaXMsInJlcG9ydGVyUW9zXyIsbmV3IEppKHtsb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50OlppLHJlcG9ydDp7dmVyc2lvbjpLZX19KSksQSh0aGlzLCJ0cmFuc2Zvcm1lclR5cGVfIiksQSh0aGlzLCJ0cmFuc2Zvcm1lcl8iKSxBKHRoaXMsInNob3VsZFN0b3BfIiksQSh0aGlzLCJpc0ZsYXNoZWRfIiksQSh0aGlzLCJtZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfIiksQSh0aGlzLCJ2aWRlb0hlaWdodF8iKSxBKHRoaXMsInZpZGVvV2lkdGhfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSxBKHRoaXMsImluZGV4XyIpLEEodGhpcywiY29udHJvbGxlcl8iKSx0aGlzLmluZGV4Xz10LHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfc3RhcnQsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJzdGFydCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbixpLG8scztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KG49ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9uOjAsdGhpcy52aWRlb1dpZHRoXz0oaT1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/aTowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpKLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKmVvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246S2UsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIHJvIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInRyYWNrRXhwZWN0ZWRSYXRlXyIpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IHRvKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIG5vIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLEEodGhpcywicmVwb3J0ZXJfIiksQSh0aGlzLCJwaXBlbGluZV8iKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInJlYWRhYmxlXyIpLEEodGhpcywid3JpdGFibGVfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnJlcG9ydGVyXz1uZXcgVXQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOkouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpKLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOkouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IHJvKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixpPT57biYmKGk9PT0icGlwZWxpbmVfc3RhcnRlZCI/aT1rdC5waXBlbGluZV9yZXN0YXJ0ZWQ6aT09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYoaT1rdC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixpKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2goaT0+e3QoaSl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOkoudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIGlvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvbz0ocixlLHQpPT5lIGluIHI/aW8ocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LHNvPShyLGUsdCk9PihvbyhyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgYW89ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix1bz0iaHR0cHM6Ly8iLGNvPTFlNDtsZXQgcWU7Y29uc3QgZm89bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGxvKCl7aWYoIXFlJiYocWU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFxZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBxZShmbyl9Y29uc3QgVT1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpVS5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBtbyhyLGU9MCl7cmV0dXJuKFVbcltlKzBdXStVW3JbZSsxXV0rVVtyW2UrMl1dK1VbcltlKzNdXSsiLSIrVVtyW2UrNF1dK1VbcltlKzVdXSsiLSIrVVtyW2UrNl1dK1VbcltlKzddXSsiLSIrVVtyW2UrOF1dK1VbcltlKzldXSsiLSIrVVtyW2UrMTBdXStVW3JbZSsxMV1dK1VbcltlKzEyXV0rVVtyW2UrMTNdXStVW3JbZSsxNF1dK1VbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgaG89dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6aG99O2Z1bmN0aW9uIHBvKHIsZSx0KXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8bG8pKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBtbyhuKX1mdW5jdGlvbiBDdChyLGUpe3JldHVybiBnbG9iYWxUaGlzW3JdfHwoZ2xvYmFsVGhpc1tyXT1lKSxnbG9iYWxUaGlzW3JdfWNvbnN0IHJlPUN0KCJnbG9iYWxzIix7fSk7dmFyIGRlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShkZXx8e30pO2Z1bmN0aW9uIE9yKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IHlvPTA7ZnVuY3Rpb24gX28ocixlLHQsbixpKXtjb25zdCBvPXlvKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+T3IocykpKSxuZXcgUHJvbWlzZShzPT57aT09bnVsbHx8aS5zZXQobyxzKX0pfWZ1bmN0aW9uIFBlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+T3IobykpKX1jb25zdCBCcj1DdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB4bygpe2lmKExyKCkpUGUoe3R5cGU6ZGUuR0xPQkFMU19TWU5DfSxyZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIEJyKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09QnJbZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goX28odCxkZS5HTE9CQUxTX1NZTkMsIiIsW3JlXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIEplKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxKZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sSmUoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGdvKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7UGUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IGJvPUN0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIHZvKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPWJvW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7SmUobixyZSksUGUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gRW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksUGUocixuKX1mdW5jdGlvbiBUbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtKZShyLmFyZ3NbMF0scmUpLFBlKHIse30pfWZ1bmN0aW9uIEFvKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgZGUuSU5JVDp2byh0LHIpO2JyZWFrO2Nhc2UgZGUuRk9SV0FSRDpnbyh0LHIpO2JyZWFrO2Nhc2UgZGUuVEVSTUlOQVRFOkVvKHQscik7YnJlYWs7Y2FzZSBkZS5HTE9CQUxTX1NZTkM6VG8odCk7YnJlYWt9fX1McigpJiZBbygpO2Z1bmN0aW9uIHdvKHIsZSl7cmV0dXJuIHJlW3JdfHwocmVbcl09ZSksWygpPT5yZVtyXSxhc3luYyB0PT57cmVbcl09dCxhd2FpdCB4bygpfV19ZnVuY3Rpb24gU28ocixlKXtyZXR1cm4gd28ocixlKX1jb25zdFtSbyxzbF09U28oIm1ldGFkYXRhIik7ZnVuY3Rpb24gT3QoKXtyZXR1cm4gUm8oKX1jbGFzcyBJb3tjb25zdHJ1Y3RvcihlKXtzbyh0aGlzLCJ1dWlkIixwbygpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixpO2NvbnN0e2FwcElkOm8sc291cmNlVHlwZTpzfT0odD1PdCgpKSE9bnVsbD90Ont9O2lmKCFvfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLGNvKTtyZXR1cm4gYXdhaXQoKGk9KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9pOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPU90KCkucHJveHlVcmwpIT1udWxsP2U6dW87cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK2FvLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9T3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgRm89IjQuMy41Ijt2YXIgWmU9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShaZXx8e30pO2FzeW5jIGZ1bmN0aW9uIEdyKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBQb3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IEdyKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMy4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgQnQ9NTEyMCxEZT01MTIxLEx0PTUxMjIsR3Q9NTEyMywkdD01MTI0LHp0PTUxMjUsV3Q9NTEyNixEbz0zMjgxOSxObz0zMjgyMCxNbz0zMzYzNSxVbz01MTMxLGtvPTMzNjQwLENvPTM1ODk5LE9vPTM1OTAyLEJvPTM2MjY5LExvPTM0MDQyLCRyPXt9O3tjb25zdCByPSRyO3JbQnRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbTHRdPUludDE2QXJyYXkscltHdF09VWludDE2QXJyYXksclskdF09SW50MzJBcnJheSxyW3p0XT1VaW50MzJBcnJheSxyW1d0XT1GbG9hdDMyQXJyYXkscltEb109VWludDE2QXJyYXkscltOb109VWludDE2QXJyYXkscltNb109VWludDE2QXJyYXkscltVb109VWludDE2QXJyYXkscltrb109VWludDMyQXJyYXkscltDb109VWludDMyQXJyYXkscltPb109VWludDMyQXJyYXkscltCb109VWludDMyQXJyYXkscltMb109VWludDMyQXJyYXl9ZnVuY3Rpb24gVnQocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gQnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuICR0O2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4genQ7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24genIocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gQnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYocj09PUludDMyQXJyYXkpcmV0dXJuICR0O2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4genQ7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gV3Iocil7Y29uc3QgZT0kcltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGV0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVnIoLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBIcj1uZXcgTWFwO2Z1bmN0aW9uIHR0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Ici5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsSHIuc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBHbyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ0dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uICRvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnR0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gSHQocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnR0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIHpvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ0dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBZcj0zNTA0NCxtZT0zNDk2MixXbz0zNDk2MyxWbz0zNDY2MCxIbz01MTIwLFlvPTUxMjEsam89NTEyMixYbz01MTIzLFFvPTUxMjQsS289NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFvKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHxZcil9ZnVuY3Rpb24gUXIocixlLHQsbil7aWYoR28ocixlKSlyZXR1cm4gZTt0PXR8fG1lO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcW8ocix0LGksZSxuKSxpfWZ1bmN0aW9uIEtyKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIEpvKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBabyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZXM9L2Nvb3JkfHRleHR1cmUvaSx0cz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gcnMocixlKXtsZXQgdDtpZihlcy50ZXN0KHIpP3Q9Mjp0cy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBucyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxycyhlLHR8fFpvKHIpLmxlbmd0aCl9ZnVuY3Rpb24gcXIocixlKXtpZihldChyKSlyZXR1cm4gcjtpZihldChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9ZdChyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEtyKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gaXMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/enIocik6anJ9ZnVuY3Rpb24gWXQocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9XcihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gb3MocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmlzKGUudHlwZSksYXJyYXlUeXBlOll0KGUudHlwZSl9fWZ1bmN0aW9uIHNzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1ZdChlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKG1lLG8pLHIuYnVmZmVyRGF0YShtZSxpLGUuZHJhd1R5cGV8fFlyKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp6cihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gYXMocixlLHQpe2NvbnN0IG49cXIoZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOlFyKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpWdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gdXMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFLcihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWV0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9b3M6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXNzOnM9YXM7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpkfT1zKHIsaSxuKSxoPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOkpvKGQpLHk9bnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmgsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIobWUsbnVsbCksdH1mdW5jdGlvbiBjcyhyLGUpe3JldHVybiBlPT09SG98fGU9PT1Zbz8xOmU9PT1qb3x8ZT09PVhvPzI6ZT09PVFvfHxlPT09S298fGU9PT1qcj80OjB9Y29uc3QganQ9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBmcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPGp0Lmxlbmd0aCYmKHQ9anRbbl0sISh0IGluIGV8fCh0PVhyLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1qdC5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihtZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihtZSxWbyk7ci5iaW5kQnVmZmVyKG1lLG51bGwpO2NvbnN0IHM9Y3MocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGxzKHIsZSx0KXtjb25zdCBuPXVzKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPXFyKG8sImluZGljZXMiKTtpLmluZGljZXM9UXIocixzLFdvKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9VnQocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1mcyhyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIE5lKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgSnI9ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxuZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LE1lPWV0LFpyPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxlbj02NDA2LFE9NjQwNyxGPTY0MDgsdG49NjQwOSxybj02NDEwLFVlPTY0MDIsbm49MzQwNDEscnQ9MzMwNzEsZHM9OTcyOCxtcz05NzI5LGllPTM1NTMsb2U9MzQwNjcsaGU9MzI4NzkscGU9MzU4NjYsWHQ9MzQwNjksaHM9MzQwNzAscHM9MzQwNzEseXM9MzQwNzIsX3M9MzQwNzMseHM9MzQwNzQsUXQ9MTAyNDEsS3Q9MTAyNDAsbnQ9MTAyNDIsaXQ9MTAyNDMsb249MzI4ODIsZ3M9MzMwODIsYnM9MzMwODMsdnM9MzMwODQsRXM9MzMwODUscXQ9MzMxNyxzbj0zMzE0LGFuPTMyODc4LHVuPTMzMTYsY249MzMxNSxmbj0zMjg3NyxUcz0zNzQ0MyxBcz0zNzQ0MSx3cz0zNzQ0MCxTcz0zMzMyMSxScz0zNjc1NixJcz0zMzMyNSxGcz0zMzMyNixQcz0zMzMzMCxEcz0zMzMyOSxOcz0zMzMzOCxNcz0zMzMzNyxVcz0zMzM0MCxrcz0zMzMzOSxDcz0zMzMyMyxPcz0zNjc1NyxCcz0zMzMyNyxMcz0zMzMyOCxHcz0zMzMzNiwkcz0zMzMzNSx6cz0zMzMzMixXcz0zMzMzMSxWcz0zMzMzNCxIcz0zMzMzMyxZcz0zMjg0OSxqcz0zNTkwNSxYcz0zNjE5NCxRcz0zNjc1OCxLcz0zNTg5OCxxcz0zNTkwMSxKcz0zNDg0Myxacz0zNDgzNyxlYT0zNjIyMSx0YT0zNjIzOSxyYT0zNjIxNSxuYT0zNjIzMyxpYT0zNjIwOSxvYT0zNjIyNyxzYT0zMjg1NixhYT0zNTkwNyx1YT0zNjc1OSxjYT0zMjg1NSxmYT0zMjg1NCxsYT0zMjg1NyxkYT0zNDg0MixtYT0zNDgzNixoYT0zNjIyMCxwYT0zNjIzOCx5YT0zNjk3NSxfYT0zNjIxNCx4YT0zNjIzMixnYT0zNjIyNixiYT0zNjIwOCx2YT0zMzE4OSxFYT0zMzE5MCxUYT0zNjAxMixBYT0zNjAxMyx3YT0zNTA1NixzZT01MTIwLFI9NTEyMSxvdD01MTIyLEVlPTUxMjMsc3Q9NTEyNCx5ZT01MTI1LEM9NTEyNixsbj0zMjgxOSxkbj0zMjgyMCxtbj0zMzYzNSxXPTUxMzEsa2U9MzYxOTMsSnQ9MzM2NDAsU2E9MzU4OTksUmE9MzU5MDIsSWE9MzYyNjksRmE9MzQwNDIsYXQ9MzMzMTksVGU9MzMzMjAsdXQ9NjQwMyxBZT0zNjI0NCx3ZT0zNjI0OCxfZT0zNjI0OTtsZXQgWnQ7ZnVuY3Rpb24gY3Qocil7aWYoIVp0KXtjb25zdCBlPXt9O2VbZW5dPXt0ZXh0dXJlRm9ybWF0OmVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W1IsVyxrZSxDXX0sZVt0bl09e3RleHR1cmVGb3JtYXQ6dG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUixXLGtlLENdfSxlW3JuXT17dGV4dHVyZUZvcm1hdDpybixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltSLFcsa2UsQ119LGVbUV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltSLFcsa2UsQyxtbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W1IsVyxrZSxDLGxuLGRuXX0sZVtVZV09e3RleHR1cmVGb3JtYXQ6VWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt5ZSxFZV19LGVbU3NdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW1JzXT17dGV4dHVyZUZvcm1hdDp1dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbSXNdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQyxXXX0sZVtGc109e3RleHR1cmVGb3JtYXQ6dXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQ119LGVbUHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW0RzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbenNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W0VlXX0sZVtXc109e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbb3RdfSxlW1ZzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbSHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtDc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbT3NdPXt0ZXh0dXJlRm9ybWF0OmF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtCc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltDLFddfSxlW0xzXT17dGV4dHVyZUZvcm1hdDphdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltDXX0sZVtHc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbJHNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtOc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRWVdfSxlW01zXT17dGV4dHVyZUZvcm1hdDpUZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltvdF19LGVbVXNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3llXX0sZVtrc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbc3RdfSxlW1lzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW2pzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW1hzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbUixtbl19LGVbUXNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbc2VdfSxlW0tzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQyxXLFNhXX0sZVtxc109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0MsVyxSYV19LGVbSnNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQyxXXX0sZVtac109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQ119LGVbZWFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW3RhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W0VlXX0sZVtuYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbb3RdfSxlW2lhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeWVdfSxlW29hXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbc3RdfSxlW3NhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtjYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbUixkbixKdF19LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltSLGxuXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltKdF19LGVbZGFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQyxXXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQ119LGVbaGFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3BhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltzZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0p0XX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbRWVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltvdF19LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt5ZV19LGVbdmFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbRWUseWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDpVZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0NdfSxlW3dhXT17dGV4dHVyZUZvcm1hdDpubixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltGYV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0Om5uLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0lhXX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLFp0PWV9cmV0dXJuIFp0W3JdfWZ1bmN0aW9uIFBhKHIsZSl7Y29uc3QgdD1jdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBDZShyKXtjb25zdCBlPWN0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gaG4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gRGEocixlLHQsbil7aWYoIU5lKHIpKXJldHVybiBobihlKSYmaG4odCk7Y29uc3QgaT1jdChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE5hKHIpe2NvbnN0IGU9Y3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE1hKHIsZSx0KXtyZXR1cm4gTWUoZSk/VnQoZSk6dHx8Un1mdW5jdGlvbiBmdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09b2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBTZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoVHMsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKEFzLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh3cyxlLmZsaXBZKX1mdW5jdGlvbiBwbihyKXtyLnBpeGVsU3RvcmVpKHF0LDQpLE5lKHIpJiYoci5waXhlbFN0b3JlaShzbiwwKSxyLnBpeGVsU3RvcmVpKGFuLDApLHIucGl4ZWxTdG9yZWkodW4sMCksci5waXhlbFN0b3JlaShjbiwwKSxyLnBpeGVsU3RvcmVpKGZuLDApKX1mdW5jdGlvbiBVYShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsUXQsbi5taW5NYWcpLHQuY2FsbChyLGUsS3Qsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxRdCxuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsS3Qsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsbnQsbi53cmFwKSx0LmNhbGwocixlLGl0LG4ud3JhcCksKGU9PT1oZXx8em8ocixlKSkmJnQuY2FsbChyLGUsb24sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxvbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLG50LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsaXQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUsZ3Msbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLGJzLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSx2cyxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSxFcyxuLm1heExldmVsKX1mdW5jdGlvbiB5bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLFVhKHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24ga2Eocil7cmV0dXJuIHI9cnx8bmUudGV4dHVyZUNvbG9yLE1lKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gZXIocixlLHQsbixpLG8pe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxEYShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1OYShvKT9tczpkcztyLnRleFBhcmFtZXRlcmkocyxRdCxhKSxyLnRleFBhcmFtZXRlcmkocyxLdCxhKSxyLnRleFBhcmFtZXRlcmkocyxudCxydCksci50ZXhQYXJhbWV0ZXJpKHMsaXQscnQpfX1mdW5jdGlvbiBPZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB0cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGhzLHBzLHlzLF9zLHhzXX1mdW5jdGlvbiBycihyLGUpe2NvbnN0IG49dHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gX24ocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj1DZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxoPW4udHlwZXx8Zi50eXBlO2lmKFNlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1vZSl7Y29uc3QgeT10LndpZHRoLHg9dC5oZWlnaHQ7bGV0IGwsZztpZih5LzY9PT14KWw9eCxnPVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZih4LzY9PT15KWw9eSxnPVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT14LzIpbD15LzMsZz1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09eC8zKWw9eS8yLGc9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVpyKCk7RT8oRS5jYW52YXMud2lkdGg9bCxFLmNhbnZhcy5oZWlnaHQ9bCxzPWwsYT1sLHJyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBJPWdbdi5uZHgqMiswXSpsLEQ9Z1t2Lm5keCoyKzFdKmw7RS5kcmF3SW1hZ2UodCxJLEQsbCxsLDAsMCxsLGwpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQsaCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1sLGE9bCxycihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgST1nW3YubmR4KjIrMF0qbCxEPWdbdi5uZHgqMisxXSpsO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGwsbCwwLGQsaCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEksRCxsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7U2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsZCxoLEcpLE9lKG4pJiZlcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1oZXx8aT09PXBlKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLHg9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbD14L3k7aWYobCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCBnPXQud2lkdGg9PT14PzE6MCxFPXQuaGVpZ2h0PT09eD8xOjA7ci5waXhlbFN0b3JlaShxdCwxKSxyLnBpeGVsU3RvcmVpKHNuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoYW4sMCksci5waXhlbFN0b3JlaShmbiwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxkLGgsbnVsbCk7Zm9yKGxldCB2PTA7djxsOysrdil7Y29uc3QgST12KnkqZyxEPXYqeSpFO3IucGl4ZWxTdG9yZWkodW4sSSksci5waXhlbFN0b3JlaShjbixEKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LHkseSwxLGQsaCx0KX1wbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxkLGgsdCk7T2UobikmJmVyKHIsZSxuLHMsYSx1KSx5bihyLGUsbil9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gQ2Eocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIE9hKHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFDYShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEJhKHIsZSx0KXt0PXR8fEJlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm5lLmNyb3NzT3JpZ2luLGU9T2EocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VnIodSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24geG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBucihyLGUsdCl7cmV0dXJuIHhuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6QmEocixlLHQpfWZ1bmN0aW9uIGlyKHIsZSx0KXt0PXR8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9a2EodC5jb2xvcik7aWYobj09PW9lKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKFh0K28sMCxGLDEsMSwwLEYsUixpKTtlbHNlIG49PT1oZXx8bj09PXBlP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsUixpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixSLGkpfWZ1bmN0aW9uIExhKHIsZSx0LG4pe3JldHVybiBuPW58fEJlLHQ9dHx8bmUudGV4dHVyZU9wdGlvbnMsaXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxucih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooX24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gR2EocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPUNlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxSLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1vZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtpcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBoPTY7Y29uc3QgeT1bXSx4PXRyKHIsdCk7bGV0IGw7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gZnVuY3Rpb24odixJKXstLWgsdj95LnB1c2godik6SS53aWR0aCE9PUkuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrSS5zcmMpOihTZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxoPT09NT90cigpLmZvckVhY2goZnVuY3Rpb24oRCl7ci50ZXhJbWFnZTJEKEQsbyxzLHUsZixJKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsSSksT2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLGg9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbCl9fWw9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gbnIoRSx0LmNyb3NzT3JpZ2luLGcoeFt2XSkpfSl9ZnVuY3Rpb24gJGEocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz1DZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UixmPXQudGFyZ2V0fHxwZTtpZihmIT09aGUmJmYhPT1wZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO2lyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9aS5sZW5ndGg7Y29uc3QgaD1bXTtsZXQgeTtjb25zdCB4PXQubGV2ZWx8fDA7bGV0IGw9dC53aWR0aCxnPXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gSShEKXtyZXR1cm4gZnVuY3Rpb24oRywkKXtpZigtLWQsRyloLnB1c2goRyk7ZWxzZXtpZihTZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGw9dC53aWR0aHx8JC53aWR0aCxnPXQuaGVpZ2h0fHwkLmhlaWdodCxyLnRleEltYWdlM0QoZix4LG8sbCxnLEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBaPTA7WjxFOysrWilyLnRleFN1YkltYWdlM0QoZix4LDAsMCxaLGwsZywxLGEsdSwkKX1lbHNle2xldCBaPSQsSDsoJC53aWR0aCE9PWx8fCQuaGVpZ2h0IT09ZykmJihIPVpyKCksWj1ILmNhbnZhcyxILmNhbnZhcy53aWR0aD1sLEguY2FudmFzLmhlaWdodD1nLEguZHJhd0ltYWdlKCQsMCwwLGwsZykpLHIudGV4U3ViSW1hZ2UzRChmLHgsMCwwLEQsbCxnLDEsYSx1LFopLEgmJlo9PT1ILmNhbnZhcyYmKEguY2FudmFzLndpZHRoPTAsSC5jYW52YXMuaGVpZ2h0PTApfU9lKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKGgubGVuZ3RoP2g6dm9pZCAwLGUseSl9fXk9aS5tYXAoZnVuY3Rpb24oRCxHKXtyZXR1cm4gbnIoRCx0LmNyb3NzT3JpZ2luLEkoRykpfSl9ZnVuY3Rpb24gemEocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8RixkPUNlKGYpLGg9bi5mb3JtYXR8fGQuZm9ybWF0LHk9bi50eXBlfHxNYShyLHQsZC50eXBlKTtpZihNZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPVdyKHkpO3Q9bmV3IEUodCl9Y29uc3QgeD1QYShmLHkpLGw9dC5ieXRlTGVuZ3RoL3g7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrSnIocixoKTtsZXQgZztpZihpPT09aGV8fGk9PT1wZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChsKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitsO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KGc9ZnQocixpLHMsYSxsL28pLHM9Zy53aWR0aCxhPWcuaGVpZ2h0KTpzJiYoIW98fCFhKT8oZz1mdChyLGksbyxhLGwvcyksbz1nLndpZHRoLGE9Zy5oZWlnaHQpOihnPWZ0KHIsaSxvLHMsbC9hKSxvPWcud2lkdGgscz1nLmhlaWdodCk7ZWxzZSBnPWZ0KHIsaSxvLHMsbCksbz1nLndpZHRoLHM9Zy5oZWlnaHQ7aWYocG4ociksci5waXhlbFN0b3JlaShxdCxuLnVucGFja0FsaWdubWVudHx8MSksU2UocixuKSxpPT09b2Upe2NvbnN0IEU9eC90LkJZVEVTX1BFUl9FTEVNRU5ULHY9bC82KkU7cnIocixuKS5mb3JFYWNoKEk9Pntjb25zdCBEPXYqSS5uZHgsRz10LnN1YmFycmF5KEQsRCt2KTtyLnRleEltYWdlMkQoSS5mYWNlLHUsZixvLHMsMCxoLHksRyl9KX1lbHNlIGk9PT1oZXx8aT09PXBlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLGgseSx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAsaCx5LHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTp5fX1mdW5jdGlvbiBXYShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxGLHM9Q2UobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihTZShyLHQpLG49PT1vZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChYdCtmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWhlfHxuPT09cGU/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBnbihyLGUsdCl7dD10fHxCZSxlPWV8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8aWU7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8RjtyLmJpbmRUZXh0dXJlKGksbiksaT09PW9lJiYoci50ZXhQYXJhbWV0ZXJpKGksbnQscnQpLHIudGV4UGFyYW1ldGVyaShpLGl0LHJ0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpTGEocixuLGUsdCk7ZWxzZSBpZihNZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8TWUodVswXSkpKXtjb25zdCBmPXphKHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8eG4odVswXSkpP2k9PT1vZT9HYShyLG4sZSx0KTokYShyLG4sZSx0KTooX24ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgV2EocixuLGUpO3JldHVybiBPZShlKSYmZXIocixuLGUsbyxzLGEpLHluKHIsbixlKSxufWNvbnN0IG9yPVZyO2Z1bmN0aW9uIGJuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IGx0PTMzOTg0LGR0PTM0OTYyLFZhPTM0OTYzLEhhPTM1NzEzLFlhPTM1NzE0LGphPTM1NjMyLFhhPTM1NjMzLFFhPTM1OTgxLHZuPTM1NzE4LEthPTM1NzIxLHFhPTM1OTcxLEphPTM1MzgyLFphPTM1Mzk2LGV1PTM1Mzk4LHR1PTM1MzkyLHJ1PTM1Mzk1LG10PTUxMjYsRW49MzU2NjQsVG49MzU2NjUsQW49MzU2NjYsc3I9NTEyNCx3bj0zNTY2NyxTbj0zNTY2OCxSbj0zNTY2OSxJbj0zNTY3MCxGbj0zNTY3MSxQbj0zNTY3MixEbj0zNTY3MyxObj0zNTY3NCxNbj0zNTY3NSxVbj0zNTY3NixudT0zNTY3OCxpdT0zNTY4MCxvdT0zNTY3OSxzdT0zNTY4MixhdT0zNTY4NSx1dT0zNTY4NixjdT0zNTY4NyxmdT0zNTY4OCxsdT0zNTY4OSxkdT0zNTY5MCxtdT0zNjI4OSxodT0zNjI5MixwdT0zNjI5Myxhcj01MTI1LGtuPTM2Mjk0LENuPTM2Mjk1LE9uPTM2Mjk2LHl1PTM2Mjk4LF91PTM2Mjk5LHh1PTM2MzAwLGd1PTM2MzAzLGJ1PTM2MzA2LHZ1PTM2MzA3LEV1PTM2MzA4LFR1PTM2MzExLGh0PTM1NTMscHQ9MzQwNjcsdXI9MzI4NzkseXQ9MzU4NjYsYj17fTtmdW5jdGlvbiBCbihyLGUpe3JldHVybiBiW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBBdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiB3dShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gU3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIFJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBJdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gTG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gR24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uICRuKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiB6bihyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gV24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIEZ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBQdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIER1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gTnUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBNdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIFV1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBrdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIE91KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEx1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEd1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uICR1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHp1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEIocixlLHQsbil7Y29uc3QgaT1CbihyLGUpO3JldHVybiBOZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhOyFvfHxIdChyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gTChyLGUsdCxuLGkpe2NvbnN0IG89Qm4ocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE5lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShsdCtzW2ZdKTtsZXQgZCxoO0h0KHIsdSk/KGQ9dSxoPW51bGwpOihkPXUudGV4dHVyZSxoPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGgpLHIuYmluZFRleHR1cmUobyxkKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUobHQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fWJbbXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOkF1LGFycmF5U2V0dGVyOnd1fSxiW0VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTdSxjb2xzOjJ9LGJbVG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpSdSxjb2xzOjN9LGJbQW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpJdSxjb2xzOjR9LGJbc3JdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpMbixhcnJheVNldHRlcjpHbn0sYlt3bl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOiRuLGNvbHM6Mn0sYltTbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbUm5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6V24sY29sczo0fSxiW2FyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkZ1LGFycmF5U2V0dGVyOlB1fSxiW2tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkR1LGNvbHM6Mn0sYltDbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6TnUsY29sczozfSxiW09uXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpNdSxjb2xzOjR9LGJbSW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6TG4sYXJyYXlTZXR0ZXI6R259LGJbRm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6JG4sY29sczoyfSxiW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbRG5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlduLGNvbHM6NH0sYltObl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOlV1LHJvd3M6Mixjb2xzOjJ9LGJbTW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjprdSxyb3dzOjMsY29sczozfSxiW1VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6Q3Uscm93czo0LGNvbHM6NH0sYlthdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk91LHJvd3M6Mixjb2xzOjN9LGJbdXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpMdSxyb3dzOjIsY29sczo0fSxiW2N1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6QnUscm93czozLGNvbHM6Mn0sYltmdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOiR1LHJvd3M6Myxjb2xzOjR9LGJbbHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpHdSxyb3dzOjQsY29sczoyfSxiW2R1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6enUscm93czo0LGNvbHM6M30sYltudV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbaXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW291XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYltzdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbbXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2h1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH0sYltwdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbeXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Omh0fSxiW191XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYlt4dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbZ3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2J1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpodH0sYlt2dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6dXJ9LGJbRXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW1R1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH07ZnVuY3Rpb24gX3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoZHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxtdCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxzcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB4dChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxhcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBjcihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoZHQsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fG10LGQ9Ylt1XS5zaXplKnMsaD1vLm5vcm1hbGl6ZXx8ITEseT1vLm9mZnNldHx8MCx4PWQvaTtmb3IobGV0IGw9MDtsPGk7KytsKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZStsKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZStsLGEsdSxoLGQseSt4KmwpLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbCxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbbXRdPXtzaXplOjQsc2V0dGVyOl90fSxQW0VuXT17c2l6ZTo4LHNldHRlcjpfdH0sUFtUbl09e3NpemU6MTIsc2V0dGVyOl90fSxQW0FuXT17c2l6ZToxNixzZXR0ZXI6X3R9LFBbc3JdPXtzaXplOjQsc2V0dGVyOmFlfSxQW3duXT17c2l6ZTo4LHNldHRlcjphZX0sUFtTbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW1JuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYXJdPXtzaXplOjQsc2V0dGVyOnh0fSxQW2tuXT17c2l6ZTo4LHNldHRlcjp4dH0sUFtDbl09e3NpemU6MTIsc2V0dGVyOnh0fSxQW09uXT17c2l6ZToxNixzZXR0ZXI6eHR9LFBbSW5dPXtzaXplOjQsc2V0dGVyOmFlfSxQW0ZuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtQbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW0RuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbTm5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LFBbTW5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LFBbVW5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBXdT0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIFZ1KHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoV3UpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGQ9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGRdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgVm49L15bIFx0XSpcbi87ZnVuY3Rpb24gSG4ocil7bGV0IGU9MDtyZXR1cm4gVm4udGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShWbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIEh1KHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gWXUocixlLHQsbil7aWYobj1ufHxvciwhci5nZXRTaGFkZXJQYXJhbWV0ZXIodCxIYSkpe2NvbnN0IG89ci5nZXRTaGFkZXJJbmZvTG9nKHQpLHtsaW5lT2Zmc2V0OnMsc2hhZGVyU291cmNlOmF9PUhuKHIuZ2V0U2hhZGVyU291cmNlKHQpKSx1PWAke1Z1KGEsbyxzKX0KRXJyb3IgY29tcGlsaW5nICR7SnIocixlKX06ICR7b31gO3JldHVybiBuKHUpLHV9cmV0dXJuIiJ9ZnVuY3Rpb24gZnIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2NvbnN0IGY9cjt0PWYuZXJyb3JDYWxsYmFjayxyPWYuYXR0cmliTG9jYXRpb25zLG49Zi50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLGk9Zi50cmFuc2Zvcm1GZWVkYmFja01vZGUsbz1mLmNhbGxiYWNrfWNvbnN0IHM9dHx8b3IsYT1bXSx1PXtlcnJvckNhbGxiYWNrKGYsLi4uZCl7YS5wdXNoKGYpLHMoZiwuLi5kKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTppLGNhbGxiYWNrOm8sZXJyb3JzOmF9O3tsZXQgZj17fTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihkLGgpe2ZbZF09ZT9lW2hdOmh9KTpmPXJ8fHt9LHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3QganU9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gWHUocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gamE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIFhhfWZ1bmN0aW9uIFF1KHIsZSx0KXtjb25zdCBuPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBpIG9mIG4pdC5oYXMoaSkmJnIuZGVsZXRlU2hhZGVyKGkpO3IuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBLdT0ocj0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHIpKTtmdW5jdGlvbiBxdShyLGUsdCl7Y29uc3Qgbj1yLmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOmksdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpvLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzfT1mcih0KTtmb3IobGV0IGE9MDthPGUubGVuZ3RoOysrYSl7bGV0IHU9ZVthXTtpZih0eXBlb2YgdT09InN0cmluZyIpe2NvbnN0IGY9Ym4odSksZD1mP2YudGV4dDp1O2xldCBoPXJbanVbYV1dO2YmJmYudHlwZSYmKGg9WHUocixmLnR5cGUpfHxoKSx1PXIuY3JlYXRlU2hhZGVyKGgpLHIuc2hhZGVyU291cmNlKHUsSG4oZCkuc2hhZGVyU291cmNlKSxyLmNvbXBpbGVTaGFkZXIodSksci5hdHRhY2hTaGFkZXIobix1KX19T2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW2EsdV0pPT5yLmJpbmRBdHRyaWJMb2NhdGlvbihuLHUsYSkpO3tsZXQgYT1vO2EmJihhLmF0dHJpYnMmJihhPWEuYXR0cmlicyksQXJyYXkuaXNBcnJheShhKXx8KGE9T2JqZWN0LmtleXMoYSkpLHIudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLGEsc3x8UWEpKX1yZXR1cm4gci5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIEp1KHIsZSx0LG4saSl7Y29uc3Qgbz1mcih0LG4saSkscz1uZXcgU2V0KGUpLGE9cXUocixlLG8pO2Z1bmN0aW9uIHUoZixkKXtjb25zdCBoPWVjKGYsZCxvLmVycm9yQ2FsbGJhY2spO3JldHVybiBoJiZRdShmLGQscyksaH1pZihvLmNhbGxiYWNrKXtadShyLGEpLnRoZW4oKCk9Pntjb25zdCBmPXUocixhKTtvLmNhbGxiYWNrKGYsZj92b2lkIDA6YSl9KTtyZXR1cm59cmV0dXJuIHUocixhKT92b2lkIDA6YX1hc3luYyBmdW5jdGlvbiBadShyLGUpe2NvbnN0IHQ9ci5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49dD8obyxzKT0+by5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsdC5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgaT0wO2RvIGF3YWl0IEt1KGkpLGk9MWUzLzYwO3doaWxlKCFuKHIsZSkpfWZ1bmN0aW9uIGVjKHIsZSx0KXtpZih0PXR8fG9yLCFyLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxZYSkpe2NvbnN0IGk9ci5nZXRQcm9ncmFtSW5mb0xvZyhlKTt0KGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7aX1gKTtjb25zdCBzPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChhPT5ZdShyLHIuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsci5TSEFERVJfVFlQRSksYSx0KSk7cmV0dXJuYCR7aX0KJHtzLmZpbHRlcihhPT5hKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gdGMocixlLHQsbixpKXtyZXR1cm4gSnUocixlLHQsbixpKX1mdW5jdGlvbiBZbihyKXtjb25zdCBlPXIubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCByYz0vKFwufFxbfF18XHcrKS9nLG5jPXI9PnI+PSIwIiYmcjw9IjkiO2Z1bmN0aW9uIGljKHIsZSx0LG4pe2NvbnN0IGk9ci5zcGxpdChyYykuZmlsdGVyKGE9PmEhPT0iIik7bGV0IG89MCxzPSIiO2Zvcig7Oyl7Y29uc3QgYT1pW28rK107cys9YTtjb25zdCB1PW5jKGFbMF0pLGY9dT9wYXJzZUludChhKTphO2lmKHUmJihzKz1pW28rK10pLG89PT1pLmxlbmd0aCl7dFtmXT1lO2JyZWFrfWVsc2V7Y29uc3QgaD1pW28rK10seT1oPT09IlsiLHg9dFtmXXx8KHk/W106e30pO3RbZl09eCx0PXgsbltzXT1uW3NdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oZyl7am4obCxnKX19KHgpLHMrPWh9fX1mdW5jdGlvbiBvYyhyLGUpe2xldCB0PTA7ZnVuY3Rpb24gbihhLHUsZil7Y29uc3QgZD11Lm5hbWUuZW5kc1dpdGgoIlswXSIpLGg9dS50eXBlLHk9YltoXTtpZigheSl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2gudG9TdHJpbmcoMTYpfWApO2xldCB4O2lmKHkuYmluZFBvaW50KXtjb25zdCBsPXQ7dCs9dS5zaXplLGQ/eD15LmFycmF5U2V0dGVyKHIsaCxsLGYsdS5zaXplKTp4PXkuc2V0dGVyKHIsaCxsLGYsdS5zaXplKX1lbHNlIHkuYXJyYXlTZXR0ZXImJmQ/eD15LmFycmF5U2V0dGVyKHIsZik6eD15LnNldHRlcihyLGYpO3JldHVybiB4LmxvY2F0aW9uPWYseH1jb25zdCBpPXt9LG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSx2bik7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtpZihZbih1KSljb250aW51ZTtsZXQgZj11Lm5hbWU7Zi5lbmRzV2l0aCgiWzBdIikmJihmPWYuc3Vic3RyKDAsZi5sZW5ndGgtMykpO2NvbnN0IGQ9ci5nZXRVbmlmb3JtTG9jYXRpb24oZSx1Lm5hbWUpO2lmKGQpe2NvbnN0IGg9bihlLHUsZCk7aVtmXT1oLGljKGYsaCxvLGkpfX1yZXR1cm4gaX1mdW5jdGlvbiBzYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLGkpO3Rbby5uYW1lXT17aW5kZXg6aSx0eXBlOm8udHlwZSxzaXplOm8uc2l6ZX19cmV0dXJuIHR9ZnVuY3Rpb24gYWMocixlKXtjb25zdCB0PXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHZuKSxuPVtdLGk9W107Zm9yKGxldCBhPTA7YTx0OysrYSl7aS5wdXNoKGEpLG4ucHVzaCh7fSk7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtuW2FdLm5hbWU9dS5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihhKXtjb25zdCB1PWFbMF0sZj1hWzFdO3IuZ2V0QWN0aXZlVW5pZm9ybXMoZSxpLHJbdV0pLmZvckVhY2goZnVuY3Rpb24oZCxoKXtuW2hdW2ZdPWR9KX0pO2NvbnN0IG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxKYSk7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxhKSxmPXtpbmRleDpyLmdldFVuaWZvcm1CbG9ja0luZGV4KGUsdSksdXNlZEJ5VmVydGV4U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxaYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLGV1KSxzaXplOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx0dSksdW5pZm9ybUluZGljZXM6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHJ1KX07Zi51c2VkPWYudXNlZEJ5VmVydGV4U2hhZGVyfHxmLnVzZWRCeUZyYWdtZW50U2hhZGVyLG9bdV09Zn1yZXR1cm57YmxvY2tTcGVjczpvLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uIGpuKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVt0XSk6am4oclt0XSxlW3RdKX19ZnVuY3Rpb24gWG4ociwuLi5lKXtjb25zdCB0PXIudW5pZm9ybVNldHRlcnN8fHIsbj1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPWVbaV07aWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3Qgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7KythKVhuKHQsb1thXSl9ZWxzZSBmb3IoY29uc3QgcyBpbiBvKXtjb25zdCBhPXRbc107YSYmYShvW3NdKX19fWZ1bmN0aW9uIHVjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLEthKTtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPXIuZ2V0QWN0aXZlQXR0cmliKGUsaSk7aWYoWW4obykpY29udGludWU7Y29uc3Qgcz1yLmdldEF0dHJpYkxvY2F0aW9uKGUsby5uYW1lKSxhPVBbby50eXBlXSx1PWEuc2V0dGVyKHIscyxhKTt1LmxvY2F0aW9uPXMsdFtvLm5hbWVdPXV9cmV0dXJuIHR9ZnVuY3Rpb24gY2MocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07biYmbihlW3RdKX19ZnVuY3Rpb24gZmMocixlLHQpe3QudmVydGV4QXJyYXlPYmplY3Q/ci5iaW5kVmVydGV4QXJyYXkodC52ZXJ0ZXhBcnJheU9iamVjdCk6KGNjKGUuYXR0cmliU2V0dGVyc3x8ZSx0LmF0dHJpYnMpLHQuaW5kaWNlcyYmci5iaW5kQnVmZmVyKFZhLHQuaW5kaWNlcykpfWZ1bmN0aW9uIFFuKHIsZSl7Y29uc3QgdD1vYyhyLGUpLG49dWMocixlKSxpPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6dCxhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBOZShyKSYmKGkudW5pZm9ybUJsb2NrU3BlYz1hYyhyLGUpLGkudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXNjKHIsZSkpLGl9Y29uc3QgbGM9L1xzfHt8fXw7LztmdW5jdGlvbiBkYyhyLGUsdCxuLGkpe2NvbnN0IG89ZnIodCxuLGkpLHM9W107aWYoZT1lLm1hcChmdW5jdGlvbihmKXtpZighbGMudGVzdChmKSl7Y29uc3QgZD1ibihmKTtpZihkKWY9ZC50ZXh0O2Vsc2V7Y29uc3QgaD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke2Z9YDtvLmVycm9yQ2FsbGJhY2soaCkscy5wdXNoKGgpfX1yZXR1cm4gZn0pLHMubGVuZ3RoKXJldHVybiBIdShvLCIiKTtjb25zdCBhPW8uY2FsbGJhY2s7YSYmKG8uY2FsbGJhY2s9KGYsZCk9PnthKGYsZj92b2lkIDA6UW4ocixkKSl9KTtjb25zdCB1PXRjKHIsZSxvKTtyZXR1cm4gdT9RbihyLHUpOm51bGx9Y29uc3QgbWM9NCxLbj01MTIzO2Z1bmN0aW9uIGhjKHIsZSx0LG4saSxvKXt0PXQ9PT12b2lkIDA/bWM6dDtjb25zdCBzPWUuaW5kaWNlcyxhPWUuZWxlbWVudFR5cGUsdT1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtpPWk9PT12b2lkIDA/MDppLGF8fHM/byE9PXZvaWQgMD9yLmRyYXdFbGVtZW50c0luc3RhbmNlZCh0LHUsYT09PXZvaWQgMD9LbjplLmVsZW1lbnRUeXBlLGksbyk6ci5kcmF3RWxlbWVudHModCx1LGE9PT12b2lkIDA/S246ZS5lbGVtZW50VHlwZSxpKTpvIT09dm9pZCAwP3IuZHJhd0FycmF5c0luc3RhbmNlZCh0LGksdSxvKTpyLmRyYXdBcnJheXModCxpLHUpfWNvbnN0IHFuPTM2MTYwLGd0PTM2MTYxLHBjPTM1NTMseWM9NTEyMSxfYz02NDAyLHhjPTY0MDgsZ2M9MzMxOTAsYmM9MzYwMTIsdmM9MzUwNTYsRWM9MzYwMTMsVGM9MzI4NTQsQWM9MzI4NTUsd2M9MzYxOTQsSm49MzMxODksWm49NjQwMSxlaT0zNjE2OCxscj0zNDA0MSxkcj0zNjA2NCxidD0zNjA5Nix0aT0zNjEyOCxtcj0zMzMwNixocj0zMzA3MSxwcj05NzI5LFNjPVt7Zm9ybWF0OnhjLHR5cGU6eWMsbWluOnByLHdyYXA6aHJ9LHtmb3JtYXQ6bHJ9XSxWPXt9O1ZbbHJdPW1yLFZbWm5dPXRpLFZbZWldPXRpLFZbX2NdPWJ0LFZbSm5dPWJ0LFZbZ2NdPWJ0LFZbYmNdPWJ0LFZbdmNdPW1yLFZbRWNdPW1yO2Z1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIFZbcl18fFZbZV19Y29uc3QgdWU9e307dWVbVGNdPSEwLHVlW0FjXT0hMCx1ZVt3Y109ITAsdWVbbHJdPSEwLHVlW0puXT0hMCx1ZVtabl09ITAsdWVbZWldPSEwO2Z1bmN0aW9uIEljKHIpe3JldHVybiB1ZVtyXX1jb25zdCBGYz0zMjtmdW5jdGlvbiBQYyhyKXtyZXR1cm4gcj49ZHImJnI8ZHIrRmN9ZnVuY3Rpb24gdnQocixlLHQsbil7Y29uc3QgaT1xbixvPXIuY3JlYXRlRnJhbWVidWZmZXIoKTtyLmJpbmRGcmFtZWJ1ZmZlcihpLG8pLHQ9dHx8ci5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxTYztjb25zdCBzPVtdLGE9e2ZyYW1lYnVmZmVyOm8sYXR0YWNobWVudHM6W10sd2lkdGg6dCxoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1LGYpe2xldCBkPXUuYXR0YWNobWVudDtjb25zdCBoPXUuc2FtcGxlcyx5PXUuZm9ybWF0O2xldCB4PXUuYXR0YWNobWVudFBvaW50fHxSYyh5LHUuaW50ZXJuYWxGb3JtYXQpO2lmKHh8fCh4PWRyK2YpLFBjKHgpJiZzLnB1c2goeCksIWQpaWYoaCE9PXZvaWQgMHx8SWMoeSkpZD1yLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHIuYmluZFJlbmRlcmJ1ZmZlcihndCxkKSxoPjE/ci5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ3QsaCx5LHQsbik6ci5yZW5kZXJidWZmZXJTdG9yYWdlKGd0LHksdCxuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSx1KTtsLndpZHRoPXQsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxwcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fHByLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGQ9Z24ocixsKX1pZigkbyhyLGQpKXIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoaSx4LGd0LGQpO2Vsc2UgaWYoSHQocixkKSl1LmxheWVyIT09dm9pZCAwP3IuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoaSx4LGQsdS5sZXZlbHx8MCx1LmxheWVyKTpyLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGkseCx1LnRhcmdldHx8cGMsZCx1LmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTthLmF0dGFjaG1lbnRzLnB1c2goZCl9KSxyLmRyYXdCdWZmZXJzJiZyLmRyYXdCdWZmZXJzKHMpLGF9ZnVuY3Rpb24gRGMocixlLHQpe3Q9dHx8cW4sZT8oci5iaW5kRnJhbWVidWZmZXIodCxlLmZyYW1lYnVmZmVyKSxyLnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHIuYmluZEZyYW1lYnVmZmVyKHQsbnVsbCksci52aWV3cG9ydCgwLDAsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gUyhyLGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6Z24ocix7c3JjOmUsd3JhcDpyLkNMQU1QX1RPX0VER0V9KX1jb25zdCByaT0yO2NsYXNzIHhle2NvbnN0cnVjdG9yKGUpe3AodGhpcywiaWQiLCJfIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsImZiaSIpO3AodGhpcywib3B0aW9ucyIpO3AodGhpcywicHJvZ3JhbUluZm8iKTtwKHRoaXMsImJ1ZmZlckluZm8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJsYXN0UnVuIik7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89ZGModGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89bHModGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe3ZhciBpLG8scyxhLHUsZjsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Zm9yKGNvbnN0IGQgaW4gZSl0eXBlb2YgZVtkXT09ImZ1bmN0aW9uIiYmKChzPXRoaXMucHJvZmlsZXIpPT1udWxsfHxzLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApLGVbZF09ZVtkXSgpLChhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke2R9YCkpOyh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxmYyh0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFhuKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRGModGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksaGModGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWV9fXZhciBOYz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLE1jPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVWMgZXh0ZW5kcyB4ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE5jK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1jfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIga2M9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLENjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHlyIGV4dGVuZHMgeGV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2N9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENjfX1jbGFzcyBfcntjb25zdHJ1Y3Rvcigpe3AodGhpcywic3RlcHMiLFtdKTtwKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4saTsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdGVwcylvLnByZXZlbnRSZXNpemV8fG8ucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgeHIgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y29uc3QgT2M9MTAsQmM9MixMYz04O2NsYXNzIEdjIGV4dGVuZHMgeHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBVYyh7Li4uaSxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3Qgbz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBpPXRoaXMucmFkaXVzPk9jP0xjOkJjO3JldHVybnt3aWR0aDpNYXRoLm1heChyaSx0L2kpLGhlaWdodDpNYXRoLm1heChyaSxuL2kpfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBpPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChpLndpZHRoLGkuaGVpZ2h0KX19Y2xhc3MgbmkgZXh0ZW5kcyB4cntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IHlyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyAkYyBleHRlbmRzIG5pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtwKHRoaXMsImZyYW1lUmVhZGVyIik7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCEwKX1zZXQgaW5wdXRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO3QhPW51bGwmJnQudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpLHQudmFsdWUuY2xvc2UoKSl9fXZhciB6Yz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLFdjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsZ3I9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShncnx8e30pO2NsYXNzIGlpIGV4dGVuZHMgeGV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Yyt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBXY31jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBWYyBleHRlbmRzIHhye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBpaSh7Li4uaSxyYWRpdXM6bix0eXBlOmdyLkdBVVNTSUFOfSkscz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOlModCxvLm91dHB1dCksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyBiciBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO3AodGhpcywiZmJpMiIpO3RoaXMuZmJpMj12dCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPXZ0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgSGM9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLFljPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgamMgZXh0ZW5kcyBicntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBIY31nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWN9fXZhciBYYz1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsUWM9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyBLYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFhjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBRY319dmFyIHFjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsSmM9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBaYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHFjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBKY319dmFyIGVmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsdGY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyByZiBleHRlbmRzIGJye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0Zn19dmFyIG5mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxvZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIHNmIGV4dGVuZHMgYnJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gbmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIG9mfX1jbGFzcyBhZiBleHRlbmRzIF9ye2NvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtwKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO3RoaXMuY29udGV4dD10O2NvbnN0IG89e2NvbnRleHQ6dCxoZWlnaHQ6aSx3aWR0aDpufSxzPW5ldyBqYyhvKSxhPW5ldyBpaSh7Li4ubyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSksdT1uZXcgc2YobyksZj1uZXcgcmYobyksZD1uZXcgWmMobyksaD1uZXcgS2Moey4uLm99KSx5PS42Nix4PTY0MCxsPTQ4MCxnPTI1NixFPTE0NDtsZXQgdj0xO3YqPU1hdGgubWF4KHgvZyxsL0UpO2NvbnN0IEk9TWF0aC5tYXgoMSxNYXRoLnNxcnQodikqeSksRD0xL3gsRz0xL2w7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OlModCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpTKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OlModCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aCxnZXRVbmlmb3JtczooKT0+KHtpbnB1dF9mcmFtZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W0QsR10sc3RlcDpJLHJhZGl1czp2LG9mZnNldDpJPjE/SSouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KEQsRykqdixzaWdtYV9jb2xvcjouMX0pfSksdGhpcy5vdXRwdXQ9aC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fX12YXIgdWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsY2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBmZiBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBjZn19Y2xhc3MgbGYgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBmZih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1jbGFzcyBkZntjb25zdHJ1Y3RvcihlKXtwKHRoaXMsInJlc2l6ZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJjb250ZXh0Iik7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgbGYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBtZntjb25zdHJ1Y3RvcihlLHQpe3AodGhpcywiaW1wcm92ZU1hc2tTZWdtZW50YXRpb24iKTtwKHRoaXMsImJhY2tncm91bmRSZXNpemVyIik7cCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImJhY2tncm91bmRWaWRlbyIpO3AodGhpcywicHJvZmlsZXIiKTtwKHRoaXMsImFjdGl2ZVBpcGVsaW5lIik7cCh0aGlzLCJjYW52YXMiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsInZpcnR1YWxCR0ltYWdlIik7dGhpcy5pZD1lLHRoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9dC5mb3JlZ3JvdW5kV2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXQuZm9yZWdyb3VuZEhlaWdodCx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uPW5ldyBhZih0aGlzLmNvbnRleHQsdC5tYXNrV2lkdGgsdC5tYXNrSGVpZ2h0KSx0aGlzLmJhY2tncm91bmRJbWFnZT1uZXcgbmkodGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRWaWRlbz1uZXcgJGModGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyPW5ldyBkZih7d2lkdGg6dC5mb3JlZ3JvdW5kV2lkdGgsaGVpZ2h0OnQuZm9yZWdyb3VuZEhlaWdodH0pfXNldEJhY2tncm91bmRPcHRpb25zKGUpe3N3aXRjaChlLnRyYW5zZm9ybWVyVHlwZSl7Y2FzZSJCYWNrZ3JvdW5kQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2ModGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlNpbGhvdWV0dGVCbHVyIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPW5ldyBWYyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiVmlkZW9CYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZFZpZGVvO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOnRoaXMuYWN0aXZlUGlwZWxpbmU9dGhpcy5iYWNrZ3JvdW5kSW1hZ2U7YnJlYWt9dGhpcy5vcHRpb25zPWV9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbik9PW51bGx8fHQuc2V0T3B0aW9ucyhlKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW8uaW5wdXRWaWRlbz1lfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3RoaXMudmlydHVhbEJHSW1hZ2U9ZSx0aGlzLmJhY2tncm91bmRJbWFnZS5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCB0aGlzLmJhY2tncm91bmRSZXNpemVyLnByb2Nlc3MoZSl9YXN5bmMgcHJvY2VzcyhlLHQpe3ZhciBuLGksbyxzLGEsdSxmO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7Y29uc3QgZD1gWyR7dGhpcy5pZH1dIGJhY2tncm91bmQtZmlsdGVyYDsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChkKTtsZXQgaD10OygoKGk9dGhpcy5vcHRpb25zKT09bnVsbD92b2lkIDA6aS5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmKChvPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSk9PT0iUFJFQ0lTRSJ8fCEoKHM9dGhpcy5vcHRpb25zKSE9bnVsbCYmcy5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmdGhpcy5hY3RpdmVQaXBlbGluZS5wcmVjaXNlTWFza0VuYWJsZWQpJiYodGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRJZCh0aGlzLmlkKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksaD10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRJZCh0aGlzLmlkKSx0aGlzLmFjdGl2ZVBpcGVsaW5lLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnNldERhdGEoZSxoKSwodT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8dS5ydW4oKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGQpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1hc3luYyBwcm9maWxlKGUpe2NvbnN0IHQ9bmV3IFBvKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgR3IoZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1nZXRCbHVyU2l6ZShlPVplLkxvdyl7c3dpdGNoKGUpe2Nhc2UgWmUuTG93OnJldHVybiA1O2Nhc2UgWmUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBoZj1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlPCJ1Ij9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsbSl7bj1jLGk9bX0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24oYyxtKXt0aHJvdyBtfSxmPSEwLGQ9IiI7ZnVuY3Rpb24gaChjKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShjLGQpOmQrY312YXIgeTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGQ9ciksZC5pbmRleE9mKCJibG9iOiIpIT09MD9kPWQuc3Vic3RyKDAsZC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmQ9IiI7dmFyIHg9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxsPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIGc7dC53YXNtQmluYXJ5JiYoZz10Lndhc21CaW5hcnkpO3ZhciBFPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgdixJPSExLEQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gRyhjLG0sXyl7Zm9yKHZhciBUPW0rXyxOPW07Y1tOXSYmIShOPj1UKTspKytOO2lmKE4tbT4xNiYmYy5zdWJhcnJheSYmRClyZXR1cm4gRC5kZWNvZGUoYy5zdWJhcnJheShtLE4pKTtmb3IodmFyIGs9IiI7bTxOOyl7dmFyIHc9Y1ttKytdO2lmKCEodyYxMjgpKXtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBPPWNbbSsrXSY2MztpZigodyYyMjQpPT0xOTIpe2srPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fE8pO2NvbnRpbnVlfXZhciBLPWNbbSsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfE88PDZ8Szp3PSh3JjcpPDwxOHxPPDwxMnxLPDw2fGNbbSsrXSY2Myx3PDY1NTM2KWsrPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgaGk9dy02NTUzNjtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGhpPj4xMCw1NjMyMHxoaSYxMDIzKX19cmV0dXJuIGt9ZnVuY3Rpb24gJChjLG0pe3JldHVybiBjP0coTGUsYyxtKToiIn1mdW5jdGlvbiBaKGMsbSxfKXtmb3IodmFyIFQ9MDtUPGMubGVuZ3RoOysrVClFdFttKys+PjBdPWMuY2hhckNvZGVBdChUKTtffHwoRXRbbT4+MF09MCl9ZnVuY3Rpb24gSChjLG0pe3JldHVybiBjJW0+MCYmKGMrPW0tYyVtKSxjfXZhciBzaSxFdCxMZSxZO2Z1bmN0aW9uIGFpKGMpe3NpPWMsdC5IRUFQOD1FdD1uZXcgSW50OEFycmF5KGMpLHQuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGMpLHQuSEVBUDMyPVk9bmV3IEludDMyQXJyYXkoYyksdC5IRUFQVTg9TGU9bmV3IFVpbnQ4QXJyYXkoYyksdC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShjKSx0LkhFQVBVMzI9bmV3IFVpbnQzMkFycmF5KGMpLHQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGMpLHQuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGMpfXQuSU5JVElBTF9NRU1PUlk7dmFyIEVyLHVpPVtdLGNpPVtdLGZpPVtdLHZmPTA7ZnVuY3Rpb24gRWYoKXtyZXR1cm4gRXx8dmY+MH1mdW5jdGlvbiBUZigpe2lmKHQucHJlUnVuKWZvcih0eXBlb2YgdC5wcmVSdW49PSJmdW5jdGlvbiImJih0LnByZVJ1bj1bdC5wcmVSdW5dKTt0LnByZVJ1bi5sZW5ndGg7KVNmKHQucHJlUnVuLnNoaWZ0KCkpO1RyKHVpKX1mdW5jdGlvbiBBZigpe1RyKGNpKX1mdW5jdGlvbiB3Zigpe2lmKHQucG9zdFJ1bilmb3IodHlwZW9mIHQucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKHQucG9zdFJ1bj1bdC5wb3N0UnVuXSk7dC5wb3N0UnVuLmxlbmd0aDspSWYodC5wb3N0UnVuLnNoaWZ0KCkpO1RyKGZpKX1mdW5jdGlvbiBTZihjKXt1aS51bnNoaWZ0KGMpfWZ1bmN0aW9uIFJmKGMpe2NpLnVuc2hpZnQoYyl9ZnVuY3Rpb24gSWYoYyl7ZmkudW5zaGlmdChjKX12YXIgZ2U9MCxHZT1udWxsO2Z1bmN0aW9uIEZmKGMpe2dlKyssdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpfWZ1bmN0aW9uIFBmKGMpe2lmKGdlLS0sdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpLGdlPT0wJiZHZSl7dmFyIG09R2U7R2U9bnVsbCxtKCl9fXQucHJlbG9hZGVkSW1hZ2VzPXt9LHQucHJlbG9hZGVkQXVkaW9zPXt9O2Z1bmN0aW9uIGNlKGMpe3Qub25BYm9ydCYmdC5vbkFib3J0KGMpLGM9IkFib3J0ZWQoIitjKyIpIixsKGMpLEk9ITAsYys9Ii4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBtPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYyk7dGhyb3cgaShtKSxtfXZhciBEZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24gbGkoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aChEZil9dmFyIGo7aj0idGZsaXRlLXNpbWQud2FzbSIsbGkoail8fChqPWgoaikpO2Z1bmN0aW9uIGRpKGMpe3RyeXtpZihjPT1qJiZnKXJldHVybiBuZXcgVWludDhBcnJheShnKTtpZigheSl0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2gobSl7Y2UobSl9fWZ1bmN0aW9uIE5mKCl7cmV0dXJuIWcmJmYmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChqLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihjKXtpZighYy5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2orIiciO3JldHVybiBjLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBkaShqKX0pOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZGkoail9KX1mdW5jdGlvbiBNZigpe3ZhciBjPXthOmVsfTtmdW5jdGlvbiBtKHcsTyl7dmFyIEs9dy5leHBvcnRzO3QuYXNtPUssdj10LmFzbS5xLGFpKHYuYnVmZmVyKSxFcj10LmFzbS5FLFJmKHQuYXNtLnIpLFBmKCl9RmYoKTtmdW5jdGlvbiBfKHcpe20ody5pbnN0YW5jZSl9ZnVuY3Rpb24gVCh3KXtyZXR1cm4gTmYoKS50aGVuKGZ1bmN0aW9uKE8pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShPLGMpfSkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gT30pLnRoZW4odyxmdW5jdGlvbihPKXtsKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK08pLGNlKE8pfSl9ZnVuY3Rpb24gTigpe3JldHVybiFnJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFsaShqKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKGose2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHcpe3ZhciBPPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHcsYyk7cmV0dXJuIE8udGhlbihfLGZ1bmN0aW9uKEspe3JldHVybiBsKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitLKSxsKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFQoXyl9KX0pOlQoXyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBrPXQuaW5zdGFudGlhdGVXYXNtKGMsbSk7cmV0dXJuIGt9Y2F0Y2godyl7cmV0dXJuIGwoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdyksITF9cmV0dXJuIE4oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBUcihjKXtmb3IoO2MubGVuZ3RoPjA7KXt2YXIgbT1jLnNoaWZ0KCk7aWYodHlwZW9mIG09PSJmdW5jdGlvbiIpe20odCk7Y29udGludWV9dmFyIF89bS5mdW5jO3R5cGVvZiBfPT0ibnVtYmVyIj9tLmFyZz09PXZvaWQgMD9Fci5nZXQoXykoKTpFci5nZXQoXykobS5hcmcpOl8obS5hcmc9PT12b2lkIDA/bnVsbDptLmFyZyl9fWZ1bmN0aW9uIFVmKGMsbSxfLFQpe2NlKCJBc3NlcnRpb24gZmFpbGVkOiAiKyQoYykrIiwgYXQ6ICIrW20/JChtKToidW5rbm93biBmaWxlbmFtZSIsXyxUPyQoVCk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24ga2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gT2YoKXtjZSgiIil9dmFyIFR0O1R0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgQmY9ITA7ZnVuY3Rpb24gTGYoYyl7cmV0dXJuIFlbbWkoKT4+Ml09YyxjfWZ1bmN0aW9uIEdmKGMsbSl7dmFyIF87aWYoYz09PTApXz1EYXRlLm5vdygpO2Vsc2UgaWYoKGM9PT0xfHxjPT09NCkmJkJmKV89VHQoKTtlbHNlIHJldHVybiBMZigyOCksLTE7cmV0dXJuIFlbbT4+Ml09Xy8xZTN8MCxZW20rND4+Ml09XyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gJGYoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiB6ZihjLG0sXyl7TGUuY29weVdpdGhpbihjLG0sbStfKX1mdW5jdGlvbiBXZihjKXt0cnl7cmV0dXJuIHYuZ3JvdyhjLXNpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksYWkodi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiBWZihjKXt2YXIgbT1MZS5sZW5ndGg7Yz1jPj4+MDt2YXIgXz0yMTQ3NDgzNjQ4O2lmKGM+XylyZXR1cm4hMTtmb3IodmFyIFQ9MTtUPD00O1QqPTIpe3ZhciBOPW0qKDErLjIvVCk7Tj1NYXRoLm1pbihOLGMrMTAwNjYzMjk2KTt2YXIgaz1NYXRoLm1pbihfLEgoTWF0aC5tYXgoYyxOKSw2NTUzNikpLHc9V2Yoayk7aWYodylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBIZihjKXtmb3IodmFyIG09VHQoKTtUdCgpLW08YzspO312YXIgQXI9e307ZnVuY3Rpb24gWWYoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiAkZSgpe2lmKCEkZS5zdHJpbmdzKXt2YXIgYz0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixtPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6YyxfOllmKCl9O2Zvcih2YXIgXyBpbiBBcilBcltfXT09PXZvaWQgMD9kZWxldGUgbVtfXTptW19dPUFyW19dO3ZhciBUPVtdO2Zvcih2YXIgXyBpbiBtKVQucHVzaChfKyI9IittW19dKTskZS5zdHJpbmdzPVR9cmV0dXJuICRlLnN0cmluZ3N9dmFyIEF0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oYyxtKXt2YXIgXz1BdC5idWZmZXJzW2NdO209PT0wfHxtPT09MTA/KChjPT09MT94OmwpKEcoXywwKSksXy5sZW5ndGg9MCk6Xy5wdXNoKG0pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtBdC52YXJhcmdzKz00O3ZhciBjPVlbQXQudmFyYXJncy00Pj4yXTtyZXR1cm4gY30sZ2V0U3RyOmZ1bmN0aW9uKGMpe3ZhciBtPSQoYyk7cmV0dXJuIG19LGdldDY0OmZ1bmN0aW9uKGMsbSl7cmV0dXJuIGN9fTtmdW5jdGlvbiBqZihjLG0pe3ZhciBfPTA7cmV0dXJuICRlKCkuZm9yRWFjaChmdW5jdGlvbihULE4pe3ZhciBrPW0rXztZW2MrTio0Pj4yXT1rLFooVCxrKSxfKz1ULmxlbmd0aCsxfSksMH1mdW5jdGlvbiBYZihjLG0pe3ZhciBfPSRlKCk7WVtjPj4yXT1fLmxlbmd0aDt2YXIgVD0wO3JldHVybiBfLmZvckVhY2goZnVuY3Rpb24oTil7VCs9Ti5sZW5ndGgrMX0pLFlbbT4+Ml09VCwwfWZ1bmN0aW9uIFFmKGMpe3JsKGMpfWZ1bmN0aW9uIEtmKGMpe3JldHVybiAwfWZ1bmN0aW9uIHFmKGMsbSxfLFQsTil7fWZ1bmN0aW9uIEpmKGMsbSxfLFQpe2Zvcih2YXIgTj0wLGs9MDtrPF87aysrKXtmb3IodmFyIHc9WVttK2sqOD4+Ml0sTz1ZW20rKGsqOCs0KT4+Ml0sSz0wO0s8TztLKyspQXQucHJpbnRDaGFyKGMsTGVbdytLXSk7Tis9T31yZXR1cm4gWVtUPj4yXT1OLDB9ZnVuY3Rpb24gWmYoKXtpZih0eXBlb2YgY3J5cHRvPT0ib2JqZWN0IiYmdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiIpe3ZhciBjPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGMpLGNbMF19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7Y2UoInJhbmRvbURldmljZSIpfX1mdW5jdGlvbiB3dChjLG0pe3d0LnJhbmRvbURldmljZXx8KHd0LnJhbmRvbURldmljZT1aZigpKTtmb3IodmFyIF89MDtfPG07XysrKUV0W2MrXz4+MF09d3QucmFuZG9tRGV2aWNlKCk7cmV0dXJuIDB9dmFyIGVsPXthOlVmLGU6a2YsZDpDZixiOk9mLG46R2YsaDokZixsOnpmLG06VmYscDpIZixmOmpmLGc6WGYsajpRZixpOktmLGs6cWYsYzpKZixvOnd0fTtNZigpLHQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX19fd2FzbV9jYWxsX2N0b3JzPXQuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9dC5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD10LmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0SGVpZ2h0PXQuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dFdpZHRoPXQuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9dC5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PXQuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dEhlaWdodD10LmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dFdpZHRoPXQuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dENoYW5uZWxDb3VudD10LmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2xvYWRNb2RlbD1mdW5jdGlvbigpe3JldHVybih0Ll9sb2FkTW9kZWw9dC5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9ydW5JbmZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm4odC5fcnVuSW5mZXJlbmNlPXQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5faXNHUFVFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2lzR1BVRW5hYmxlZD10LmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBtaT10Ll9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG1pPXQuX19fZXJybm9fbG9jYXRpb249dC5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdDtmdW5jdGlvbiB0bChjKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT0iUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgiK2MrIikiLHRoaXMuc3RhdHVzPWN9R2U9ZnVuY3Rpb24gYygpe1N0fHx3cigpLFN0fHwoR2U9Yyl9O2Z1bmN0aW9uIHdyKGMpe2lmKGdlPjB8fChUZigpLGdlPjApKXJldHVybjtmdW5jdGlvbiBtKCl7U3R8fChTdD0hMCx0LmNhbGxlZFJ1bj0hMCwhSSYmKEFmKCksbih0KSx0Lm9uUnVudGltZUluaXRpYWxpemVkJiZ0Lm9uUnVudGltZUluaXRpYWxpemVkKCksd2YoKSkpfXQuc2V0U3RhdHVzPyh0LnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zZXRTdGF0dXMoIiIpfSwxKSxtKCl9LDEpKTptKCl9dC5ydW49d3I7ZnVuY3Rpb24gcmwoYyxtKXtubChjKX1mdW5jdGlvbiBubChjKXtFZigpfHwodC5vbkV4aXQmJnQub25FeGl0KGMpLEk9ITApLHUoYyxuZXcgdGwoYykpfWlmKHQucHJlSW5pdClmb3IodHlwZW9mIHQucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHQucHJlSW5pdD1bdC5wcmVJbml0XSk7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQucG9wKCkoKTtyZXR1cm4gd3IoKSxlLnJlYWR5fX0oKTtjbGFzcyBwZntjb25zdHJ1Y3Rvcigpe3AodGhpcywic2VsZWN0ZWRURkxpdGUiKTtwKHRoaXMsImlzU0lNRFN1cHBvcnRlZCIsITEpO3AodGhpcywiaXNUaHJlYWRzU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpbnB1dFdpZHRoIiwwKTtwKHRoaXMsImlucHV0SGVpZ2h0IiwwKTtwKHRoaXMsImlucHV0Q2hhbm5lbENvdW50IiwwKTtwKHRoaXMsImlucHV0TWVtb3J5T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dFdpZHRoIiwwKTtwKHRoaXMsIm91dHB1dEhlaWdodCIsMCk7cCh0aGlzLCJvdXRwdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywib3V0cHV0TWVtb3J5T2Zmc2V0IiwwKX19Y29uc3QgeWY9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvdm9uYWdlLXRlbnNvcmZsb3ctd2FzbS90ZmxpdGUtc2ltZC13YXNtLzEuMS4zLyIsX2Y9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvbWwvc2VsZmllX3NlZ21lbnRhdGlvbi80LjAuMC8iO2FzeW5jIGZ1bmN0aW9uIHhmKHI9eWYsZT1fZil7bGV0IHQ9bmV3IHBmO3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7YXN5bmMgZnVuY3Rpb24gcygpe3JldHVybiBoZih7bG9jYXRlRmlsZTpmdW5jdGlvbihmKXtyZXR1cm4gcitmfX0pfWFzeW5jIGZ1bmN0aW9uIGEodSl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKGYsZCk9Pntjb25zdCBoPXU7aWYodHlwZW9mIGg+InUiKXJldHVybiBkKCJURkxpdGUgYmFja2VuZCB1bmF2YWlsYWJsZTogd2FzbVNpbWQiKTtjb25zdCB5PSJzZWxmaWVfc2VnbWVudGF0aW9uX2xhbmRzY2FwZSI7Y29uc29sZS5sb2coIkxvYWRpbmcgdGZsaXRlIG1vZGVsOiIseSk7bGV0IHg9ZStgJHt5fS50ZmxpdGVgO2NvbnNvbGUubG9nKCJURkxpdGUgbW9kZWxVcmw6ICIreCk7dHJ5e2NvbnN0IGc9YXdhaXQoYXdhaXQgZmV0Y2goeCkpLmFycmF5QnVmZmVyKCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBzaXplOiIsZy5ieXRlTGVuZ3RoKTtjb25zdCBFPWguX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0KCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBtZW1vcnkgb2Zmc2V0OiIsRSksY29uc29sZS5sb2coIkxvYWRpbmcgbW9kZWwgYnVmZmVyLi4uIiksaC5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGcpLEUpO2NvbnN0IHY9aC5fbG9hZE1vZGVsKGcuYnl0ZUxlbmd0aCk7aWYoY29uc29sZS5sb2coIkxvYWQgbW9kZWwgcmVzdWx0OiIsdiksdiE9PTApe2QoIkNhbm5vdCBsb2FkIG1vZGVsIik7cmV0dXJufXQuaW5wdXRXaWR0aD1oLl9nZXRJbnB1dFdpZHRoKCksdC5pbnB1dEhlaWdodD1oLl9nZXRJbnB1dEhlaWdodCgpLHQuaW5wdXRDaGFubmVsQ291bnQ9aC5fZ2V0SW5wdXRDaGFubmVsQ291bnQoKSx0LmlucHV0TWVtb3J5T2Zmc2V0PWguX2dldElucHV0TWVtb3J5T2Zmc2V0KCksY29uc29sZS5sb2coIklucHV0IG1lbW9yeSBvZmZzZXQ6Iix0LmlucHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiSW5wdXQgaGVpZ2h0OiIsdC5pbnB1dEhlaWdodCksY29uc29sZS5sb2coIklucHV0IHdpZHRoOiIsdC5pbnB1dFdpZHRoKSxjb25zb2xlLmxvZygiSW5wdXQgY2hhbm5lbHM6Iix0LmlucHV0Q2hhbm5lbENvdW50KSx0Lm91dHB1dE1lbW9yeU9mZnNldD1oLl9nZXRPdXRwdXRNZW1vcnlPZmZzZXQoKSx0Lm91dHB1dFdpZHRoPWguX2dldE91dHB1dFdpZHRoKCksdC5vdXRwdXRIZWlnaHQ9aC5fZ2V0T3V0cHV0SGVpZ2h0KCksdC5vdXRwdXRDaGFubmVsQ291bnQ9aC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50KCksY29uc29sZS5sb2coIk91dHB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5vdXRwdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJPdXRwdXQgaGVpZ2h0OiIsdC5vdXRwdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJPdXRwdXQgd2lkdGg6Iix0Lm91dHB1dFdpZHRoKSxjb25zb2xlLmxvZygiT3V0cHV0IGNoYW5uZWxzOiIsdC5vdXRwdXRDaGFubmVsQ291bnQpLHQuc2VsZWN0ZWRURkxpdGU9aH1jYXRjaChsKXtkKGwpO3JldHVybn1mKCl9KX1zKCkudGhlbih1PT57aWYodT09PW51bGwpdGhyb3cgY29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBudWxsIiksImxvYWRURkxpdGUgbnVsbCI7YSh1KS50aGVuKGY9PntpKHQpfSkuY2F0Y2goZj0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGVNb2RlbCBlcnJvciIpLG8oImxvYWRURkxpdGVNb2RlbCBlcnJvciIpfSl9KS5jYXRjaCh1PT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBlcnJvcjoiLHUpLG8oImxvYWRURkxpdGUgZXJyb3I6Iit1KX0pfSk7cmV0dXJuIG59Y2xhc3MgZ2Z7Y29uc3RydWN0b3IoKXtwKHRoaXMsImNhbnZhcyIsbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApKTtwKHRoaXMsImNvbnRleHQiLHRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkpO3AodGhpcywicGl4ZWxDb3VudCIsMCk7cCh0aGlzLCJpbnB1dE9mZnNldCIsMCk7cCh0aGlzLCJvdXRwdXRPZmZzZXQiLDApO3AodGhpcywiaW5mb3MiKTtwKHRoaXMsIm1hc2siKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgeGYoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIGJme2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBnZik7cCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7cCh0aGlzLCJyZXBvcnRlciIsbmV3IElvKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KTtwKHRoaXMsImJhY2tncm91bmRPcHRpb25zIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQodC53YXNtQXNzZXRVcmlQYXRoLHQudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDpuLGhlaWdodDppfT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBtZihlLHtmb3JlZ3JvdW5kV2lkdGg6MSxmb3JlZ3JvdW5kSGVpZ2h0OjEsbWFza1dpZHRoOm4sbWFza0hlaWdodDppfSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBzLGEsdSxmO2NvbnN0IG49KHM9ZS50aW1lc3RhbXApIT1udWxsP3M6MCxpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLG89YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhpKTtvPygoaS53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxpLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1pLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1pLmhlaWdodCxhd2FpdCgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLnJlc2l6ZUZvcmVncm91bmQoaS53aWR0aCxpLmhlaWdodCkpKSxhd2FpdCgodT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp1LnByb2Nlc3MoaSxvKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoZj10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpmLmNhbnZhcyx7dGltZXN0YW1wOm4sYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119Z2V0VHJhbnNmb3JtZXJUeXBlKCl7dmFyIGUsdDtyZXR1cm4odD0oZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpIT1udWxsP3Q6IlVuZGVmaW5lZCJ9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpGbyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBiZik7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IG5vKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe3FpKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IG9pPXZyOygoKT0+e19pKCJQcm9jZXNzb3JXb3JrZXIiLHZyKX0pKCl9KSgpOwo=",vs=typeof window<"u"&&window.Blob&&new Blob([atob(Ll)],{type:"text/javascript;charset=utf-8"});function n3(){const t=vs&&(window.URL||window.webkitURL).createObjectURL(vs);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+Ll)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const zo=class extends ur{constructor(){super(...arguments),Wt(this,"rate",30),Wt(this,"worker")}async init(t){this.worker=await U2(ho,n3),await this.worker.init("worker_"+zo.initCount++,t),await this.worker.setVonageMetadata(ui()),await this.setBackgroundOptions(t),this.listenWorker()}async setTrackExpectedRate(t){var e;await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){var e,n,r;const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await rs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await rs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}async transform(t,e){var n;await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate())}async setFlickeringOptions(t){var e;await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async listenWorker(){for(var t,e,n;null!=(t=this.worker)&&t.workerContext.worker;){const{name:t,data:r}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,r);break;case"pipelineInfo":switch(this.emit(t,r),r){case"pipeline_ended":case"pipeline_ended_with_error":return void await(null==(n=this.worker)?void 0:n.terminate())}}}}};let hi=zo;Wt(hi,"initCount",0);class r3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==Ts.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class Cl extends ur{constructor(){super(),Wt(this,"worker",new hi),Wt(this,"connector",new W2(this.worker))}async init(t){await this.worker.init(t),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new r3(e)}static async create(t){const e=new this;return await e.init(t),this.instances.push(e),e}}function l3(){return bi}function c3(){return yi}function u3(){return gi}function a3(){return Zi}function d3(){return vi}function h3(){return Gi}function f3(){return Xi}async function m3(t){return await Cl.create(t)}Wt(Cl,"instances",[]);export{e3 as BackgroundTransformer,V2 as BackgroundTransformerType,di as BlurRadius,b2 as ErrorFunction,_i as MediapipeHelper,no as PipelineInfoData,R2 as SelfieSegmentationType,Cl as VonageMediaProcessor,p2 as WarningType,m3 as createVonageMediaProcessor,Y2 as getSupportedBrowserFeatures,a3 as getVonageFaceDetection,d3 as getVonageFaceMash,c3 as getVonageHands,u3 as getVonageHolistic,h3 as getVonageObjectron,f3 as getVonagePose,l3 as getVonageSelfieSegmentation,o3 as isSupported};
|
|
4
|
+
see: http://github.com/greggman/twgl.js for details */const Zo=5120,Ar=5121,vo=5122,Go=5123,Xo=5124,Wo=5125,Vo=5126,Z1=32819,v1=32820,G1=33635,X1=5131,W1=33640,V1=35899,R1=35902,x1=36269,I1=34042,ws={};{const t=ws;t[Zo]=Int8Array,t[Ar]=Uint8Array,t[vo]=Int16Array,t[Go]=Uint16Array,t[Xo]=Int32Array,t[Wo]=Uint32Array,t[Vo]=Float32Array,t[Z1]=Uint16Array,t[v1]=Uint16Array,t[G1]=Uint16Array,t[X1]=Uint16Array,t[W1]=Uint32Array,t[V1]=Uint32Array,t[R1]=Uint32Array,t[x1]=Uint32Array,t[I1]=Uint32Array}function Ro(t){if(t instanceof Int8Array)return Zo;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Ar;if(t instanceof Int16Array)return vo;if(t instanceof Uint16Array)return Go;if(t instanceof Int32Array)return Xo;if(t instanceof Uint32Array)return Wo;if(t instanceof Float32Array)return Vo;throw new Error("unsupported typed array type")}function Fs(t){if(t===Int8Array)return Zo;if(t===Uint8Array||t===Uint8ClampedArray)return Ar;if(t===Int16Array)return vo;if(t===Uint16Array)return Go;if(t===Int32Array)return Xo;if(t===Uint32Array)return Wo;if(t===Float32Array)return Vo;throw new Error("unsupported typed array type")}function Ys(t){const e=ws[t];if(!e)throw new Error("unknown gl type");return e}const wi=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function Ls(...t){console.error(...t)}const ss=new Map;function Ni(t,e){if(!t||"object"!=typeof t)return!1;let n=ss.get(e);n||(n=new WeakMap,ss.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function S1(t,e){return typeof WebGLBuffer<"u"&&Ni(e,"WebGLBuffer")}function T1(t,e){return typeof WebGLRenderbuffer<"u"&&Ni(e,"WebGLRenderbuffer")}function xo(t,e){return typeof WebGLTexture<"u"&&Ni(e,"WebGLTexture")}function w1(t,e){return typeof WebGLSampler<"u"&&Ni(e,"WebGLSampler")}const Cs=35044,vr=34962,F1=34963,Y1=34660,L1=5120,C1=5121,H1=5122,N1=5123,J1=5124,E1=5125,Hs=5126,Ns={attribPrefix:""};function k1(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||Cs)}function Js(t,e,n,r){if(S1(t,e))return e;n=n||vr;const i=t.createBuffer();return k1(t,n,i,e,r),i}function Es(t){return"indices"===t}function U1(t){return t===Int8Array||t===Uint8Array}function B1(t){return t.length?t:t.data}const A1=/coord|texture/i,M1=/color|colour/i;function K1(t,e){let n;if(n=A1.test(t)?2:M1.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function j1(t,e,n){return t.numComponents||t.size||K1(e,n||B1(t).length)}function ks(t,e){if(wi(t))return t;if(wi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?Io(t.type):void 0;return n||(n=Es(e)?Uint16Array:Float32Array),new n(t.data)}function z1(t){return"number"==typeof t?t:t?Fs(t):Hs}function Io(t){return"number"==typeof t?Ys(t):t||Float32Array}function O1(t,e){return{buffer:e.buffer,numValues:24,type:z1(e.type),arrayType:Io(e.type)}}function P1(t,e){const n=e.data||e,r=Io(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(vr,o),t.bufferData(vr,i,e.drawType||Cs),{buffer:o,numValues:n,type:Fs(r),arrayType:r}}function _1(t,e,n){const r=ks(e,n);return{arrayType:r.constructor,buffer:Js(t,r,void 0,e.drawType),type:Ro(r),numValues:0}}function Q1(t,e){const n={};return Object.keys(e).forEach((function(r){if(!Es(r)){const i=e[r],o=i.attrib||i.name||i.attribName||Ns.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!wi(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?O1:"number"==typeof i||"number"==typeof i.data?P1:_1;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:U1(c),d=j1(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(vr,null),n}function D1(t,e){return e===L1||e===C1?1:e===H1||e===N1?2:e===J1||e===E1||e===Hs?4:0}const $i=["position","positions","a_position"];function $1(t,e){let n,r;for(r=0;r<$i.length&&(n=$i[r],!(n in e)&&(n=Ns.attribPrefix+n,!(n in e)));++r);r===$i.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(vr,i.buffer);const o=t.getBufferParameter(vr,Y1);t.bindBuffer(vr,null);const a=o/D1(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function q1(t,e,n){const r=Q1(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=ks(o,"indices");i.indices=Js(t,e,F1),i.numElements=e.length,i.elementType=Ro(e)}else i.numElements||(i.numElements=$1(t,i.attribs));return i}function Pr(t){return!!t.texStorage2D}const Us=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Mr=wi,Bs=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),ls=6406,qn=6407,Vn=6408,cs=6409,us=6410,Nr=6402,as=34041,Fi=33071,tc=9728,ec=9729,hr=3553,ar=34067,Xr=32879,Wr=35866,So=34069,nc=34070,rc=34071,ic=34072,oc=34073,sc=34074,ro=10241,io=10240,Yi=10242,Li=10243,ds=32882,lc=33082,cc=33083,uc=33084,ac=33085,To=3317,As=3314,Ms=32878,Ks=3316,js=3315,zs=32877,dc=37443,hc=37441,fc=37440,mc=33321,pc=36756,bc=33325,yc=33326,gc=33330,Zc=33329,vc=33338,Gc=33337,Xc=33340,Wc=33339,Vc=33323,Rc=36757,xc=33327,Ic=33328,Sc=33336,Tc=33335,wc=33332,Fc=33331,Yc=33334,Lc=33333,Cc=32849,Hc=35905,Nc=36194,Jc=36758,Ec=35898,kc=35901,Uc=34843,Bc=34837,Ac=36221,Mc=36239,Kc=36215,jc=36233,zc=36209,Oc=36227,Pc=32856,_c=35907,Qc=36759,Dc=32855,$c=32854,qc=32857,tu=34842,eu=34836,nu=36220,ru=36238,iu=36975,ou=36214,su=36232,lu=36226,cu=36208,uu=33189,au=33190,du=36012,hu=36013,fu=35056,sr=5120,Zn=5121,ni=5122,Tr=5123,ri=5124,pr=5125,jn=5126,hs=32819,fs=32820,ms=33635,Qn=5131,Jr=36193,qi=33640,mu=35899,pu=35902,bu=36269,yu=34042,ii=33319,wr=33320,oi=6403,Fr=36244,Yr=36248,br=36249;let to;function Ji(t){if(!to){const t={};t[ls]={textureFormat:ls,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,Qn,Jr,jn]},t[cs]={textureFormat:cs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,Qn,Jr,jn]},t[us]={textureFormat:us,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Zn,Qn,Jr,jn]},t[qn]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Zn,Qn,Jr,jn,ms]},t[Vn]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Zn,Qn,Jr,jn,hs,fs]},t[Nr]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[pr,Tr]},t[mc]={textureFormat:oi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Zn]},t[pc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[sr]},t[bc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[jn,Qn]},t[yc]={textureFormat:oi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[gc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Zn]},t[Zc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[sr]},t[wc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Tr]},t[Fc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[ni]},t[Yc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},t[Lc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ri]},t[Vc]={textureFormat:ii,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Zn]},t[Rc]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[sr]},t[xc]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[jn,Qn]},t[Ic]={textureFormat:ii,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[jn]},t[Sc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Zn]},t[Tc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[sr]},t[vc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},t[Gc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ni]},t[Xc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[pr]},t[Wc]={textureFormat:wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ri]},t[Cc]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[Hc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[Nc]={textureFormat:qn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Zn,ms]},t[Jc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[sr]},t[Ec]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,Qn,mu]},t[kc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,Qn,pu]},t[Uc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[jn,Qn]},t[Bc]={textureFormat:qn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[jn]},t[Ac]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Zn]},t[Mc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[sr]},t[Kc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Tr]},t[jc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[ni]},t[zc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[pr]},t[Oc]={textureFormat:Yr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ri]},t[Pc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[_c]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[Qc]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[sr]},t[Dc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Zn,fs,qi]},t[$c]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Zn,hs]},t[qc]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[qi]},t[tu]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[jn,Qn]},t[eu]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[jn]},t[nu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Zn]},t[ru]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[sr]},t[iu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[qi]},t[ou]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},t[su]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ni]},t[lu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[ri]},t[cu]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[pr]},t[uu]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,pr]},t[au]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},t[du]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[fu]={textureFormat:as,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yu]},t[hu]={textureFormat:as,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[bu]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),to=t}return to[t]}function gu(t,e){const n=Ji(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function _r(t){const e=Ji(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function ps(t){return 0==(t&t-1)}function Zu(t,e,n,r){if(!Pr(t))return ps(e)&&ps(n);const i=Ji(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function vu(t){const e=Ji(t);if(!e)throw"unknown internal format";return e.textureFilterable}function Gu(t,e,n){return Mr(e)?Ro(e):n||Zn}function si(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===ar?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Hr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(dc,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(hc,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(fc,e.flipY)}function Os(t){t.pixelStorei(To,4),Pr(t)&&(t.pixelStorei(As,0),t.pixelStorei(Ms,0),t.pixelStorei(Ks,0),t.pixelStorei(js,0),t.pixelStorei(zs,0))}function Xu(t,e,n,r){r.minMag&&(n.call(t,e,ro,r.minMag),n.call(t,e,io,r.minMag)),r.min&&n.call(t,e,ro,r.min),r.mag&&n.call(t,e,io,r.mag),r.wrap&&(n.call(t,e,Yi,r.wrap),n.call(t,e,Li,r.wrap),(e===Xr||w1(t,e))&&n.call(t,e,ds,r.wrap)),r.wrapR&&n.call(t,e,ds,r.wrapR),r.wrapS&&n.call(t,e,Yi,r.wrapS),r.wrapT&&n.call(t,e,Li,r.wrapT),r.minLod&&n.call(t,e,lc,r.minLod),r.maxLod&&n.call(t,e,cc,r.maxLod),r.baseLevel&&n.call(t,e,uc,r.baseLevel),r.maxLevel&&n.call(t,e,ac,r.maxLevel)}function Ps(t,e,n){const r=n.target||hr;t.bindTexture(r,e),Xu(t,r,t.texParameteri,n)}function Wu(t){return t=t||dr.textureColor,Mr(t)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function oo(t,e,n,r,i,o){n=n||dr.textureOptions,o=o||Vn;const a=n.target||hr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),Zu(t,r,i,o))t.generateMipmap(a);else{const e=vu(o)?ec:tc;t.texParameteri(a,ro,e),t.texParameteri(a,io,e),t.texParameteri(a,Yi,Fi),t.texParameteri(a,Li,Fi)}}function Kr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function so(t,e){return(e=e||{}).cubeFaceOrder||[So,nc,rc,ic,oc,sc]}function lo(t,e){const n=so(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function _s(t,e,n,r){const i=(r=r||dr.textureOptions).target||hr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Vn,c=_r(s),u=r.format||c.format,d=r.type||c.type;if(Hr(t,r),t.bindTexture(i,e),i===ar){const c=n.width,h=n.height;let f,m;if(c/6===h)f=h,m=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)f=c,m=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)f=c/3,m=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);f=c/2,m=[0,0,1,0,0,1,1,1,0,2,1,2]}const p=Bs();p?(p.canvas.width=f,p.canvas.height=f,a=f,l=f,lo(t,r).forEach((function(e){const r=m[2*e.ndx+0]*f,i=m[2*e.ndx+1]*f;p.drawImage(n,r,i,f,f,0,0,f,f),t.texImage2D(e.face,o,s,u,d,p.canvas)})),p.canvas.width=1,p.canvas.height=1):typeof createImageBitmap<"u"&&(a=f,l=f,lo(t,r).forEach((function(c){const h=m[2*c.ndx+0]*f,p=m[2*c.ndx+1]*f;t.texImage2D(c.face,o,s,f,f,0,u,d,null),createImageBitmap(n,h,p,f,f,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Hr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),Kr(r)&&oo(t,e,r,a,l,s)}))})))}else if(i===Xr||i===Wr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(To,1),t.pixelStorei(As,n.width),t.pixelStorei(Ms,0),t.pixelStorei(zs,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(Ks,a),t.pixelStorei(js,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}Os(t)}else t.texImage2D(i,o,s,u,d,n);Kr(r)&&oo(t,e,r,a,l,s),Ps(t,e,r)}function Qr(){}function Vu(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function Ru(t,e){return void 0!==e||Vu(t)?e:"anonymous"}function xu(t,e,n){let r;if(n=n||Qr,e=void 0!==e?e:dr.crossOrigin,e=Ru(t,e),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;Ls(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function Qs(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function wo(t,e,n){return Qs(t)?(setTimeout((function(){n(null,t)})),t):xu(t,e,n)}function Fo(t,e,n){const r=(n=n||dr.textureOptions).target||hr;if(t.bindTexture(r,e),!1===n.color)return;const i=Wu(n.color);if(r===ar)for(let e=0;e<6;++e)t.texImage2D(So+e,0,Vn,1,1,0,Vn,Zn,i);else r===Xr||r===Wr?t.texImage3D(r,0,Vn,1,1,1,0,Vn,Zn,i):t.texImage2D(r,0,Vn,1,1,0,Vn,Zn,i)}function Iu(t,e,n,r){return r=r||Qr,n=n||dr.textureOptions,Fo(t,e,n),wo((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(_s(t,e,o,n),r(null,e,o))}))}function Su(t,e,n,r){r=r||Qr;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Vn,l=_r(a),s=n.format||l.format,c=n.type||Zn,u=n.target||hr;if(u!==ar)throw"target must be TEXTURE_CUBE_MAP";Fo(t,e,n),n=Object.assign({},n);let d=6;const h=[],f=so(t,n);let m;m=i.map((function(i,l){return wo(i,n.crossOrigin,function(i){return function(l,f){--d,l?h.push(l):f.width!==f.height?h.push("cubemap face img is not a square: "+f.src):(Hr(t,n),t.bindTexture(u,e),5===d?so().forEach((function(e){t.texImage2D(e,o,a,s,c,f)})):t.texImage2D(i,o,a,s,c,f),Kr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,m)}}(f[l]))}))}function Tu(t,e,n,r){r=r||Qr;const i=n.src,o=n.internalFormat||n.format||Vn,a=_r(o),l=n.format||a.format,s=n.type||Zn,c=n.target||Wr;if(c!==Xr&&c!==Wr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Fo(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const f=n.level||0;let m=n.width,p=n.height;const b=i.length;let g=!0;h=i.map((function(i,a){return wo(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Hr(t,n),t.bindTexture(c,e),g){g=!1,m=n.width||y.width,p=n.height||y.height,t.texImage3D(c,f,o,m,p,b,0,l,s,null);for(let e=0;e<b;++e)t.texSubImage3D(c,f,0,0,e,m,p,1,l,s,y)}else{let e,n=y;(y.width!==m||y.height!==p)&&(e=Bs(),n=e.canvas,e.canvas.width=m,e.canvas.height=p,e.drawImage(y,0,0,m,p)),t.texSubImage3D(c,f,0,0,i,m,p,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}Kr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function wu(t,e,n,r){const i=(r=r||dr.textureOptions).target||hr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Vn,u=_r(c),d=r.format||u.format,h=r.type||Gu(t,n,u.type);if(Mr(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=Ys(h);n=new t(n)}const f=gu(c,h),m=n.byteLength/f;if(m%1)throw"length wrong size for format: "+Us(t,d);let p;if(i===Xr||i===Wr)if(o||a||l)!o||a&&l?!a||o&&l?(p=si(t,i,o,a,m/l),o=p.width,a=p.height):(p=si(t,i,o,l,m/a),o=p.width,l=p.height):(p=si(t,i,a,l,m/o),a=p.width,l=p.height);else{const t=Math.cbrt(m);if(t%1!=0)throw"can't guess cube size of array of numElements: "+m;o=t,a=t,l=t}else p=si(t,i,o,a,m),o=p.width,a=p.height;if(Os(t),t.pixelStorei(To,r.unpackAlignment||1),Hr(t,r),i===ar){const e=m/6*(f/n.BYTES_PER_ELEMENT);lo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Xr||i===Wr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function Fu(t,e,n){const r=n.target||hr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Vn,a=_r(o),l=n.format||a.format,s=n.type||a.type;if(Hr(t,n),r===ar)for(let e=0;e<6;++e)t.texImage2D(So+e,i,o,n.width,n.height,0,l,s,null);else r===Xr||r===Wr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function Ds(t,e,n){n=n||Qr,e=e||dr.textureOptions;const r=t.createTexture(),i=e.target||hr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Vn;t.bindTexture(i,r),i===ar&&(t.texParameteri(i,Yi,Fi),t.texParameteri(i,Li,Fi));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)Iu(t,r,e,n);else if(Mr(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||Mr(s[0]))){const n=wu(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||Qs(s[0]))?i===ar?Su(t,r,e,n):Tu(t,r,e,n):(_s(t,r,s,e),o=s.width,a=s.height);else Fu(t,r,e);return Kr(e)&&oo(t,r,e,o,a,l),Ps(t,r,e),r}const Yo=Ls;function $s(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const Ci=33984,Ei=34962,Yu=34963,Lu=35713,Cu=35714,Hu=35632,Nu=35633,Ju=35981,qs=35718,Eu=35721,ku=35971,Uu=35382,Bu=35396,Au=35398,Mu=35392,Ku=35395,ki=5126,tl=35664,el=35665,nl=35666,Lo=5124,rl=35667,il=35668,ol=35669,sl=35670,ll=35671,cl=35672,ul=35673,al=35674,dl=35675,hl=35676,ju=35678,zu=35680,Ou=35679,Pu=35682,_u=35685,Qu=35686,Du=35687,$u=35688,qu=35689,ta=35690,ea=36289,na=36292,ra=36293,Co=5125,fl=36294,ml=36295,pl=36296,ia=36298,oa=36299,sa=36300,la=36303,ca=36306,ua=36307,aa=36308,da=36311,Ui=3553,Bi=34067,Ho=32879,Ai=35866,ge={};function bl(t,e){return ge[e].bindPoint}function ha(t,e){return function(n){t.uniform1f(e,n)}}function fa(t,e){return function(n){t.uniform1fv(e,n)}}function ma(t,e){return function(n){t.uniform2fv(e,n)}}function pa(t,e){return function(n){t.uniform3fv(e,n)}}function ba(t,e){return function(n){t.uniform4fv(e,n)}}function yl(t,e){return function(n){t.uniform1i(e,n)}}function gl(t,e){return function(n){t.uniform1iv(e,n)}}function Zl(t,e){return function(n){t.uniform2iv(e,n)}}function vl(t,e){return function(n){t.uniform3iv(e,n)}}function Gl(t,e){return function(n){t.uniform4iv(e,n)}}function ya(t,e){return function(n){t.uniform1ui(e,n)}}function ga(t,e){return function(n){t.uniform1uiv(e,n)}}function Za(t,e){return function(n){t.uniform2uiv(e,n)}}function va(t,e){return function(n){t.uniform3uiv(e,n)}}function Ga(t,e){return function(n){t.uniform4uiv(e,n)}}function Xa(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function Wa(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function Va(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function Ra(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function xa(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function Ia(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function Sa(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function Ta(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function wa(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function zn(t,e,n,r){const i=bl(t,e);return Pr(t)?function(e){let o,a;!e||xo(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(Ci+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(Ci+n),t.bindTexture(i,e)}}function On(t,e,n,r,i){const o=bl(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return Pr(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(Ci+a[r]),xo(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(Ci+a[n]),t.bindTexture(o,e)}))}}function Mi(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||ki,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function fr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Lo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function Ki(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(Ei,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Co,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function No(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(Ei,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||ki,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[ki]={Type:Float32Array,size:4,setter:ha,arraySetter:fa},ge[tl]={Type:Float32Array,size:8,setter:ma,cols:2},ge[el]={Type:Float32Array,size:12,setter:pa,cols:3},ge[nl]={Type:Float32Array,size:16,setter:ba,cols:4},ge[Lo]={Type:Int32Array,size:4,setter:yl,arraySetter:gl},ge[rl]={Type:Int32Array,size:8,setter:Zl,cols:2},ge[il]={Type:Int32Array,size:12,setter:vl,cols:3},ge[ol]={Type:Int32Array,size:16,setter:Gl,cols:4},ge[Co]={Type:Uint32Array,size:4,setter:ya,arraySetter:ga},ge[fl]={Type:Uint32Array,size:8,setter:Za,cols:2},ge[ml]={Type:Uint32Array,size:12,setter:va,cols:3},ge[pl]={Type:Uint32Array,size:16,setter:Ga,cols:4},ge[sl]={Type:Uint32Array,size:4,setter:yl,arraySetter:gl},ge[ll]={Type:Uint32Array,size:8,setter:Zl,cols:2},ge[cl]={Type:Uint32Array,size:12,setter:vl,cols:3},ge[ul]={Type:Uint32Array,size:16,setter:Gl,cols:4},ge[al]={Type:Float32Array,size:32,setter:Xa,rows:2,cols:2},ge[dl]={Type:Float32Array,size:48,setter:Wa,rows:3,cols:3},ge[hl]={Type:Float32Array,size:64,setter:Va,rows:4,cols:4},ge[_u]={Type:Float32Array,size:32,setter:Ra,rows:2,cols:3},ge[Qu]={Type:Float32Array,size:32,setter:Ia,rows:2,cols:4},ge[Du]={Type:Float32Array,size:48,setter:xa,rows:3,cols:2},ge[$u]={Type:Float32Array,size:48,setter:Ta,rows:3,cols:4},ge[qu]={Type:Float32Array,size:64,setter:Sa,rows:4,cols:2},ge[ta]={Type:Float32Array,size:64,setter:wa,rows:4,cols:3},ge[ju]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[zu]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[Ou]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[Pu]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[ea]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[na]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[ra]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[ia]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[oa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[sa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[la]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai},ge[ca]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[ua]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ho},ge[aa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Bi},ge[da]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ai};const Cn={};Cn[ki]={size:4,setter:Mi},Cn[tl]={size:8,setter:Mi},Cn[el]={size:12,setter:Mi},Cn[nl]={size:16,setter:Mi},Cn[Lo]={size:4,setter:fr},Cn[rl]={size:8,setter:fr},Cn[il]={size:12,setter:fr},Cn[ol]={size:16,setter:fr},Cn[Co]={size:4,setter:Ki},Cn[fl]={size:8,setter:Ki},Cn[ml]={size:12,setter:Ki},Cn[pl]={size:16,setter:Ki},Cn[sl]={size:4,setter:fr},Cn[ll]={size:8,setter:fr},Cn[cl]={size:12,setter:fr},Cn[ul]={size:16,setter:fr},Cn[al]={size:4,setter:No,count:2},Cn[dl]={size:9,setter:No,count:3},Cn[hl]={size:16,setter:No,count:4};const Fa=/ERROR:\s*\d+:(\d+)/gi;function Ya(t,e="",n=0){const r=[...e.matchAll(Fa)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const bs=/^[ \t]*\n/;function Xl(t){let e=0;return bs.test(t)&&(e=1,t=t.replace(bs,"")),{lineOffset:e,shaderSource:t}}function La(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function Ca(t,e,n,r){if(r=r||Yo,!t.getShaderParameter(n,Lu)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=Xl(t.getShaderSource(n)),l=`${Ya(a,i,o)}\nError compiling ${Us(t,e)}: ${i}`;return r(l),l}return""}function Jo(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Yo,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const Ha=["VERTEX_SHADER","FRAGMENT_SHADER"];function Na(t,e){return e.indexOf("frag")>=0?Hu:e.indexOf("vert")>=0?Nu:void 0}function Ja(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const Ea=(t=0)=>new Promise((e=>setTimeout(e,t)));function ka(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=Jo(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=$s(i),o=e?e.text:i;let a=t[Ha[n]];e&&e.type&&(a=Na(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,Xl(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||Ju))}return t.linkProgram(r),r}function Ua(t,e,n,r,i){const o=Jo(n,r,i),a=new Set(e),l=ka(t,e,o);function s(t,e){const n=Aa(t,e,o.errorCallback);return n&&Ja(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;Ba(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function Ba(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await Ea(i),i=1e3/60}while(!r(t,e))}function Aa(t,e,n){if(n=n||Yo,!t.getProgramParameter(e,Cu)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>Ca(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function Ma(t,e,n,r,i){return Ua(t,e,n,r,i)}function Wl(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const Ka=/(\.|\[|]|\w+)/g,ja=t=>t>="0"&&t<="9";function za(t,e,n,r){const i=t.split(Ka).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=ja(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){Vl(t,e)}}(l),a+=t}}}function Oa(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,qs);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(Wl(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,za(l,t,o,i)}}return i}function Pa(t,e){const n={},r=t.getProgramParameter(e,ku);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function _a(t,e){const n=t.getProgramParameter(e,qs),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,Uu);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,Bu),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,Au),size:t.getActiveUniformBlockParameter(e,n,Mu),uniformIndices:t.getActiveUniformBlockParameter(e,n,Ku)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function Vl(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):Vl(t[n],e[n])}}function Rl(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)Rl(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function Qa(t,e){const n={},r=t.getProgramParameter(e,Eu);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(Wl(r))continue;const o=t.getAttribLocation(e,r.name),a=Cn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function Da(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function $a(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(Da(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(Yu,n.indices))}function ys(t,e){const n={program:e,uniformSetters:Oa(t,e),attribSetters:Qa(t,e)};return Pr(t)&&(n.uniformBlockSpec=_a(t,e),n.transformFeedbackInfo=Pa(t,e)),n}const qa=/\s|{|}|;/;function t0(t,e,n,r,i){const o=Jo(n,r,i),a=[];if(e=e.map((function(t){if(!qa.test(t)){const e=$s(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return La(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:ys(t,n))});const s=Ma(t,e,o);return s?ys(t,s):null}const e0=4,gs=5123;function n0(t,e,n,r,i,o){n=void 0===n?e0:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?gs:e.elementType,i,o):t.drawElements(n,s,void 0===l?gs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const xl=36160,li=36161,r0=3553,i0=5121,o0=6402,s0=6408,l0=33190,c0=36012,u0=35056,a0=36013,d0=32854,h0=32855,f0=36194,Il=33189,Sl=6401,Tl=36168,Eo=34041,co=36064,ji=36096,wl=36128,ko=33306,uo=33071,ao=9729,m0=[{format:s0,type:i0,min:ao,wrap:uo},{format:Eo}],$n={};function p0(t,e){return $n[t]||$n[e]}$n[Eo]=ko,$n[Sl]=wl,$n[Tl]=wl,$n[o0]=ji,$n[Il]=ji,$n[l0]=ji,$n[c0]=ji,$n[u0]=ko,$n[a0]=ko;const mr={};function b0(t){return mr[t]}mr[d0]=!0,mr[h0]=!0,mr[f0]=!0,mr[Eo]=!0,mr[Il]=!0,mr[Sl]=!0,mr[Tl]=!0;const y0=32;function g0(t){return t>=co&&t<co+y0}function Hi(t,e,n,r){const i=xl,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||m0).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||p0(u,e.internalFormat);if(d||(d=co+o),g0(d)&&a.push(d),!s)if(void 0!==c||b0(u))s=t.createRenderbuffer(),t.bindRenderbuffer(li,s),c>1?t.renderbufferStorageMultisample(li,c,u,n,r):t.renderbufferStorage(li,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||ao,i.mag=i.mag||i.minMag||ao,i.wrapS=i.wrapS||i.wrap||uo,i.wrapT=i.wrapT||i.wrap||uo),s=Ds(t,i)}if(T1(t,s))t.framebufferRenderbuffer(i,d,li,s);else{if(!xo(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||r0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function Z0(t,e,n){n=n||xl,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function bn(t,e){return()=>e instanceof WebGLTexture?e:Ds(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Zs=2;class Vr{constructor(t){Wt(this,"id","_"),Wt(this,"context"),Wt(this,"output"),Wt(this,"fbi"),Wt(this,"options"),Wt(this,"programInfo"),Wt(this,"bufferInfo"),Wt(this,"profiler"),Wt(this,"lastRun");const{context:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=t0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=q1(this.context,this.getBuffers()),this.fbi=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),$a(this.context,this.programInfo,this.bufferInfo),Rl(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),Z0(this.context,this.options.disableFramebuffer?null:this.fbi),n0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const v0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",G0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class X0 extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return v0+this.createLoopFunction()}getVertexShader(){return G0}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const W0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",V0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class Uo extends Vr{getFragmentShader(){return W0}getVertexShader(){return V0}}class Bo{constructor(){Wt(this,"steps",[]),Wt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class Ao extends Bo{constructor(){super(...arguments),Wt(this,"preciseMaskEnabled",!1)}}const R0=10,x0=2,I0=8;class S0 extends Ao{constructor(t,e){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),Wt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new X0({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new Uo({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:bn(t,this.inputImage),mask:bn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:bn(t,this.blur.output),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class Fl extends Ao{constructor(t){super(),Wt(this,"inputImage"),Wt(this,"inputBackgroundImage"),Wt(this,"inputMask"),Wt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new Uo({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:bn(t,this.inputBackgroundImage),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class T0 extends Fl{constructor(){super(...arguments),Wt(this,"frameReader"),Wt(this,"preciseMaskEnabled",!0)}set inputVideo(t){this.frameReader=t.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}const w0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",F0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var Mo=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))(Mo||{});class Yl extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return w0+this.createLoopFunction()}getVertexShader(){return F0}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class Y0 extends Ao{constructor(t,e){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new Yl({...n,radius:e,type:Mo.GAUSSIAN}),i=new Uo({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:bn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:bn(t,this.inputImage),foreground:bn(t,r.output),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class Ko extends Vr{constructor(t){super(t),Wt(this,"fbi2"),this.fbi2=Hi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Hi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const L0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",C0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class H0 extends Ko{getFragmentShader(){return L0}getVertexShader(){return C0}}const N0="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",J0="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class E0 extends Vr{getFragmentShader(){return N0}getVertexShader(){return J0}}const k0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",U0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class B0 extends Vr{getFragmentShader(){return k0}getVertexShader(){return U0}}const A0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",M0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class K0 extends Ko{getFragmentShader(){return A0}getVertexShader(){return M0}}const j0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",z0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class O0 extends Ko{getFragmentShader(){return j0}getVertexShader(){return z0}}class P0 extends Bo{constructor(t,e,n){super(),Wt(this,"inputImage"),Wt(this,"inputMask"),Wt(this,"previousInputImage"),Wt(this,"previousInputMask"),Wt(this,"output"),Wt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1}),this.context=t;const r={context:t,height:n,width:e},i=new H0(r),o=new Yl({...r,radius:1,type:Mo.GAUSSIAN}),a=new O0(r),l=new K0(r),s=new B0(r),c=new E0({...r});let u=1;u*=Math.max(2.5,480/144);const d=Math.max(1,.66*Math.sqrt(u)),h=1/640,f=1/480;this.addStep({program:i,getUniforms:()=>({image_now:bn(t,this.inputImage),image_before:bn(t,this.previousInputImage),mask_now:bn(t,this.inputMask),mask_before:bn(t,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:a,getUniforms:()=>({inputs:bn(t,this.inputMask),threshold:bn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:bn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:bn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:bn(t,l.output)})}),this.addStep({program:c,getUniforms:()=>({input_frame:bn(t,this.inputImage),segmentation_mask:bn(t,this.inputMask),threshold:bn(t,o.output),texel_size:[h,f],step:d,radius:u,offset:d>1?.5*d:0,sigma_texel:Math.max(h,f)*u,sigma_color:.1})}),this.output=c.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}}const _0="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",Q0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class D0 extends Vr{getFragmentShader(){return _0}getVertexShader(){return Q0}}class $0 extends Bo{constructor(t,e,n){super(),Wt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new D0({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:bn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}class q0{constructor(t){Wt(this,"resize"),Wt(this,"canvas"),Wt(this,"context"),this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=t.width,this.canvas.height=t.height,this.resize=new $0(this.context,t.width,t.height)}resizeForeground(t,e){this.canvas.width=t,this.canvas.height=e,this.resize.resizeOutput(t,e)}async process(t){var e,n;return this.canvas.width=this.canvas.width,null==(e=this.resize)||e.setData(t),null==(n=this.resize)||n.run(),this.canvas}}class t3{constructor(t,e){Wt(this,"improveMaskSegmentation"),Wt(this,"backgroundResizer"),Wt(this,"backgroundImage"),Wt(this,"backgroundVideo"),Wt(this,"profiler"),Wt(this,"activePipeline"),Wt(this,"canvas"),Wt(this,"options"),Wt(this,"context"),Wt(this,"virtualBGImage"),this.id=t,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=e.foregroundWidth,this.canvas.height=e.foregroundHeight,this.improveMaskSegmentation=new P0(this.context,e.maskWidth,e.maskHeight),this.backgroundImage=new Fl(this.context),this.backgroundVideo=new T0(this.context),this.backgroundResizer=new q0({width:e.foregroundWidth,height:e.foregroundHeight})}setBackgroundOptions(t){switch(t.transformerType){case"BackgroundBlur":this.activePipeline=new S0(this.context,this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.activePipeline=new Y0(this.context,this.getBlurSize(t.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break;default:throw`Unknown transformer type [${t.transformerType}]`}this.options=t}setFlickeringOptions(t){var e;null==(e=this.improveMaskSegmentation)||e.setOptions(t)}setVideoBGReadable(t){this.backgroundVideo.inputVideo=t}async setVirtualBGImage(t){this.virtualBGImage=t,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(t)}async process(t,e){var n,r,i,o,a,l,s;if(this.activePipeline&&t.width&&(null==e?void 0:e.width)){const c=`[${this.id}] background-filter`;null==(n=this.profiler)||n.pushContext(c);let u=e;((null==(r=this.options)?void 0:r.selfieSegmentationType)&&"PRECISE"===(null==(i=this.options)?void 0:i.selfieSegmentationType)||!(null!=(o=this.options)&&o.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(t,e),this.improveMaskSegmentation.run(),u=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),null==(a=this.activePipeline)||a.setData(t,u),null==(l=this.activePipeline)||l.run(),null==(s=this.profiler)||s.popContext(c)}}async resizeForeground(t,e){var n;this.canvas.width=t,this.canvas.height=e,this.backgroundImage.resizeOutput(t,e),this.backgroundVideo.resizeOutput(t,e),this.backgroundResizer.resizeForeground(t,e),null==(n=this.activePipeline)||n.resizeOutput(t,e),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(t){const e=new g1(this.context);return this.profiler=e,e.start(),await Ss(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}getBlurSize(t=di.Low){switch(t){case di.Low:return 5;case di.High:return 12}return t}}class e3{constructor(){Wt(this,"selfieSegmentation",new Ws),Wt(this,"backgroundFilter"),Wt(this,"reporter",new b1),Wt(this,"previousDimensions",{width:0,height:0}),Wt(this,"backgroundOptions")}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath);const{width:n,height:r}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new t3(t,{foregroundWidth:1,foregroundHeight:1,maskWidth:n,maskHeight:r}),this.report({variation:"Create"})}async transform(t,e){var n,r,i,o;const a=null!=(n=t.timestamp)?n:0,l=await createImageBitmap(t),s=await this.selfieSegmentation.process(l);s?((l.width!==this.previousDimensions.width||l.height!==this.previousDimensions.height)&&(this.previousDimensions.width=l.width,this.previousDimensions.height=l.height,await(null==(r=this.backgroundFilter)?void 0:r.resizeForeground(l.width,l.height))),await(null==(i=this.backgroundFilter)?void 0:i.process(l,s)),t.close(),e.enqueue(new VideoFrame(null==(o=this.backgroundFilter)?void 0:o.canvas,{timestamp:a,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;this.backgroundOptions=t,await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t)),this.report({variation:"Update"})}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t),this.report({variation:"Update"})}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}getTransformerType(){var t,e;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"}report(t){var e;this.reporter.send({version:y1,action:"MlTransformers",transformerType:null==(e=this.backgroundOptions)?void 0:e.transformerType,config:JSON.stringify(this.backgroundOptions),...t})}}const jo=class{constructor(){Wt(this,"backgroundTransformer",new e3),Wt(this,"mediaProcessor",new G2),Wt(this,"rate",30),Wt(this,"resolveOnMediaProcessor"),Wt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){f2(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let ho=jo;A2("ProcessorWorker",jo);const Ll="dmFyIGlsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgb2w9KHEsWCx6KT0+WCBpbiBxP2lsKHEsWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pOnFbWF09ejt2YXIgcD0ocSxYLHopPT4ob2wocSx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLHopLHopOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBxKHIsZSl7cmV0dXJuIGdsb2JhbFRoaXNbcl18fChnbG9iYWxUaGlzW3JdPWUpLGdsb2JhbFRoaXNbcl19Y29uc3QgWD1xKCJnbG9iYWxzIix7fSk7dmFyIHo9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHp8fHt9KTtmdW5jdGlvbiBwaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIHplKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+cGkobykpKX1xKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gU3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIFdlKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxXZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sV2Uoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIHlpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7emUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFJyPXEoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gX2kocixlKXtlLndvcmtlcklkPXIsU3IoKSYmKFJyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIHhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPVJyW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7V2UobixYKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBnaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIGJpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1dlKHIuYXJnc1swXSxYKSx6ZShyLHt9KX1mdW5jdGlvbiB2aSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIHouSU5JVDp4aSh0LHIpO2JyZWFrO2Nhc2Ugei5GT1JXQVJEOnlpKHQscik7YnJlYWs7Y2FzZSB6LlRFUk1JTkFURTpnaSh0LHIpO2JyZWFrO2Nhc2Ugei5HTE9CQUxTX1NZTkM6YmkodCk7YnJlYWt9fX1TcigpJiZ2aSgpO3ZhciBFaT1PYmplY3QuZGVmaW5lUHJvcGVydHksVGk9KHIsZSx0KT0+ZSBpbiByP0VpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxBPShyLGUsdCk9PihUaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y2xhc3MgSnt9QShKLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksQShKLCJlcnJvcnMiLHt0cmFuc2Zvcm1lcl9ub25lOiJObyB0cmFuc2Zvcm1lcnMgcHJvdmlkZWQiLHRyYW5zZm9ybWVyX3N0YXJ0OiJDYW5ub3Qgc3RhcnQgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX3RyYW5zZm9ybToiQ2Fubm90IHRyYW5zZm9ybSBmcmFtZSIsdHJhbnNmb3JtZXJfZmx1c2g6IkNhbm5vdCBmbHVzaCB0cmFuc2Zvcm1lciIscmVhZGFibGVfbnVsbDoiUmVhZGFibGUgaXMgbnVsbCIsd3JpdGFibGVfbnVsbDoiV3JpdGFibGUgaXMgbnVsbCJ9KTtjb25zdCBlZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxSZT1uZXcgV2Vha01hcCxSdD1TeW1ib2woImFueVByb2R1Y2VyIiksSXI9UHJvbWlzZS5yZXNvbHZlKCksSGU9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksWWU9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgSXQ9ITE7ZnVuY3Rpb24gYmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBqZShyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2ZShyLGUpe2NvbnN0IHQ9VmUuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBJZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpSdCxuPVJlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gQWkocixlLHQpe2NvbnN0IG49UmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhSdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KFJ0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIEZyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpSWUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlJZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIFByKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIERyO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighRHIuaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBGdD1yPT5yPT09SGV8fHI9PT1ZZTtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Qcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIEl0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fEl0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7SXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtlZS5zZXQodGhpcyxuZXcgU2V0KSxWZS5zZXQodGhpcyxuZXcgTWFwKSxSZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9Pnt0cnl7bz1KU09OLnN0cmluZ2lmeShvKX1jYXRjaHtvPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhvKS5qb2luKCIsIil9YH10eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGZlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7amUodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpYmUobiksdmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksRnQobil8fHRoaXMuZW1pdChIZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtqZSh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSliZShuKSx2ZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLEZ0KG4pfHx0aGlzLmVtaXQoWWUse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpYmUodCk7cmV0dXJuIEZyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe2JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksQWkodGhpcyxlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPUZ0KGUpP1tdOlsuLi5pXTthd2FpdCBJcixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtiZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBJcjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gamUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxlZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChIZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBGcih0aGlzKX1vZmZBbnkoZSl7amUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChZZSx7bGlzdGVuZXI6ZX0pLGVlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7dmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49SWUodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7ZWUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9ZWUuZ2V0KHRoaXMpLnNpemUrdmUodGhpcyxuKS5zaXplK0llKHRoaXMsbikuc2l6ZStJZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmYmUobiksdCs9ZWUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9UHIodCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IERyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpIZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6WWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgUHQ9ZmU7ZnVuY3Rpb24gd2kocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIFNpKHIpe2lmKHdpKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIER0KHIpe3JldHVybiBTaShyKS5tZXNzYWdlfXZhciBSaT1PYmplY3QuZGVmaW5lUHJvcGVydHksSWk9KHIsZSx0KT0+ZSBpbiByP1JpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxGaT0ocixlLHQpPT4oSWkocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NvbnN0IFBpPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsRGk9Imh0dHBzOi8vIixOaT0xZTQ7bGV0IFhlO2NvbnN0IE1pPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBVaSgpe2lmKCFYZSYmKFhlPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWGUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWGUoTWkpfWNvbnN0IE09W107Zm9yKGxldCByPTA7cjwyNTY7KytyKU0ucHVzaCgocisyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24ga2kocixlPTApe3JldHVybihNW3JbZSswXV0rTVtyW2UrMV1dK01bcltlKzJdXStNW3JbZSszXV0rIi0iK01bcltlKzRdXStNW3JbZSs1XV0rIi0iK01bcltlKzZdXStNW3JbZSs3XV0rIi0iK01bcltlKzhdXStNW3JbZSs5XV0rIi0iK01bcltlKzEwXV0rTVtyW2UrMTFdXStNW3JbZSsxMl1dK01bcltlKzEzXV0rTVtyW2UrMTRdXStNW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IENpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLE5yPXtyYW5kb21VVUlEOkNpfTtmdW5jdGlvbiBPaShyLGUsdCl7aWYoTnIucmFuZG9tVVVJRCYmIWUmJiFyKXJldHVybiBOci5yYW5kb21VVUlEKCk7cj1yfHx7fTtjb25zdCBuPXIucmFuZG9tfHwoci5ybmd8fFVpKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IobGV0IGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4ga2kobil9ZnVuY3Rpb24gTnQocixlKXtyZXR1cm4gZ2xvYmFsVGhpc1tyXXx8KGdsb2JhbFRoaXNbcl09ZSksZ2xvYmFsVGhpc1tyXX1jb25zdCB0ZT1OdCgiZ2xvYmFscyIse30pO3ZhciBsZT0ocj0+KHIuSU5JVD0iSU5JVCIsci5GT1JXQVJEPSJGT1JXQVJEIixyLlRFUk1JTkFURT0iVEVSTUlOQVRFIixyLkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIixyKSkobGV8fHt9KTtmdW5jdGlvbiBNcihyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWxldCBCaT0wO2Z1bmN0aW9uIExpKHIsZSx0LG4saSl7Y29uc3Qgbz1CaSsrO3JldHVybiByLnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6ZSxmdW5jdGlvbk5hbWU6dCxhcmdzOm59LG4uZmlsdGVyKHM9Pk1yKHMpKSksbmV3IFByb21pc2Uocz0+e2k9PW51bGx8fGkuc2V0KG8scyl9KX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89Pk1yKG8pKSl9Y29uc3QgVXI9TnQoIndvcmtlcml6ZWQiLHt9KTtmdW5jdGlvbiBrcigpe3JldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9YXN5bmMgZnVuY3Rpb24gR2koKXtpZihrcigpKUZlKHt0eXBlOmxlLkdMT0JBTFNfU1lOQ30sdGUpO2Vsc2V7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBpbiBVcil7Y29uc3R7d29ya2VyOnQscmVzb2x2ZXJzOm59PVVyW2VdLndvcmtlckNvbnRleHQ7dCYmci5wdXNoKExpKHQsbGUuR0xPQkFMU19TWU5DLCIiLFt0ZV0sbikpfWF3YWl0IFByb21pc2UuYWxsKHIpfX1mdW5jdGlvbiBRZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sUWUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFFlKHJbdF0sZVt0XSkpOmVbdF09clt0XX1hc3luYyBmdW5jdGlvbiAkaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO0ZlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCB6aT1OdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBXaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT16aVt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1FlKG4sdGUpLEZlKHIsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIFZpKHIsZSl7Y29uc3R7YXJnczp0fT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnQhPW51bGw/dDpbXSkpLEZlKHIsbil9ZnVuY3Rpb24gSGkocil7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7UWUoci5hcmdzWzBdLHRlKSxGZShyLHt9KX1mdW5jdGlvbiBZaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIGxlLklOSVQ6V2kodCxyKTticmVhaztjYXNlIGxlLkZPUldBUkQ6JGkodCxyKTticmVhaztjYXNlIGxlLlRFUk1JTkFURTpWaSh0LHIpO2JyZWFrO2Nhc2UgbGUuR0xPQkFMU19TWU5DOkhpKHQpO2JyZWFrfX19a3IoKSYmWWkoKTtmdW5jdGlvbiBqaShyLGUpe3JldHVybiB0ZVtyXXx8KHRlW3JdPWUpLFsoKT0+dGVbcl0sYXN5bmMgdD0+e3RlW3JdPXQsYXdhaXQgR2koKX1dfWZ1bmN0aW9uIFhpKHIsZSl7cmV0dXJuIGppKHIsZSl9Y29uc3RbUWksS2ldPVhpKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIHFpKHIpe0tpKHIpfWZ1bmN0aW9uIE10KCl7cmV0dXJuIFFpKCl9Y2xhc3MgVXR7Y29uc3RydWN0b3IoZSl7RmkodGhpcywidXVpZCIsT2koKSksdGhpcy5jb25maWc9ZX1hc3luYyBzZW5kKGUpe3ZhciB0LG4saTtjb25zdHthcHBJZDpvLHNvdXJjZVR5cGU6c309KHQ9TXQoKSkhPW51bGw/dDp7fTtpZighb3x8IXMpcmV0dXJuIm1ldGFkYXRhIG1pc3NpbmciO2NvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldFRpbWVvdXQoKCk9PmEuYWJvcnQoKSxOaSk7cmV0dXJuIGF3YWl0KChpPShuPXRoaXMuY29uZmlnKT09bnVsbD92b2lkIDA6bi5mZXRjaCkhPW51bGw/aTpmZXRjaCkodGhpcy5nZXRVcmwoKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuZ2V0SGVhZGVycygpLGJvZHk6SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFJlcG9ydChlKSksc2lnbmFsOmEuc2lnbmFsfSksY2xlYXJUaW1lb3V0KHUpLCJzdWNjZXNzIn1nZXRVcmwoKXt2YXIgZTtsZXQgdD0oZT1NdCgpLnByb3h5VXJsKSE9bnVsbD9lOkRpO3JldHVybiB0Kz0odC5hdCgtMSk9PT0iLyI/IiI6Ii8iKStQaSx0fWdldEhlYWRlcnMoKXtyZXR1cm57IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX1idWlsZFJlcG9ydChlKXtjb25zdCB0PU10KCk7cmV0dXJue2d1aWQ6dGhpcy51dWlkLC4uLmUsYXBwbGljYXRpb25JZDp0LmFwcElkLHRpbWVzdGFtcDpEYXRlLm5vdygpLHByb3h5VXJsOnQucHJveHlVcmwsc291cmNlOnQuc291cmNlVHlwZX19fWNvbnN0IEtlPSIyLjAuMiI7Y2xhc3MgSml7Y29uc3RydWN0b3IoZSl7QSh0aGlzLCJmcmFtZVRyYW5zZm9ybWVkQ291bnQiLDApLEEodGhpcywiZnJhbWVGcm9tU291cmNlQ291bnQiLDApLEEodGhpcywic3RhcnRBdCIsMCksQSh0aGlzLCJyZXBvcnRlciIpLHRoaXMuY29uZmlnPWUsdGhpcy5yZXBvcnRlcj1uZXcgVXQoZSl9YXN5bmMgb25GcmFtZUZyb21Tb3VyY2UoKXt0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50Kyt9Z2V0IGZwcygpe2NvbnN0e3N0YXJ0QXQ6ZSxmcmFtZUZyb21Tb3VyY2VDb3VudDp0fT10aGlzLG49KERhdGUubm93KCktZSkvMWUzO3JldHVybiB0L259YXN5bmMgb25GcmFtZVRyYW5zZm9ybWVkKGU9e30sdD0hMSl7dGhpcy5zdGFydEF0PT09MCYmKHRoaXMuc3RhcnRBdD1EYXRlLm5vdygpKSx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudCsrO2NvbnN0e3N0YXJ0QXQ6bixmcmFtZVRyYW5zZm9ybWVkQ291bnQ6aSxmcmFtZUZyb21Tb3VyY2VDb3VudDpvfT10aGlzLHM9RGF0ZS5ub3coKSxhPShzLW4pLzFlMyx1PWkvYSxmPW8vYTtyZXR1cm4gdHx8dGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ+PXRoaXMuY29uZmlnLmxvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ/KHRoaXMuZnJhbWVGcm9tU291cmNlQ291bnQ9MCx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD0wLHRoaXMuc3RhcnRBdD1zLHRoaXMucmVwb3J0ZXIuY29uZmlnPXRoaXMuY29uZmlnLHRoaXMucmVwb3J0ZXIuc2VuZCh7Li4udGhpcy5jb25maWcucmVwb3J0LHZhcmlhdGlvbjoiUW9TIixmcHM6Zix0cmFuc2Zvcm1lZEZwczp1LGZyYW1lc1RyYW5zZm9ybWVkOmksLi4uZX0pKToic3VjY2VzcyJ9fXZhciBrdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShrdHx8e30pO2NvbnN0IFppPTUwMCxlbz0uODtjbGFzcyB0byBleHRlbmRzIFB0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSxBKHRoaXMsInJlcG9ydGVyXyIsbmV3IFV0KSxBKHRoaXMsInJlcG9ydGVyUW9zXyIsbmV3IEppKHtsb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50OlppLHJlcG9ydDp7dmVyc2lvbjpLZX19KSksQSh0aGlzLCJ0cmFuc2Zvcm1lclR5cGVfIiksQSh0aGlzLCJ0cmFuc2Zvcm1lcl8iKSxBKHRoaXMsInNob3VsZFN0b3BfIiksQSh0aGlzLCJpc0ZsYXNoZWRfIiksQSh0aGlzLCJtZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfIiksQSh0aGlzLCJ2aWRlb0hlaWdodF8iKSxBKHRoaXMsInZpZGVvV2lkdGhfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSxBKHRoaXMsImluZGV4XyIpLEEodGhpcywiY29udHJvbGxlcl8iKSx0aGlzLmluZGV4Xz10LHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfc3RhcnQsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJzdGFydCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbixpLG8scztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KG49ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9uOjAsdGhpcy52aWRlb1dpZHRoXz0oaT1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/aTowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpKLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKmVvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246S2UsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIHJvIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInRyYWNrRXhwZWN0ZWRSYXRlXyIpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IHRvKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIG5vIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLEEodGhpcywicmVwb3J0ZXJfIiksQSh0aGlzLCJwaXBlbGluZV8iKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInJlYWRhYmxlXyIpLEEodGhpcywid3JpdGFibGVfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnJlcG9ydGVyXz1uZXcgVXQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOkouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpKLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOkouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IHJvKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixpPT57biYmKGk9PT0icGlwZWxpbmVfc3RhcnRlZCI/aT1rdC5waXBlbGluZV9yZXN0YXJ0ZWQ6aT09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYoaT1rdC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixpKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2goaT0+e3QoaSl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOkoudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIGlvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvbz0ocixlLHQpPT5lIGluIHI/aW8ocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LHNvPShyLGUsdCk9PihvbyhyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgYW89ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix1bz0iaHR0cHM6Ly8iLGNvPTFlNDtsZXQgcWU7Y29uc3QgZm89bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGxvKCl7aWYoIXFlJiYocWU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFxZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBxZShmbyl9Y29uc3QgVT1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpVS5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBtbyhyLGU9MCl7cmV0dXJuKFVbcltlKzBdXStVW3JbZSsxXV0rVVtyW2UrMl1dK1VbcltlKzNdXSsiLSIrVVtyW2UrNF1dK1VbcltlKzVdXSsiLSIrVVtyW2UrNl1dK1VbcltlKzddXSsiLSIrVVtyW2UrOF1dK1VbcltlKzldXSsiLSIrVVtyW2UrMTBdXStVW3JbZSsxMV1dK1VbcltlKzEyXV0rVVtyW2UrMTNdXStVW3JbZSsxNF1dK1VbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgaG89dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6aG99O2Z1bmN0aW9uIHBvKHIsZSx0KXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8bG8pKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBtbyhuKX1mdW5jdGlvbiBDdChyLGUpe3JldHVybiBnbG9iYWxUaGlzW3JdfHwoZ2xvYmFsVGhpc1tyXT1lKSxnbG9iYWxUaGlzW3JdfWNvbnN0IHJlPUN0KCJnbG9iYWxzIix7fSk7dmFyIGRlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShkZXx8e30pO2Z1bmN0aW9uIE9yKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IHlvPTA7ZnVuY3Rpb24gX28ocixlLHQsbixpKXtjb25zdCBvPXlvKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+T3IocykpKSxuZXcgUHJvbWlzZShzPT57aT09bnVsbHx8aS5zZXQobyxzKX0pfWZ1bmN0aW9uIFBlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+T3IobykpKX1jb25zdCBCcj1DdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB4bygpe2lmKExyKCkpUGUoe3R5cGU6ZGUuR0xPQkFMU19TWU5DfSxyZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIEJyKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09QnJbZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goX28odCxkZS5HTE9CQUxTX1NZTkMsIiIsW3JlXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIEplKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxKZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sSmUoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGdvKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7UGUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IGJvPUN0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIHZvKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPWJvW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7SmUobixyZSksUGUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gRW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksUGUocixuKX1mdW5jdGlvbiBUbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtKZShyLmFyZ3NbMF0scmUpLFBlKHIse30pfWZ1bmN0aW9uIEFvKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgZGUuSU5JVDp2byh0LHIpO2JyZWFrO2Nhc2UgZGUuRk9SV0FSRDpnbyh0LHIpO2JyZWFrO2Nhc2UgZGUuVEVSTUlOQVRFOkVvKHQscik7YnJlYWs7Y2FzZSBkZS5HTE9CQUxTX1NZTkM6VG8odCk7YnJlYWt9fX1McigpJiZBbygpO2Z1bmN0aW9uIHdvKHIsZSl7cmV0dXJuIHJlW3JdfHwocmVbcl09ZSksWygpPT5yZVtyXSxhc3luYyB0PT57cmVbcl09dCxhd2FpdCB4bygpfV19ZnVuY3Rpb24gU28ocixlKXtyZXR1cm4gd28ocixlKX1jb25zdFtSbyxzbF09U28oIm1ldGFkYXRhIik7ZnVuY3Rpb24gT3QoKXtyZXR1cm4gUm8oKX1jbGFzcyBJb3tjb25zdHJ1Y3RvcihlKXtzbyh0aGlzLCJ1dWlkIixwbygpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixpO2NvbnN0e2FwcElkOm8sc291cmNlVHlwZTpzfT0odD1PdCgpKSE9bnVsbD90Ont9O2lmKCFvfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLGNvKTtyZXR1cm4gYXdhaXQoKGk9KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9pOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPU90KCkucHJveHlVcmwpIT1udWxsP2U6dW87cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK2FvLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9T3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgRm89IjQuMy42Ijt2YXIgWmU9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShaZXx8e30pO2FzeW5jIGZ1bmN0aW9uIEdyKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBQb3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IEdyKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMy4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgQnQ9NTEyMCxEZT01MTIxLEx0PTUxMjIsR3Q9NTEyMywkdD01MTI0LHp0PTUxMjUsV3Q9NTEyNixEbz0zMjgxOSxObz0zMjgyMCxNbz0zMzYzNSxVbz01MTMxLGtvPTMzNjQwLENvPTM1ODk5LE9vPTM1OTAyLEJvPTM2MjY5LExvPTM0MDQyLCRyPXt9O3tjb25zdCByPSRyO3JbQnRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbTHRdPUludDE2QXJyYXkscltHdF09VWludDE2QXJyYXksclskdF09SW50MzJBcnJheSxyW3p0XT1VaW50MzJBcnJheSxyW1d0XT1GbG9hdDMyQXJyYXkscltEb109VWludDE2QXJyYXkscltOb109VWludDE2QXJyYXkscltNb109VWludDE2QXJyYXkscltVb109VWludDE2QXJyYXkscltrb109VWludDMyQXJyYXkscltDb109VWludDMyQXJyYXkscltPb109VWludDMyQXJyYXkscltCb109VWludDMyQXJyYXkscltMb109VWludDMyQXJyYXl9ZnVuY3Rpb24gVnQocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gQnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuICR0O2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4genQ7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24genIocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gQnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYocj09PUludDMyQXJyYXkpcmV0dXJuICR0O2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4genQ7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gV3Iocil7Y29uc3QgZT0kcltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGV0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVnIoLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBIcj1uZXcgTWFwO2Z1bmN0aW9uIHR0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Ici5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsSHIuc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBHbyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ0dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uICRvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnR0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gSHQocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnR0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIHpvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ0dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBZcj0zNTA0NCxtZT0zNDk2MixXbz0zNDk2MyxWbz0zNDY2MCxIbz01MTIwLFlvPTUxMjEsam89NTEyMixYbz01MTIzLFFvPTUxMjQsS289NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFvKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHxZcil9ZnVuY3Rpb24gUXIocixlLHQsbil7aWYoR28ocixlKSlyZXR1cm4gZTt0PXR8fG1lO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcW8ocix0LGksZSxuKSxpfWZ1bmN0aW9uIEtyKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIEpvKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBabyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZXM9L2Nvb3JkfHRleHR1cmUvaSx0cz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gcnMocixlKXtsZXQgdDtpZihlcy50ZXN0KHIpP3Q9Mjp0cy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBucyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxycyhlLHR8fFpvKHIpLmxlbmd0aCl9ZnVuY3Rpb24gcXIocixlKXtpZihldChyKSlyZXR1cm4gcjtpZihldChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9ZdChyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEtyKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gaXMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/enIocik6anJ9ZnVuY3Rpb24gWXQocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9XcihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gb3MocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmlzKGUudHlwZSksYXJyYXlUeXBlOll0KGUudHlwZSl9fWZ1bmN0aW9uIHNzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1ZdChlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKG1lLG8pLHIuYnVmZmVyRGF0YShtZSxpLGUuZHJhd1R5cGV8fFlyKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp6cihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gYXMocixlLHQpe2NvbnN0IG49cXIoZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOlFyKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpWdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gdXMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFLcihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWV0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9b3M6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXNzOnM9YXM7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpkfT1zKHIsaSxuKSxoPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOkpvKGQpLHk9bnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmgsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIobWUsbnVsbCksdH1mdW5jdGlvbiBjcyhyLGUpe3JldHVybiBlPT09SG98fGU9PT1Zbz8xOmU9PT1qb3x8ZT09PVhvPzI6ZT09PVFvfHxlPT09S298fGU9PT1qcj80OjB9Y29uc3QganQ9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBmcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPGp0Lmxlbmd0aCYmKHQ9anRbbl0sISh0IGluIGV8fCh0PVhyLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1qdC5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihtZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihtZSxWbyk7ci5iaW5kQnVmZmVyKG1lLG51bGwpO2NvbnN0IHM9Y3MocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGxzKHIsZSx0KXtjb25zdCBuPXVzKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPXFyKG8sImluZGljZXMiKTtpLmluZGljZXM9UXIocixzLFdvKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9VnQocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1mcyhyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIE5lKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgSnI9ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxuZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LE1lPWV0LFpyPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxlbj02NDA2LFE9NjQwNyxGPTY0MDgsdG49NjQwOSxybj02NDEwLFVlPTY0MDIsbm49MzQwNDEscnQ9MzMwNzEsZHM9OTcyOCxtcz05NzI5LGllPTM1NTMsb2U9MzQwNjcsaGU9MzI4NzkscGU9MzU4NjYsWHQ9MzQwNjksaHM9MzQwNzAscHM9MzQwNzEseXM9MzQwNzIsX3M9MzQwNzMseHM9MzQwNzQsUXQ9MTAyNDEsS3Q9MTAyNDAsbnQ9MTAyNDIsaXQ9MTAyNDMsb249MzI4ODIsZ3M9MzMwODIsYnM9MzMwODMsdnM9MzMwODQsRXM9MzMwODUscXQ9MzMxNyxzbj0zMzE0LGFuPTMyODc4LHVuPTMzMTYsY249MzMxNSxmbj0zMjg3NyxUcz0zNzQ0MyxBcz0zNzQ0MSx3cz0zNzQ0MCxTcz0zMzMyMSxScz0zNjc1NixJcz0zMzMyNSxGcz0zMzMyNixQcz0zMzMzMCxEcz0zMzMyOSxOcz0zMzMzOCxNcz0zMzMzNyxVcz0zMzM0MCxrcz0zMzMzOSxDcz0zMzMyMyxPcz0zNjc1NyxCcz0zMzMyNyxMcz0zMzMyOCxHcz0zMzMzNiwkcz0zMzMzNSx6cz0zMzMzMixXcz0zMzMzMSxWcz0zMzMzNCxIcz0zMzMzMyxZcz0zMjg0OSxqcz0zNTkwNSxYcz0zNjE5NCxRcz0zNjc1OCxLcz0zNTg5OCxxcz0zNTkwMSxKcz0zNDg0Myxacz0zNDgzNyxlYT0zNjIyMSx0YT0zNjIzOSxyYT0zNjIxNSxuYT0zNjIzMyxpYT0zNjIwOSxvYT0zNjIyNyxzYT0zMjg1NixhYT0zNTkwNyx1YT0zNjc1OSxjYT0zMjg1NSxmYT0zMjg1NCxsYT0zMjg1NyxkYT0zNDg0MixtYT0zNDgzNixoYT0zNjIyMCxwYT0zNjIzOCx5YT0zNjk3NSxfYT0zNjIxNCx4YT0zNjIzMixnYT0zNjIyNixiYT0zNjIwOCx2YT0zMzE4OSxFYT0zMzE5MCxUYT0zNjAxMixBYT0zNjAxMyx3YT0zNTA1NixzZT01MTIwLFI9NTEyMSxvdD01MTIyLEVlPTUxMjMsc3Q9NTEyNCx5ZT01MTI1LEM9NTEyNixsbj0zMjgxOSxkbj0zMjgyMCxtbj0zMzYzNSxXPTUxMzEsa2U9MzYxOTMsSnQ9MzM2NDAsU2E9MzU4OTksUmE9MzU5MDIsSWE9MzYyNjksRmE9MzQwNDIsYXQ9MzMzMTksVGU9MzMzMjAsdXQ9NjQwMyxBZT0zNjI0NCx3ZT0zNjI0OCxfZT0zNjI0OTtsZXQgWnQ7ZnVuY3Rpb24gY3Qocil7aWYoIVp0KXtjb25zdCBlPXt9O2VbZW5dPXt0ZXh0dXJlRm9ybWF0OmVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W1IsVyxrZSxDXX0sZVt0bl09e3RleHR1cmVGb3JtYXQ6dG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUixXLGtlLENdfSxlW3JuXT17dGV4dHVyZUZvcm1hdDpybixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltSLFcsa2UsQ119LGVbUV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltSLFcsa2UsQyxtbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W1IsVyxrZSxDLGxuLGRuXX0sZVtVZV09e3RleHR1cmVGb3JtYXQ6VWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt5ZSxFZV19LGVbU3NdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW1JzXT17dGV4dHVyZUZvcm1hdDp1dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbSXNdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQyxXXX0sZVtGc109e3RleHR1cmVGb3JtYXQ6dXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQ119LGVbUHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW0RzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbenNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W0VlXX0sZVtXc109e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbb3RdfSxlW1ZzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbSHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtDc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbT3NdPXt0ZXh0dXJlRm9ybWF0OmF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtCc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltDLFddfSxlW0xzXT17dGV4dHVyZUZvcm1hdDphdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltDXX0sZVtHc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbJHNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtOc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRWVdfSxlW01zXT17dGV4dHVyZUZvcm1hdDpUZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltvdF19LGVbVXNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3llXX0sZVtrc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbc3RdfSxlW1lzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW2pzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW1hzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbUixtbl19LGVbUXNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbc2VdfSxlW0tzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQyxXLFNhXX0sZVtxc109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0MsVyxSYV19LGVbSnNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQyxXXX0sZVtac109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQ119LGVbZWFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW3RhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W0VlXX0sZVtuYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbb3RdfSxlW2lhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeWVdfSxlW29hXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbc3RdfSxlW3NhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtjYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbUixkbixKdF19LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltSLGxuXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltKdF19LGVbZGFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQyxXXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQ119LGVbaGFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3BhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltzZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0p0XX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbRWVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltvdF19LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt5ZV19LGVbdmFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbRWUseWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDpVZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0NdfSxlW3dhXT17dGV4dHVyZUZvcm1hdDpubixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltGYV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0Om5uLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0lhXX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLFp0PWV9cmV0dXJuIFp0W3JdfWZ1bmN0aW9uIFBhKHIsZSl7Y29uc3QgdD1jdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBDZShyKXtjb25zdCBlPWN0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gaG4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gRGEocixlLHQsbil7aWYoIU5lKHIpKXJldHVybiBobihlKSYmaG4odCk7Y29uc3QgaT1jdChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE5hKHIpe2NvbnN0IGU9Y3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE1hKHIsZSx0KXtyZXR1cm4gTWUoZSk/VnQoZSk6dHx8Un1mdW5jdGlvbiBmdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09b2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBTZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoVHMsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKEFzLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh3cyxlLmZsaXBZKX1mdW5jdGlvbiBwbihyKXtyLnBpeGVsU3RvcmVpKHF0LDQpLE5lKHIpJiYoci5waXhlbFN0b3JlaShzbiwwKSxyLnBpeGVsU3RvcmVpKGFuLDApLHIucGl4ZWxTdG9yZWkodW4sMCksci5waXhlbFN0b3JlaShjbiwwKSxyLnBpeGVsU3RvcmVpKGZuLDApKX1mdW5jdGlvbiBVYShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsUXQsbi5taW5NYWcpLHQuY2FsbChyLGUsS3Qsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxRdCxuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsS3Qsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsbnQsbi53cmFwKSx0LmNhbGwocixlLGl0LG4ud3JhcCksKGU9PT1oZXx8em8ocixlKSkmJnQuY2FsbChyLGUsb24sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxvbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLG50LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsaXQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUsZ3Msbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLGJzLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSx2cyxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSxFcyxuLm1heExldmVsKX1mdW5jdGlvbiB5bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLFVhKHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24ga2Eocil7cmV0dXJuIHI9cnx8bmUudGV4dHVyZUNvbG9yLE1lKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gZXIocixlLHQsbixpLG8pe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxEYShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1OYShvKT9tczpkcztyLnRleFBhcmFtZXRlcmkocyxRdCxhKSxyLnRleFBhcmFtZXRlcmkocyxLdCxhKSxyLnRleFBhcmFtZXRlcmkocyxudCxydCksci50ZXhQYXJhbWV0ZXJpKHMsaXQscnQpfX1mdW5jdGlvbiBPZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB0cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGhzLHBzLHlzLF9zLHhzXX1mdW5jdGlvbiBycihyLGUpe2NvbnN0IG49dHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gX24ocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj1DZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxoPW4udHlwZXx8Zi50eXBlO2lmKFNlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1vZSl7Y29uc3QgeT10LndpZHRoLHg9dC5oZWlnaHQ7bGV0IGwsZztpZih5LzY9PT14KWw9eCxnPVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZih4LzY9PT15KWw9eSxnPVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT14LzIpbD15LzMsZz1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09eC8zKWw9eS8yLGc9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVpyKCk7RT8oRS5jYW52YXMud2lkdGg9bCxFLmNhbnZhcy5oZWlnaHQ9bCxzPWwsYT1sLHJyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBJPWdbdi5uZHgqMiswXSpsLEQ9Z1t2Lm5keCoyKzFdKmw7RS5kcmF3SW1hZ2UodCxJLEQsbCxsLDAsMCxsLGwpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQsaCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1sLGE9bCxycihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgST1nW3YubmR4KjIrMF0qbCxEPWdbdi5uZHgqMisxXSpsO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGwsbCwwLGQsaCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEksRCxsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7U2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsZCxoLEcpLE9lKG4pJiZlcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1oZXx8aT09PXBlKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLHg9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbD14L3k7aWYobCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCBnPXQud2lkdGg9PT14PzE6MCxFPXQuaGVpZ2h0PT09eD8xOjA7ci5waXhlbFN0b3JlaShxdCwxKSxyLnBpeGVsU3RvcmVpKHNuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoYW4sMCksci5waXhlbFN0b3JlaShmbiwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxkLGgsbnVsbCk7Zm9yKGxldCB2PTA7djxsOysrdil7Y29uc3QgST12KnkqZyxEPXYqeSpFO3IucGl4ZWxTdG9yZWkodW4sSSksci5waXhlbFN0b3JlaShjbixEKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LHkseSwxLGQsaCx0KX1wbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxkLGgsdCk7T2UobikmJmVyKHIsZSxuLHMsYSx1KSx5bihyLGUsbil9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gQ2Eocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIE9hKHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFDYShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEJhKHIsZSx0KXt0PXR8fEJlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm5lLmNyb3NzT3JpZ2luLGU9T2EocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VnIodSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24geG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBucihyLGUsdCl7cmV0dXJuIHhuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6QmEocixlLHQpfWZ1bmN0aW9uIGlyKHIsZSx0KXt0PXR8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9a2EodC5jb2xvcik7aWYobj09PW9lKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKFh0K28sMCxGLDEsMSwwLEYsUixpKTtlbHNlIG49PT1oZXx8bj09PXBlP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsUixpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixSLGkpfWZ1bmN0aW9uIExhKHIsZSx0LG4pe3JldHVybiBuPW58fEJlLHQ9dHx8bmUudGV4dHVyZU9wdGlvbnMsaXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxucih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooX24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gR2EocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPUNlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxSLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1vZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtpcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBoPTY7Y29uc3QgeT1bXSx4PXRyKHIsdCk7bGV0IGw7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gZnVuY3Rpb24odixJKXstLWgsdj95LnB1c2godik6SS53aWR0aCE9PUkuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrSS5zcmMpOihTZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxoPT09NT90cigpLmZvckVhY2goZnVuY3Rpb24oRCl7ci50ZXhJbWFnZTJEKEQsbyxzLHUsZixJKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsSSksT2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLGg9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbCl9fWw9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gbnIoRSx0LmNyb3NzT3JpZ2luLGcoeFt2XSkpfSl9ZnVuY3Rpb24gJGEocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz1DZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UixmPXQudGFyZ2V0fHxwZTtpZihmIT09aGUmJmYhPT1wZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO2lyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9aS5sZW5ndGg7Y29uc3QgaD1bXTtsZXQgeTtjb25zdCB4PXQubGV2ZWx8fDA7bGV0IGw9dC53aWR0aCxnPXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gSShEKXtyZXR1cm4gZnVuY3Rpb24oRywkKXtpZigtLWQsRyloLnB1c2goRyk7ZWxzZXtpZihTZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGw9dC53aWR0aHx8JC53aWR0aCxnPXQuaGVpZ2h0fHwkLmhlaWdodCxyLnRleEltYWdlM0QoZix4LG8sbCxnLEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBaPTA7WjxFOysrWilyLnRleFN1YkltYWdlM0QoZix4LDAsMCxaLGwsZywxLGEsdSwkKX1lbHNle2xldCBaPSQsSDsoJC53aWR0aCE9PWx8fCQuaGVpZ2h0IT09ZykmJihIPVpyKCksWj1ILmNhbnZhcyxILmNhbnZhcy53aWR0aD1sLEguY2FudmFzLmhlaWdodD1nLEguZHJhd0ltYWdlKCQsMCwwLGwsZykpLHIudGV4U3ViSW1hZ2UzRChmLHgsMCwwLEQsbCxnLDEsYSx1LFopLEgmJlo9PT1ILmNhbnZhcyYmKEguY2FudmFzLndpZHRoPTAsSC5jYW52YXMuaGVpZ2h0PTApfU9lKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKGgubGVuZ3RoP2g6dm9pZCAwLGUseSl9fXk9aS5tYXAoZnVuY3Rpb24oRCxHKXtyZXR1cm4gbnIoRCx0LmNyb3NzT3JpZ2luLEkoRykpfSl9ZnVuY3Rpb24gemEocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8RixkPUNlKGYpLGg9bi5mb3JtYXR8fGQuZm9ybWF0LHk9bi50eXBlfHxNYShyLHQsZC50eXBlKTtpZihNZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPVdyKHkpO3Q9bmV3IEUodCl9Y29uc3QgeD1QYShmLHkpLGw9dC5ieXRlTGVuZ3RoL3g7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrSnIocixoKTtsZXQgZztpZihpPT09aGV8fGk9PT1wZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChsKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitsO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KGc9ZnQocixpLHMsYSxsL28pLHM9Zy53aWR0aCxhPWcuaGVpZ2h0KTpzJiYoIW98fCFhKT8oZz1mdChyLGksbyxhLGwvcyksbz1nLndpZHRoLGE9Zy5oZWlnaHQpOihnPWZ0KHIsaSxvLHMsbC9hKSxvPWcud2lkdGgscz1nLmhlaWdodCk7ZWxzZSBnPWZ0KHIsaSxvLHMsbCksbz1nLndpZHRoLHM9Zy5oZWlnaHQ7aWYocG4ociksci5waXhlbFN0b3JlaShxdCxuLnVucGFja0FsaWdubWVudHx8MSksU2UocixuKSxpPT09b2Upe2NvbnN0IEU9eC90LkJZVEVTX1BFUl9FTEVNRU5ULHY9bC82KkU7cnIocixuKS5mb3JFYWNoKEk9Pntjb25zdCBEPXYqSS5uZHgsRz10LnN1YmFycmF5KEQsRCt2KTtyLnRleEltYWdlMkQoSS5mYWNlLHUsZixvLHMsMCxoLHksRyl9KX1lbHNlIGk9PT1oZXx8aT09PXBlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLGgseSx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAsaCx5LHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTp5fX1mdW5jdGlvbiBXYShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxGLHM9Q2UobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihTZShyLHQpLG49PT1vZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChYdCtmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWhlfHxuPT09cGU/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBnbihyLGUsdCl7dD10fHxCZSxlPWV8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8aWU7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8RjtyLmJpbmRUZXh0dXJlKGksbiksaT09PW9lJiYoci50ZXhQYXJhbWV0ZXJpKGksbnQscnQpLHIudGV4UGFyYW1ldGVyaShpLGl0LHJ0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpTGEocixuLGUsdCk7ZWxzZSBpZihNZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8TWUodVswXSkpKXtjb25zdCBmPXphKHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8eG4odVswXSkpP2k9PT1vZT9HYShyLG4sZSx0KTokYShyLG4sZSx0KTooX24ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgV2EocixuLGUpO3JldHVybiBPZShlKSYmZXIocixuLGUsbyxzLGEpLHluKHIsbixlKSxufWNvbnN0IG9yPVZyO2Z1bmN0aW9uIGJuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IGx0PTMzOTg0LGR0PTM0OTYyLFZhPTM0OTYzLEhhPTM1NzEzLFlhPTM1NzE0LGphPTM1NjMyLFhhPTM1NjMzLFFhPTM1OTgxLHZuPTM1NzE4LEthPTM1NzIxLHFhPTM1OTcxLEphPTM1MzgyLFphPTM1Mzk2LGV1PTM1Mzk4LHR1PTM1MzkyLHJ1PTM1Mzk1LG10PTUxMjYsRW49MzU2NjQsVG49MzU2NjUsQW49MzU2NjYsc3I9NTEyNCx3bj0zNTY2NyxTbj0zNTY2OCxSbj0zNTY2OSxJbj0zNTY3MCxGbj0zNTY3MSxQbj0zNTY3MixEbj0zNTY3MyxObj0zNTY3NCxNbj0zNTY3NSxVbj0zNTY3NixudT0zNTY3OCxpdT0zNTY4MCxvdT0zNTY3OSxzdT0zNTY4MixhdT0zNTY4NSx1dT0zNTY4NixjdT0zNTY4NyxmdT0zNTY4OCxsdT0zNTY4OSxkdT0zNTY5MCxtdT0zNjI4OSxodT0zNjI5MixwdT0zNjI5Myxhcj01MTI1LGtuPTM2Mjk0LENuPTM2Mjk1LE9uPTM2Mjk2LHl1PTM2Mjk4LF91PTM2Mjk5LHh1PTM2MzAwLGd1PTM2MzAzLGJ1PTM2MzA2LHZ1PTM2MzA3LEV1PTM2MzA4LFR1PTM2MzExLGh0PTM1NTMscHQ9MzQwNjcsdXI9MzI4NzkseXQ9MzU4NjYsYj17fTtmdW5jdGlvbiBCbihyLGUpe3JldHVybiBiW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBBdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiB3dShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gU3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIFJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBJdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gTG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gR24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uICRuKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiB6bihyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gV24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIEZ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBQdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIER1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gTnUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBNdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIFV1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBrdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIE91KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEx1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEd1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uICR1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHp1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEIocixlLHQsbil7Y29uc3QgaT1CbihyLGUpO3JldHVybiBOZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhOyFvfHxIdChyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gTChyLGUsdCxuLGkpe2NvbnN0IG89Qm4ocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE5lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShsdCtzW2ZdKTtsZXQgZCxoO0h0KHIsdSk/KGQ9dSxoPW51bGwpOihkPXUudGV4dHVyZSxoPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGgpLHIuYmluZFRleHR1cmUobyxkKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUobHQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fWJbbXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOkF1LGFycmF5U2V0dGVyOnd1fSxiW0VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTdSxjb2xzOjJ9LGJbVG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpSdSxjb2xzOjN9LGJbQW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpJdSxjb2xzOjR9LGJbc3JdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpMbixhcnJheVNldHRlcjpHbn0sYlt3bl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOiRuLGNvbHM6Mn0sYltTbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbUm5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6V24sY29sczo0fSxiW2FyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkZ1LGFycmF5U2V0dGVyOlB1fSxiW2tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkR1LGNvbHM6Mn0sYltDbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6TnUsY29sczozfSxiW09uXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpNdSxjb2xzOjR9LGJbSW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6TG4sYXJyYXlTZXR0ZXI6R259LGJbRm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6JG4sY29sczoyfSxiW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbRG5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlduLGNvbHM6NH0sYltObl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOlV1LHJvd3M6Mixjb2xzOjJ9LGJbTW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjprdSxyb3dzOjMsY29sczozfSxiW1VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6Q3Uscm93czo0LGNvbHM6NH0sYlthdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk91LHJvd3M6Mixjb2xzOjN9LGJbdXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpMdSxyb3dzOjIsY29sczo0fSxiW2N1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6QnUscm93czozLGNvbHM6Mn0sYltmdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOiR1LHJvd3M6Myxjb2xzOjR9LGJbbHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpHdSxyb3dzOjQsY29sczoyfSxiW2R1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6enUscm93czo0LGNvbHM6M30sYltudV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbaXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW291XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYltzdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbbXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2h1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH0sYltwdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbeXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Omh0fSxiW191XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYlt4dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbZ3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2J1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpodH0sYlt2dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6dXJ9LGJbRXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW1R1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH07ZnVuY3Rpb24gX3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoZHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxtdCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxzcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB4dChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxhcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBjcihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoZHQsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fG10LGQ9Ylt1XS5zaXplKnMsaD1vLm5vcm1hbGl6ZXx8ITEseT1vLm9mZnNldHx8MCx4PWQvaTtmb3IobGV0IGw9MDtsPGk7KytsKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZStsKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZStsLGEsdSxoLGQseSt4KmwpLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbCxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbbXRdPXtzaXplOjQsc2V0dGVyOl90fSxQW0VuXT17c2l6ZTo4LHNldHRlcjpfdH0sUFtUbl09e3NpemU6MTIsc2V0dGVyOl90fSxQW0FuXT17c2l6ZToxNixzZXR0ZXI6X3R9LFBbc3JdPXtzaXplOjQsc2V0dGVyOmFlfSxQW3duXT17c2l6ZTo4LHNldHRlcjphZX0sUFtTbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW1JuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYXJdPXtzaXplOjQsc2V0dGVyOnh0fSxQW2tuXT17c2l6ZTo4LHNldHRlcjp4dH0sUFtDbl09e3NpemU6MTIsc2V0dGVyOnh0fSxQW09uXT17c2l6ZToxNixzZXR0ZXI6eHR9LFBbSW5dPXtzaXplOjQsc2V0dGVyOmFlfSxQW0ZuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtQbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW0RuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbTm5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LFBbTW5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LFBbVW5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBXdT0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIFZ1KHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoV3UpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGQ9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGRdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgVm49L15bIFx0XSpcbi87ZnVuY3Rpb24gSG4ocil7bGV0IGU9MDtyZXR1cm4gVm4udGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShWbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIEh1KHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gWXUocixlLHQsbil7aWYobj1ufHxvciwhci5nZXRTaGFkZXJQYXJhbWV0ZXIodCxIYSkpe2NvbnN0IG89ci5nZXRTaGFkZXJJbmZvTG9nKHQpLHtsaW5lT2Zmc2V0OnMsc2hhZGVyU291cmNlOmF9PUhuKHIuZ2V0U2hhZGVyU291cmNlKHQpKSx1PWAke1Z1KGEsbyxzKX0KRXJyb3IgY29tcGlsaW5nICR7SnIocixlKX06ICR7b31gO3JldHVybiBuKHUpLHV9cmV0dXJuIiJ9ZnVuY3Rpb24gZnIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2NvbnN0IGY9cjt0PWYuZXJyb3JDYWxsYmFjayxyPWYuYXR0cmliTG9jYXRpb25zLG49Zi50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLGk9Zi50cmFuc2Zvcm1GZWVkYmFja01vZGUsbz1mLmNhbGxiYWNrfWNvbnN0IHM9dHx8b3IsYT1bXSx1PXtlcnJvckNhbGxiYWNrKGYsLi4uZCl7YS5wdXNoKGYpLHMoZiwuLi5kKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTppLGNhbGxiYWNrOm8sZXJyb3JzOmF9O3tsZXQgZj17fTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihkLGgpe2ZbZF09ZT9lW2hdOmh9KTpmPXJ8fHt9LHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3QganU9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gWHUocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gamE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIFhhfWZ1bmN0aW9uIFF1KHIsZSx0KXtjb25zdCBuPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBpIG9mIG4pdC5oYXMoaSkmJnIuZGVsZXRlU2hhZGVyKGkpO3IuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBLdT0ocj0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHIpKTtmdW5jdGlvbiBxdShyLGUsdCl7Y29uc3Qgbj1yLmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOmksdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpvLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzfT1mcih0KTtmb3IobGV0IGE9MDthPGUubGVuZ3RoOysrYSl7bGV0IHU9ZVthXTtpZih0eXBlb2YgdT09InN0cmluZyIpe2NvbnN0IGY9Ym4odSksZD1mP2YudGV4dDp1O2xldCBoPXJbanVbYV1dO2YmJmYudHlwZSYmKGg9WHUocixmLnR5cGUpfHxoKSx1PXIuY3JlYXRlU2hhZGVyKGgpLHIuc2hhZGVyU291cmNlKHUsSG4oZCkuc2hhZGVyU291cmNlKSxyLmNvbXBpbGVTaGFkZXIodSksci5hdHRhY2hTaGFkZXIobix1KX19T2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW2EsdV0pPT5yLmJpbmRBdHRyaWJMb2NhdGlvbihuLHUsYSkpO3tsZXQgYT1vO2EmJihhLmF0dHJpYnMmJihhPWEuYXR0cmlicyksQXJyYXkuaXNBcnJheShhKXx8KGE9T2JqZWN0LmtleXMoYSkpLHIudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLGEsc3x8UWEpKX1yZXR1cm4gci5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIEp1KHIsZSx0LG4saSl7Y29uc3Qgbz1mcih0LG4saSkscz1uZXcgU2V0KGUpLGE9cXUocixlLG8pO2Z1bmN0aW9uIHUoZixkKXtjb25zdCBoPWVjKGYsZCxvLmVycm9yQ2FsbGJhY2spO3JldHVybiBoJiZRdShmLGQscyksaH1pZihvLmNhbGxiYWNrKXtadShyLGEpLnRoZW4oKCk9Pntjb25zdCBmPXUocixhKTtvLmNhbGxiYWNrKGYsZj92b2lkIDA6YSl9KTtyZXR1cm59cmV0dXJuIHUocixhKT92b2lkIDA6YX1hc3luYyBmdW5jdGlvbiBadShyLGUpe2NvbnN0IHQ9ci5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49dD8obyxzKT0+by5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsdC5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgaT0wO2RvIGF3YWl0IEt1KGkpLGk9MWUzLzYwO3doaWxlKCFuKHIsZSkpfWZ1bmN0aW9uIGVjKHIsZSx0KXtpZih0PXR8fG9yLCFyLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxZYSkpe2NvbnN0IGk9ci5nZXRQcm9ncmFtSW5mb0xvZyhlKTt0KGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7aX1gKTtjb25zdCBzPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChhPT5ZdShyLHIuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsci5TSEFERVJfVFlQRSksYSx0KSk7cmV0dXJuYCR7aX0KJHtzLmZpbHRlcihhPT5hKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gdGMocixlLHQsbixpKXtyZXR1cm4gSnUocixlLHQsbixpKX1mdW5jdGlvbiBZbihyKXtjb25zdCBlPXIubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCByYz0vKFwufFxbfF18XHcrKS9nLG5jPXI9PnI+PSIwIiYmcjw9IjkiO2Z1bmN0aW9uIGljKHIsZSx0LG4pe2NvbnN0IGk9ci5zcGxpdChyYykuZmlsdGVyKGE9PmEhPT0iIik7bGV0IG89MCxzPSIiO2Zvcig7Oyl7Y29uc3QgYT1pW28rK107cys9YTtjb25zdCB1PW5jKGFbMF0pLGY9dT9wYXJzZUludChhKTphO2lmKHUmJihzKz1pW28rK10pLG89PT1pLmxlbmd0aCl7dFtmXT1lO2JyZWFrfWVsc2V7Y29uc3QgaD1pW28rK10seT1oPT09IlsiLHg9dFtmXXx8KHk/W106e30pO3RbZl09eCx0PXgsbltzXT1uW3NdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oZyl7am4obCxnKX19KHgpLHMrPWh9fX1mdW5jdGlvbiBvYyhyLGUpe2xldCB0PTA7ZnVuY3Rpb24gbihhLHUsZil7Y29uc3QgZD11Lm5hbWUuZW5kc1dpdGgoIlswXSIpLGg9dS50eXBlLHk9YltoXTtpZigheSl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2gudG9TdHJpbmcoMTYpfWApO2xldCB4O2lmKHkuYmluZFBvaW50KXtjb25zdCBsPXQ7dCs9dS5zaXplLGQ/eD15LmFycmF5U2V0dGVyKHIsaCxsLGYsdS5zaXplKTp4PXkuc2V0dGVyKHIsaCxsLGYsdS5zaXplKX1lbHNlIHkuYXJyYXlTZXR0ZXImJmQ/eD15LmFycmF5U2V0dGVyKHIsZik6eD15LnNldHRlcihyLGYpO3JldHVybiB4LmxvY2F0aW9uPWYseH1jb25zdCBpPXt9LG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSx2bik7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtpZihZbih1KSljb250aW51ZTtsZXQgZj11Lm5hbWU7Zi5lbmRzV2l0aCgiWzBdIikmJihmPWYuc3Vic3RyKDAsZi5sZW5ndGgtMykpO2NvbnN0IGQ9ci5nZXRVbmlmb3JtTG9jYXRpb24oZSx1Lm5hbWUpO2lmKGQpe2NvbnN0IGg9bihlLHUsZCk7aVtmXT1oLGljKGYsaCxvLGkpfX1yZXR1cm4gaX1mdW5jdGlvbiBzYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLGkpO3Rbby5uYW1lXT17aW5kZXg6aSx0eXBlOm8udHlwZSxzaXplOm8uc2l6ZX19cmV0dXJuIHR9ZnVuY3Rpb24gYWMocixlKXtjb25zdCB0PXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHZuKSxuPVtdLGk9W107Zm9yKGxldCBhPTA7YTx0OysrYSl7aS5wdXNoKGEpLG4ucHVzaCh7fSk7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtuW2FdLm5hbWU9dS5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihhKXtjb25zdCB1PWFbMF0sZj1hWzFdO3IuZ2V0QWN0aXZlVW5pZm9ybXMoZSxpLHJbdV0pLmZvckVhY2goZnVuY3Rpb24oZCxoKXtuW2hdW2ZdPWR9KX0pO2NvbnN0IG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxKYSk7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxhKSxmPXtpbmRleDpyLmdldFVuaWZvcm1CbG9ja0luZGV4KGUsdSksdXNlZEJ5VmVydGV4U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxaYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLGV1KSxzaXplOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx0dSksdW5pZm9ybUluZGljZXM6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHJ1KX07Zi51c2VkPWYudXNlZEJ5VmVydGV4U2hhZGVyfHxmLnVzZWRCeUZyYWdtZW50U2hhZGVyLG9bdV09Zn1yZXR1cm57YmxvY2tTcGVjczpvLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uIGpuKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVt0XSk6am4oclt0XSxlW3RdKX19ZnVuY3Rpb24gWG4ociwuLi5lKXtjb25zdCB0PXIudW5pZm9ybVNldHRlcnN8fHIsbj1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPWVbaV07aWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3Qgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7KythKVhuKHQsb1thXSl9ZWxzZSBmb3IoY29uc3QgcyBpbiBvKXtjb25zdCBhPXRbc107YSYmYShvW3NdKX19fWZ1bmN0aW9uIHVjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLEthKTtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPXIuZ2V0QWN0aXZlQXR0cmliKGUsaSk7aWYoWW4obykpY29udGludWU7Y29uc3Qgcz1yLmdldEF0dHJpYkxvY2F0aW9uKGUsby5uYW1lKSxhPVBbby50eXBlXSx1PWEuc2V0dGVyKHIscyxhKTt1LmxvY2F0aW9uPXMsdFtvLm5hbWVdPXV9cmV0dXJuIHR9ZnVuY3Rpb24gY2MocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07biYmbihlW3RdKX19ZnVuY3Rpb24gZmMocixlLHQpe3QudmVydGV4QXJyYXlPYmplY3Q/ci5iaW5kVmVydGV4QXJyYXkodC52ZXJ0ZXhBcnJheU9iamVjdCk6KGNjKGUuYXR0cmliU2V0dGVyc3x8ZSx0LmF0dHJpYnMpLHQuaW5kaWNlcyYmci5iaW5kQnVmZmVyKFZhLHQuaW5kaWNlcykpfWZ1bmN0aW9uIFFuKHIsZSl7Y29uc3QgdD1vYyhyLGUpLG49dWMocixlKSxpPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6dCxhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBOZShyKSYmKGkudW5pZm9ybUJsb2NrU3BlYz1hYyhyLGUpLGkudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXNjKHIsZSkpLGl9Y29uc3QgbGM9L1xzfHt8fXw7LztmdW5jdGlvbiBkYyhyLGUsdCxuLGkpe2NvbnN0IG89ZnIodCxuLGkpLHM9W107aWYoZT1lLm1hcChmdW5jdGlvbihmKXtpZighbGMudGVzdChmKSl7Y29uc3QgZD1ibihmKTtpZihkKWY9ZC50ZXh0O2Vsc2V7Y29uc3QgaD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke2Z9YDtvLmVycm9yQ2FsbGJhY2soaCkscy5wdXNoKGgpfX1yZXR1cm4gZn0pLHMubGVuZ3RoKXJldHVybiBIdShvLCIiKTtjb25zdCBhPW8uY2FsbGJhY2s7YSYmKG8uY2FsbGJhY2s9KGYsZCk9PnthKGYsZj92b2lkIDA6UW4ocixkKSl9KTtjb25zdCB1PXRjKHIsZSxvKTtyZXR1cm4gdT9RbihyLHUpOm51bGx9Y29uc3QgbWM9NCxLbj01MTIzO2Z1bmN0aW9uIGhjKHIsZSx0LG4saSxvKXt0PXQ9PT12b2lkIDA/bWM6dDtjb25zdCBzPWUuaW5kaWNlcyxhPWUuZWxlbWVudFR5cGUsdT1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtpPWk9PT12b2lkIDA/MDppLGF8fHM/byE9PXZvaWQgMD9yLmRyYXdFbGVtZW50c0luc3RhbmNlZCh0LHUsYT09PXZvaWQgMD9LbjplLmVsZW1lbnRUeXBlLGksbyk6ci5kcmF3RWxlbWVudHModCx1LGE9PT12b2lkIDA/S246ZS5lbGVtZW50VHlwZSxpKTpvIT09dm9pZCAwP3IuZHJhd0FycmF5c0luc3RhbmNlZCh0LGksdSxvKTpyLmRyYXdBcnJheXModCxpLHUpfWNvbnN0IHFuPTM2MTYwLGd0PTM2MTYxLHBjPTM1NTMseWM9NTEyMSxfYz02NDAyLHhjPTY0MDgsZ2M9MzMxOTAsYmM9MzYwMTIsdmM9MzUwNTYsRWM9MzYwMTMsVGM9MzI4NTQsQWM9MzI4NTUsd2M9MzYxOTQsSm49MzMxODksWm49NjQwMSxlaT0zNjE2OCxscj0zNDA0MSxkcj0zNjA2NCxidD0zNjA5Nix0aT0zNjEyOCxtcj0zMzMwNixocj0zMzA3MSxwcj05NzI5LFNjPVt7Zm9ybWF0OnhjLHR5cGU6eWMsbWluOnByLHdyYXA6aHJ9LHtmb3JtYXQ6bHJ9XSxWPXt9O1ZbbHJdPW1yLFZbWm5dPXRpLFZbZWldPXRpLFZbX2NdPWJ0LFZbSm5dPWJ0LFZbZ2NdPWJ0LFZbYmNdPWJ0LFZbdmNdPW1yLFZbRWNdPW1yO2Z1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIFZbcl18fFZbZV19Y29uc3QgdWU9e307dWVbVGNdPSEwLHVlW0FjXT0hMCx1ZVt3Y109ITAsdWVbbHJdPSEwLHVlW0puXT0hMCx1ZVtabl09ITAsdWVbZWldPSEwO2Z1bmN0aW9uIEljKHIpe3JldHVybiB1ZVtyXX1jb25zdCBGYz0zMjtmdW5jdGlvbiBQYyhyKXtyZXR1cm4gcj49ZHImJnI8ZHIrRmN9ZnVuY3Rpb24gdnQocixlLHQsbil7Y29uc3QgaT1xbixvPXIuY3JlYXRlRnJhbWVidWZmZXIoKTtyLmJpbmRGcmFtZWJ1ZmZlcihpLG8pLHQ9dHx8ci5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxTYztjb25zdCBzPVtdLGE9e2ZyYW1lYnVmZmVyOm8sYXR0YWNobWVudHM6W10sd2lkdGg6dCxoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1LGYpe2xldCBkPXUuYXR0YWNobWVudDtjb25zdCBoPXUuc2FtcGxlcyx5PXUuZm9ybWF0O2xldCB4PXUuYXR0YWNobWVudFBvaW50fHxSYyh5LHUuaW50ZXJuYWxGb3JtYXQpO2lmKHh8fCh4PWRyK2YpLFBjKHgpJiZzLnB1c2goeCksIWQpaWYoaCE9PXZvaWQgMHx8SWMoeSkpZD1yLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHIuYmluZFJlbmRlcmJ1ZmZlcihndCxkKSxoPjE/ci5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ3QsaCx5LHQsbik6ci5yZW5kZXJidWZmZXJTdG9yYWdlKGd0LHksdCxuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSx1KTtsLndpZHRoPXQsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxwcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fHByLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGQ9Z24ocixsKX1pZigkbyhyLGQpKXIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoaSx4LGd0LGQpO2Vsc2UgaWYoSHQocixkKSl1LmxheWVyIT09dm9pZCAwP3IuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoaSx4LGQsdS5sZXZlbHx8MCx1LmxheWVyKTpyLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGkseCx1LnRhcmdldHx8cGMsZCx1LmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTthLmF0dGFjaG1lbnRzLnB1c2goZCl9KSxyLmRyYXdCdWZmZXJzJiZyLmRyYXdCdWZmZXJzKHMpLGF9ZnVuY3Rpb24gRGMocixlLHQpe3Q9dHx8cW4sZT8oci5iaW5kRnJhbWVidWZmZXIodCxlLmZyYW1lYnVmZmVyKSxyLnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHIuYmluZEZyYW1lYnVmZmVyKHQsbnVsbCksci52aWV3cG9ydCgwLDAsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gUyhyLGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6Z24ocix7c3JjOmUsd3JhcDpyLkNMQU1QX1RPX0VER0V9KX1jb25zdCByaT0yO2NsYXNzIHhle2NvbnN0cnVjdG9yKGUpe3AodGhpcywiaWQiLCJfIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsImZiaSIpO3AodGhpcywib3B0aW9ucyIpO3AodGhpcywicHJvZ3JhbUluZm8iKTtwKHRoaXMsImJ1ZmZlckluZm8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJsYXN0UnVuIik7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89ZGModGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89bHModGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe3ZhciBpLG8scyxhLHUsZjsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Zm9yKGNvbnN0IGQgaW4gZSl0eXBlb2YgZVtkXT09ImZ1bmN0aW9uIiYmKChzPXRoaXMucHJvZmlsZXIpPT1udWxsfHxzLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApLGVbZF09ZVtkXSgpLChhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke2R9YCkpOyh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxmYyh0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFhuKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRGModGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksaGModGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWV9fXZhciBOYz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLE1jPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVWMgZXh0ZW5kcyB4ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE5jK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1jfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIga2M9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLENjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHlyIGV4dGVuZHMgeGV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2N9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENjfX1jbGFzcyBfcntjb25zdHJ1Y3Rvcigpe3AodGhpcywic3RlcHMiLFtdKTtwKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4saTsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdGVwcylvLnByZXZlbnRSZXNpemV8fG8ucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgeHIgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y29uc3QgT2M9MTAsQmM9MixMYz04O2NsYXNzIEdjIGV4dGVuZHMgeHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBVYyh7Li4uaSxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3Qgbz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBpPXRoaXMucmFkaXVzPk9jP0xjOkJjO3JldHVybnt3aWR0aDpNYXRoLm1heChyaSx0L2kpLGhlaWdodDpNYXRoLm1heChyaSxuL2kpfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBpPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChpLndpZHRoLGkuaGVpZ2h0KX19Y2xhc3MgbmkgZXh0ZW5kcyB4cntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IHlyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyAkYyBleHRlbmRzIG5pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtwKHRoaXMsImZyYW1lUmVhZGVyIik7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCEwKX1zZXQgaW5wdXRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO3QhPW51bGwmJnQudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpLHQudmFsdWUuY2xvc2UoKSl9fXZhciB6Yz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLFdjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsZ3I9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShncnx8e30pO2NsYXNzIGlpIGV4dGVuZHMgeGV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Yyt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBXY31jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBWYyBleHRlbmRzIHhye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBpaSh7Li4uaSxyYWRpdXM6bix0eXBlOmdyLkdBVVNTSUFOfSkscz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOlModCxvLm91dHB1dCksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyBiciBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO3AodGhpcywiZmJpMiIpO3RoaXMuZmJpMj12dCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPXZ0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgSGM9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLFljPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgamMgZXh0ZW5kcyBicntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBIY31nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWN9fXZhciBYYz1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsUWM9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyBLYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFhjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBRY319dmFyIHFjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsSmM9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBaYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHFjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBKY319dmFyIGVmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsdGY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyByZiBleHRlbmRzIGJye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0Zn19dmFyIG5mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxvZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIHNmIGV4dGVuZHMgYnJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gbmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIG9mfX1jbGFzcyBhZiBleHRlbmRzIF9ye2NvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtwKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO3RoaXMuY29udGV4dD10O2NvbnN0IG89e2NvbnRleHQ6dCxoZWlnaHQ6aSx3aWR0aDpufSxzPW5ldyBqYyhvKSxhPW5ldyBpaSh7Li4ubyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSksdT1uZXcgc2YobyksZj1uZXcgcmYobyksZD1uZXcgWmMobyksaD1uZXcgS2Moey4uLm99KSx5PS42Nix4PTY0MCxsPTQ4MCxnPTI1NixFPTE0NDtsZXQgdj0xO3YqPU1hdGgubWF4KHgvZyxsL0UpO2NvbnN0IEk9TWF0aC5tYXgoMSxNYXRoLnNxcnQodikqeSksRD0xL3gsRz0xL2w7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OlModCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpTKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OlModCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aCxnZXRVbmlmb3JtczooKT0+KHtpbnB1dF9mcmFtZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W0QsR10sc3RlcDpJLHJhZGl1czp2LG9mZnNldDpJPjE/SSouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KEQsRykqdixzaWdtYV9jb2xvcjouMX0pfSksdGhpcy5vdXRwdXQ9aC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fX12YXIgdWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsY2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBmZiBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBjZn19Y2xhc3MgbGYgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBmZih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1jbGFzcyBkZntjb25zdHJ1Y3RvcihlKXtwKHRoaXMsInJlc2l6ZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJjb250ZXh0Iik7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgbGYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBtZntjb25zdHJ1Y3RvcihlLHQpe3AodGhpcywiaW1wcm92ZU1hc2tTZWdtZW50YXRpb24iKTtwKHRoaXMsImJhY2tncm91bmRSZXNpemVyIik7cCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImJhY2tncm91bmRWaWRlbyIpO3AodGhpcywicHJvZmlsZXIiKTtwKHRoaXMsImFjdGl2ZVBpcGVsaW5lIik7cCh0aGlzLCJjYW52YXMiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsInZpcnR1YWxCR0ltYWdlIik7dGhpcy5pZD1lLHRoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9dC5mb3JlZ3JvdW5kV2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXQuZm9yZWdyb3VuZEhlaWdodCx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uPW5ldyBhZih0aGlzLmNvbnRleHQsdC5tYXNrV2lkdGgsdC5tYXNrSGVpZ2h0KSx0aGlzLmJhY2tncm91bmRJbWFnZT1uZXcgbmkodGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRWaWRlbz1uZXcgJGModGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyPW5ldyBkZih7d2lkdGg6dC5mb3JlZ3JvdW5kV2lkdGgsaGVpZ2h0OnQuZm9yZWdyb3VuZEhlaWdodH0pfXNldEJhY2tncm91bmRPcHRpb25zKGUpe3N3aXRjaChlLnRyYW5zZm9ybWVyVHlwZSl7Y2FzZSJCYWNrZ3JvdW5kQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2ModGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlNpbGhvdWV0dGVCbHVyIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPW5ldyBWYyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiVmlkZW9CYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZFZpZGVvO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOnRoaXMuYWN0aXZlUGlwZWxpbmU9dGhpcy5iYWNrZ3JvdW5kSW1hZ2U7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHRyYW5zZm9ybWVyIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9dGhpcy5vcHRpb25zPWV9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbik9PW51bGx8fHQuc2V0T3B0aW9ucyhlKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW8uaW5wdXRWaWRlbz1lfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3RoaXMudmlydHVhbEJHSW1hZ2U9ZSx0aGlzLmJhY2tncm91bmRJbWFnZS5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCB0aGlzLmJhY2tncm91bmRSZXNpemVyLnByb2Nlc3MoZSl9YXN5bmMgcHJvY2VzcyhlLHQpe3ZhciBuLGksbyxzLGEsdSxmO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7Y29uc3QgZD1gWyR7dGhpcy5pZH1dIGJhY2tncm91bmQtZmlsdGVyYDsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChkKTtsZXQgaD10OygoKGk9dGhpcy5vcHRpb25zKT09bnVsbD92b2lkIDA6aS5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmKChvPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSk9PT0iUFJFQ0lTRSJ8fCEoKHM9dGhpcy5vcHRpb25zKSE9bnVsbCYmcy5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmdGhpcy5hY3RpdmVQaXBlbGluZS5wcmVjaXNlTWFza0VuYWJsZWQpJiYodGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRJZCh0aGlzLmlkKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksaD10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRJZCh0aGlzLmlkKSx0aGlzLmFjdGl2ZVBpcGVsaW5lLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnNldERhdGEoZSxoKSwodT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8dS5ydW4oKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGQpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1hc3luYyBwcm9maWxlKGUpe2NvbnN0IHQ9bmV3IFBvKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgR3IoZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1nZXRCbHVyU2l6ZShlPVplLkxvdyl7c3dpdGNoKGUpe2Nhc2UgWmUuTG93OnJldHVybiA1O2Nhc2UgWmUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBoZj1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlPCJ1Ij9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsbSl7bj1jLGk9bX0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24oYyxtKXt0aHJvdyBtfSxmPSEwLGQ9IiI7ZnVuY3Rpb24gaChjKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShjLGQpOmQrY312YXIgeTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGQ9ciksZC5pbmRleE9mKCJibG9iOiIpIT09MD9kPWQuc3Vic3RyKDAsZC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmQ9IiI7dmFyIHg9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxsPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIGc7dC53YXNtQmluYXJ5JiYoZz10Lndhc21CaW5hcnkpO3ZhciBFPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgdixJPSExLEQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gRyhjLG0sXyl7Zm9yKHZhciBUPW0rXyxOPW07Y1tOXSYmIShOPj1UKTspKytOO2lmKE4tbT4xNiYmYy5zdWJhcnJheSYmRClyZXR1cm4gRC5kZWNvZGUoYy5zdWJhcnJheShtLE4pKTtmb3IodmFyIGs9IiI7bTxOOyl7dmFyIHc9Y1ttKytdO2lmKCEodyYxMjgpKXtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBPPWNbbSsrXSY2MztpZigodyYyMjQpPT0xOTIpe2srPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fE8pO2NvbnRpbnVlfXZhciBLPWNbbSsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfE88PDZ8Szp3PSh3JjcpPDwxOHxPPDwxMnxLPDw2fGNbbSsrXSY2Myx3PDY1NTM2KWsrPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgaGk9dy02NTUzNjtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGhpPj4xMCw1NjMyMHxoaSYxMDIzKX19cmV0dXJuIGt9ZnVuY3Rpb24gJChjLG0pe3JldHVybiBjP0coTGUsYyxtKToiIn1mdW5jdGlvbiBaKGMsbSxfKXtmb3IodmFyIFQ9MDtUPGMubGVuZ3RoOysrVClFdFttKys+PjBdPWMuY2hhckNvZGVBdChUKTtffHwoRXRbbT4+MF09MCl9ZnVuY3Rpb24gSChjLG0pe3JldHVybiBjJW0+MCYmKGMrPW0tYyVtKSxjfXZhciBzaSxFdCxMZSxZO2Z1bmN0aW9uIGFpKGMpe3NpPWMsdC5IRUFQOD1FdD1uZXcgSW50OEFycmF5KGMpLHQuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGMpLHQuSEVBUDMyPVk9bmV3IEludDMyQXJyYXkoYyksdC5IRUFQVTg9TGU9bmV3IFVpbnQ4QXJyYXkoYyksdC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShjKSx0LkhFQVBVMzI9bmV3IFVpbnQzMkFycmF5KGMpLHQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGMpLHQuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGMpfXQuSU5JVElBTF9NRU1PUlk7dmFyIEVyLHVpPVtdLGNpPVtdLGZpPVtdLHZmPTA7ZnVuY3Rpb24gRWYoKXtyZXR1cm4gRXx8dmY+MH1mdW5jdGlvbiBUZigpe2lmKHQucHJlUnVuKWZvcih0eXBlb2YgdC5wcmVSdW49PSJmdW5jdGlvbiImJih0LnByZVJ1bj1bdC5wcmVSdW5dKTt0LnByZVJ1bi5sZW5ndGg7KVNmKHQucHJlUnVuLnNoaWZ0KCkpO1RyKHVpKX1mdW5jdGlvbiBBZigpe1RyKGNpKX1mdW5jdGlvbiB3Zigpe2lmKHQucG9zdFJ1bilmb3IodHlwZW9mIHQucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKHQucG9zdFJ1bj1bdC5wb3N0UnVuXSk7dC5wb3N0UnVuLmxlbmd0aDspSWYodC5wb3N0UnVuLnNoaWZ0KCkpO1RyKGZpKX1mdW5jdGlvbiBTZihjKXt1aS51bnNoaWZ0KGMpfWZ1bmN0aW9uIFJmKGMpe2NpLnVuc2hpZnQoYyl9ZnVuY3Rpb24gSWYoYyl7ZmkudW5zaGlmdChjKX12YXIgZ2U9MCxHZT1udWxsO2Z1bmN0aW9uIEZmKGMpe2dlKyssdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpfWZ1bmN0aW9uIFBmKGMpe2lmKGdlLS0sdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpLGdlPT0wJiZHZSl7dmFyIG09R2U7R2U9bnVsbCxtKCl9fXQucHJlbG9hZGVkSW1hZ2VzPXt9LHQucHJlbG9hZGVkQXVkaW9zPXt9O2Z1bmN0aW9uIGNlKGMpe3Qub25BYm9ydCYmdC5vbkFib3J0KGMpLGM9IkFib3J0ZWQoIitjKyIpIixsKGMpLEk9ITAsYys9Ii4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBtPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYyk7dGhyb3cgaShtKSxtfXZhciBEZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24gbGkoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aChEZil9dmFyIGo7aj0idGZsaXRlLXNpbWQud2FzbSIsbGkoail8fChqPWgoaikpO2Z1bmN0aW9uIGRpKGMpe3RyeXtpZihjPT1qJiZnKXJldHVybiBuZXcgVWludDhBcnJheShnKTtpZigheSl0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2gobSl7Y2UobSl9fWZ1bmN0aW9uIE5mKCl7cmV0dXJuIWcmJmYmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChqLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihjKXtpZighYy5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2orIiciO3JldHVybiBjLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBkaShqKX0pOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZGkoail9KX1mdW5jdGlvbiBNZigpe3ZhciBjPXthOmVsfTtmdW5jdGlvbiBtKHcsTyl7dmFyIEs9dy5leHBvcnRzO3QuYXNtPUssdj10LmFzbS5xLGFpKHYuYnVmZmVyKSxFcj10LmFzbS5FLFJmKHQuYXNtLnIpLFBmKCl9RmYoKTtmdW5jdGlvbiBfKHcpe20ody5pbnN0YW5jZSl9ZnVuY3Rpb24gVCh3KXtyZXR1cm4gTmYoKS50aGVuKGZ1bmN0aW9uKE8pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShPLGMpfSkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gT30pLnRoZW4odyxmdW5jdGlvbihPKXtsKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK08pLGNlKE8pfSl9ZnVuY3Rpb24gTigpe3JldHVybiFnJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFsaShqKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKGose2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHcpe3ZhciBPPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHcsYyk7cmV0dXJuIE8udGhlbihfLGZ1bmN0aW9uKEspe3JldHVybiBsKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitLKSxsKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFQoXyl9KX0pOlQoXyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBrPXQuaW5zdGFudGlhdGVXYXNtKGMsbSk7cmV0dXJuIGt9Y2F0Y2godyl7cmV0dXJuIGwoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdyksITF9cmV0dXJuIE4oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBUcihjKXtmb3IoO2MubGVuZ3RoPjA7KXt2YXIgbT1jLnNoaWZ0KCk7aWYodHlwZW9mIG09PSJmdW5jdGlvbiIpe20odCk7Y29udGludWV9dmFyIF89bS5mdW5jO3R5cGVvZiBfPT0ibnVtYmVyIj9tLmFyZz09PXZvaWQgMD9Fci5nZXQoXykoKTpFci5nZXQoXykobS5hcmcpOl8obS5hcmc9PT12b2lkIDA/bnVsbDptLmFyZyl9fWZ1bmN0aW9uIFVmKGMsbSxfLFQpe2NlKCJBc3NlcnRpb24gZmFpbGVkOiAiKyQoYykrIiwgYXQ6ICIrW20/JChtKToidW5rbm93biBmaWxlbmFtZSIsXyxUPyQoVCk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24ga2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gT2YoKXtjZSgiIil9dmFyIFR0O1R0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgQmY9ITA7ZnVuY3Rpb24gTGYoYyl7cmV0dXJuIFlbbWkoKT4+Ml09YyxjfWZ1bmN0aW9uIEdmKGMsbSl7dmFyIF87aWYoYz09PTApXz1EYXRlLm5vdygpO2Vsc2UgaWYoKGM9PT0xfHxjPT09NCkmJkJmKV89VHQoKTtlbHNlIHJldHVybiBMZigyOCksLTE7cmV0dXJuIFlbbT4+Ml09Xy8xZTN8MCxZW20rND4+Ml09XyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gJGYoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiB6ZihjLG0sXyl7TGUuY29weVdpdGhpbihjLG0sbStfKX1mdW5jdGlvbiBXZihjKXt0cnl7cmV0dXJuIHYuZ3JvdyhjLXNpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksYWkodi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiBWZihjKXt2YXIgbT1MZS5sZW5ndGg7Yz1jPj4+MDt2YXIgXz0yMTQ3NDgzNjQ4O2lmKGM+XylyZXR1cm4hMTtmb3IodmFyIFQ9MTtUPD00O1QqPTIpe3ZhciBOPW0qKDErLjIvVCk7Tj1NYXRoLm1pbihOLGMrMTAwNjYzMjk2KTt2YXIgaz1NYXRoLm1pbihfLEgoTWF0aC5tYXgoYyxOKSw2NTUzNikpLHc9V2Yoayk7aWYodylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBIZihjKXtmb3IodmFyIG09VHQoKTtUdCgpLW08YzspO312YXIgQXI9e307ZnVuY3Rpb24gWWYoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiAkZSgpe2lmKCEkZS5zdHJpbmdzKXt2YXIgYz0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixtPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6YyxfOllmKCl9O2Zvcih2YXIgXyBpbiBBcilBcltfXT09PXZvaWQgMD9kZWxldGUgbVtfXTptW19dPUFyW19dO3ZhciBUPVtdO2Zvcih2YXIgXyBpbiBtKVQucHVzaChfKyI9IittW19dKTskZS5zdHJpbmdzPVR9cmV0dXJuICRlLnN0cmluZ3N9dmFyIEF0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oYyxtKXt2YXIgXz1BdC5idWZmZXJzW2NdO209PT0wfHxtPT09MTA/KChjPT09MT94OmwpKEcoXywwKSksXy5sZW5ndGg9MCk6Xy5wdXNoKG0pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtBdC52YXJhcmdzKz00O3ZhciBjPVlbQXQudmFyYXJncy00Pj4yXTtyZXR1cm4gY30sZ2V0U3RyOmZ1bmN0aW9uKGMpe3ZhciBtPSQoYyk7cmV0dXJuIG19LGdldDY0OmZ1bmN0aW9uKGMsbSl7cmV0dXJuIGN9fTtmdW5jdGlvbiBqZihjLG0pe3ZhciBfPTA7cmV0dXJuICRlKCkuZm9yRWFjaChmdW5jdGlvbihULE4pe3ZhciBrPW0rXztZW2MrTio0Pj4yXT1rLFooVCxrKSxfKz1ULmxlbmd0aCsxfSksMH1mdW5jdGlvbiBYZihjLG0pe3ZhciBfPSRlKCk7WVtjPj4yXT1fLmxlbmd0aDt2YXIgVD0wO3JldHVybiBfLmZvckVhY2goZnVuY3Rpb24oTil7VCs9Ti5sZW5ndGgrMX0pLFlbbT4+Ml09VCwwfWZ1bmN0aW9uIFFmKGMpe3JsKGMpfWZ1bmN0aW9uIEtmKGMpe3JldHVybiAwfWZ1bmN0aW9uIHFmKGMsbSxfLFQsTil7fWZ1bmN0aW9uIEpmKGMsbSxfLFQpe2Zvcih2YXIgTj0wLGs9MDtrPF87aysrKXtmb3IodmFyIHc9WVttK2sqOD4+Ml0sTz1ZW20rKGsqOCs0KT4+Ml0sSz0wO0s8TztLKyspQXQucHJpbnRDaGFyKGMsTGVbdytLXSk7Tis9T31yZXR1cm4gWVtUPj4yXT1OLDB9ZnVuY3Rpb24gWmYoKXtpZih0eXBlb2YgY3J5cHRvPT0ib2JqZWN0IiYmdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiIpe3ZhciBjPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGMpLGNbMF19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7Y2UoInJhbmRvbURldmljZSIpfX1mdW5jdGlvbiB3dChjLG0pe3d0LnJhbmRvbURldmljZXx8KHd0LnJhbmRvbURldmljZT1aZigpKTtmb3IodmFyIF89MDtfPG07XysrKUV0W2MrXz4+MF09d3QucmFuZG9tRGV2aWNlKCk7cmV0dXJuIDB9dmFyIGVsPXthOlVmLGU6a2YsZDpDZixiOk9mLG46R2YsaDokZixsOnpmLG06VmYscDpIZixmOmpmLGc6WGYsajpRZixpOktmLGs6cWYsYzpKZixvOnd0fTtNZigpLHQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX19fd2FzbV9jYWxsX2N0b3JzPXQuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9dC5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD10LmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0SGVpZ2h0PXQuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dFdpZHRoPXQuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9dC5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PXQuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dEhlaWdodD10LmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dFdpZHRoPXQuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dENoYW5uZWxDb3VudD10LmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2xvYWRNb2RlbD1mdW5jdGlvbigpe3JldHVybih0Ll9sb2FkTW9kZWw9dC5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9ydW5JbmZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm4odC5fcnVuSW5mZXJlbmNlPXQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5faXNHUFVFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2lzR1BVRW5hYmxlZD10LmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBtaT10Ll9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG1pPXQuX19fZXJybm9fbG9jYXRpb249dC5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdDtmdW5jdGlvbiB0bChjKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT0iUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgiK2MrIikiLHRoaXMuc3RhdHVzPWN9R2U9ZnVuY3Rpb24gYygpe1N0fHx3cigpLFN0fHwoR2U9Yyl9O2Z1bmN0aW9uIHdyKGMpe2lmKGdlPjB8fChUZigpLGdlPjApKXJldHVybjtmdW5jdGlvbiBtKCl7U3R8fChTdD0hMCx0LmNhbGxlZFJ1bj0hMCwhSSYmKEFmKCksbih0KSx0Lm9uUnVudGltZUluaXRpYWxpemVkJiZ0Lm9uUnVudGltZUluaXRpYWxpemVkKCksd2YoKSkpfXQuc2V0U3RhdHVzPyh0LnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zZXRTdGF0dXMoIiIpfSwxKSxtKCl9LDEpKTptKCl9dC5ydW49d3I7ZnVuY3Rpb24gcmwoYyxtKXtubChjKX1mdW5jdGlvbiBubChjKXtFZigpfHwodC5vbkV4aXQmJnQub25FeGl0KGMpLEk9ITApLHUoYyxuZXcgdGwoYykpfWlmKHQucHJlSW5pdClmb3IodHlwZW9mIHQucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHQucHJlSW5pdD1bdC5wcmVJbml0XSk7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQucG9wKCkoKTtyZXR1cm4gd3IoKSxlLnJlYWR5fX0oKTtjbGFzcyBwZntjb25zdHJ1Y3Rvcigpe3AodGhpcywic2VsZWN0ZWRURkxpdGUiKTtwKHRoaXMsImlzU0lNRFN1cHBvcnRlZCIsITEpO3AodGhpcywiaXNUaHJlYWRzU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpbnB1dFdpZHRoIiwwKTtwKHRoaXMsImlucHV0SGVpZ2h0IiwwKTtwKHRoaXMsImlucHV0Q2hhbm5lbENvdW50IiwwKTtwKHRoaXMsImlucHV0TWVtb3J5T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dFdpZHRoIiwwKTtwKHRoaXMsIm91dHB1dEhlaWdodCIsMCk7cCh0aGlzLCJvdXRwdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywib3V0cHV0TWVtb3J5T2Zmc2V0IiwwKX19Y29uc3QgeWY9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvdm9uYWdlLXRlbnNvcmZsb3ctd2FzbS90ZmxpdGUtc2ltZC13YXNtLzEuMS4zLyIsX2Y9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvbWwvc2VsZmllX3NlZ21lbnRhdGlvbi80LjAuMC8iO2FzeW5jIGZ1bmN0aW9uIHhmKHI9eWYsZT1fZil7bGV0IHQ9bmV3IHBmO3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7YXN5bmMgZnVuY3Rpb24gcygpe3JldHVybiBoZih7bG9jYXRlRmlsZTpmdW5jdGlvbihmKXtyZXR1cm4gcitmfX0pfWFzeW5jIGZ1bmN0aW9uIGEodSl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKGYsZCk9Pntjb25zdCBoPXU7aWYodHlwZW9mIGg+InUiKXJldHVybiBkKCJURkxpdGUgYmFja2VuZCB1bmF2YWlsYWJsZTogd2FzbVNpbWQiKTtjb25zdCB5PSJzZWxmaWVfc2VnbWVudGF0aW9uX2xhbmRzY2FwZSI7Y29uc29sZS5sb2coIkxvYWRpbmcgdGZsaXRlIG1vZGVsOiIseSk7bGV0IHg9ZStgJHt5fS50ZmxpdGVgO2NvbnNvbGUubG9nKCJURkxpdGUgbW9kZWxVcmw6ICIreCk7dHJ5e2NvbnN0IGc9YXdhaXQoYXdhaXQgZmV0Y2goeCkpLmFycmF5QnVmZmVyKCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBzaXplOiIsZy5ieXRlTGVuZ3RoKTtjb25zdCBFPWguX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0KCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBtZW1vcnkgb2Zmc2V0OiIsRSksY29uc29sZS5sb2coIkxvYWRpbmcgbW9kZWwgYnVmZmVyLi4uIiksaC5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGcpLEUpO2NvbnN0IHY9aC5fbG9hZE1vZGVsKGcuYnl0ZUxlbmd0aCk7aWYoY29uc29sZS5sb2coIkxvYWQgbW9kZWwgcmVzdWx0OiIsdiksdiE9PTApe2QoIkNhbm5vdCBsb2FkIG1vZGVsIik7cmV0dXJufXQuaW5wdXRXaWR0aD1oLl9nZXRJbnB1dFdpZHRoKCksdC5pbnB1dEhlaWdodD1oLl9nZXRJbnB1dEhlaWdodCgpLHQuaW5wdXRDaGFubmVsQ291bnQ9aC5fZ2V0SW5wdXRDaGFubmVsQ291bnQoKSx0LmlucHV0TWVtb3J5T2Zmc2V0PWguX2dldElucHV0TWVtb3J5T2Zmc2V0KCksY29uc29sZS5sb2coIklucHV0IG1lbW9yeSBvZmZzZXQ6Iix0LmlucHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiSW5wdXQgaGVpZ2h0OiIsdC5pbnB1dEhlaWdodCksY29uc29sZS5sb2coIklucHV0IHdpZHRoOiIsdC5pbnB1dFdpZHRoKSxjb25zb2xlLmxvZygiSW5wdXQgY2hhbm5lbHM6Iix0LmlucHV0Q2hhbm5lbENvdW50KSx0Lm91dHB1dE1lbW9yeU9mZnNldD1oLl9nZXRPdXRwdXRNZW1vcnlPZmZzZXQoKSx0Lm91dHB1dFdpZHRoPWguX2dldE91dHB1dFdpZHRoKCksdC5vdXRwdXRIZWlnaHQ9aC5fZ2V0T3V0cHV0SGVpZ2h0KCksdC5vdXRwdXRDaGFubmVsQ291bnQ9aC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50KCksY29uc29sZS5sb2coIk91dHB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5vdXRwdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJPdXRwdXQgaGVpZ2h0OiIsdC5vdXRwdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJPdXRwdXQgd2lkdGg6Iix0Lm91dHB1dFdpZHRoKSxjb25zb2xlLmxvZygiT3V0cHV0IGNoYW5uZWxzOiIsdC5vdXRwdXRDaGFubmVsQ291bnQpLHQuc2VsZWN0ZWRURkxpdGU9aH1jYXRjaChsKXtkKGwpO3JldHVybn1mKCl9KX1zKCkudGhlbih1PT57aWYodT09PW51bGwpdGhyb3cgY29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBudWxsIiksImxvYWRURkxpdGUgbnVsbCI7YSh1KS50aGVuKGY9PntpKHQpfSkuY2F0Y2goZj0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGVNb2RlbCBlcnJvciIpLG8oImxvYWRURkxpdGVNb2RlbCBlcnJvciIpfSl9KS5jYXRjaCh1PT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBlcnJvcjoiLHUpLG8oImxvYWRURkxpdGUgZXJyb3I6Iit1KX0pfSk7cmV0dXJuIG59Y2xhc3MgZ2Z7Y29uc3RydWN0b3IoKXtwKHRoaXMsImNhbnZhcyIsbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApKTtwKHRoaXMsImNvbnRleHQiLHRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkpO3AodGhpcywicGl4ZWxDb3VudCIsMCk7cCh0aGlzLCJpbnB1dE9mZnNldCIsMCk7cCh0aGlzLCJvdXRwdXRPZmZzZXQiLDApO3AodGhpcywiaW5mb3MiKTtwKHRoaXMsIm1hc2siKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgeGYoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIGJme2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBnZik7cCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7cCh0aGlzLCJyZXBvcnRlciIsbmV3IElvKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KTtwKHRoaXMsImJhY2tncm91bmRPcHRpb25zIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQodC53YXNtQXNzZXRVcmlQYXRoLHQudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDpuLGhlaWdodDppfT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBtZihlLHtmb3JlZ3JvdW5kV2lkdGg6MSxmb3JlZ3JvdW5kSGVpZ2h0OjEsbWFza1dpZHRoOm4sbWFza0hlaWdodDppfSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBzLGEsdSxmO2NvbnN0IG49KHM9ZS50aW1lc3RhbXApIT1udWxsP3M6MCxpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLG89YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhpKTtvPygoaS53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxpLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1pLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1pLmhlaWdodCxhd2FpdCgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLnJlc2l6ZUZvcmVncm91bmQoaS53aWR0aCxpLmhlaWdodCkpKSxhd2FpdCgodT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp1LnByb2Nlc3MoaSxvKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoZj10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpmLmNhbnZhcyx7dGltZXN0YW1wOm4sYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119Z2V0VHJhbnNmb3JtZXJUeXBlKCl7dmFyIGUsdDtyZXR1cm4odD0oZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpIT1udWxsP3Q6IlVuZGVmaW5lZCJ9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpGbyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBiZik7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IG5vKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe3FpKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IG9pPXZyOygoKT0+e19pKCJQcm9jZXNzb3JXb3JrZXIiLHZyKX0pKCl9KSgpOwo=",vs=typeof window<"u"&&window.Blob&&new Blob([atob(Ll)],{type:"text/javascript;charset=utf-8"});function n3(){const t=vs&&(window.URL||window.webkitURL).createObjectURL(vs);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+Ll)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const zo=class extends ur{constructor(){super(...arguments),Wt(this,"rate",30),Wt(this,"worker")}async init(t){this.worker=await U2(ho,n3),await this.worker.init("worker_"+zo.initCount++,t),await this.worker.setVonageMetadata(ui()),await this.setBackgroundOptions(t),this.listenWorker()}async setTrackExpectedRate(t){var e;await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){var e,n,r;const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await rs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await rs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}async transform(t,e){var n;await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate())}async setFlickeringOptions(t){var e;await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async listenWorker(){for(var t,e,n;null!=(t=this.worker)&&t.workerContext.worker;){const{name:t,data:r}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,r);break;case"pipelineInfo":switch(this.emit(t,r),r){case"pipeline_ended":case"pipeline_ended_with_error":return void await(null==(n=this.worker)?void 0:n.terminate())}}}}};let hi=zo;Wt(hi,"initCount",0);class r3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==Ts.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class Cl extends ur{constructor(){super(),Wt(this,"worker",new hi),Wt(this,"connector",new W2(this.worker))}async init(t){await this.worker.init(t),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new r3(e)}static async create(t){const e=new this;return await e.init(t),this.instances.push(e),e}}function l3(){return bi}function c3(){return yi}function u3(){return gi}function a3(){return Zi}function d3(){return vi}function h3(){return Gi}function f3(){return Xi}async function m3(t){return await Cl.create(t)}Wt(Cl,"instances",[]);export{e3 as BackgroundTransformer,V2 as BackgroundTransformerType,di as BlurRadius,b2 as ErrorFunction,_i as MediapipeHelper,no as PipelineInfoData,R2 as SelfieSegmentationType,Cl as VonageMediaProcessor,p2 as WarningType,m3 as createVonageMediaProcessor,Y2 as getSupportedBrowserFeatures,a3 as getVonageFaceDetection,d3 as getVonageFaceMash,c3 as getVonageHands,u3 as getVonageHolistic,h3 as getVonageObjectron,f3 as getVonagePose,l3 as getVonageSelfieSegmentation,o3 as isSupported};
|