@stinkycomputing/web-live-player 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +402 -323
- package/dist/decoders/wasm-decoder.d.ts +0 -1
- package/dist/sources/mp4-file-source.d.ts +7 -1
- package/dist/web-live-player.cjs +3 -3
- package/dist/web-live-player.mjs +2407 -2314
- package/package.json +57 -54
- package/dist/player/base-player.test.d.ts +0 -8
- package/dist/scheduling/frame-scheduler.test.d.ts +0 -11
- package/dist/vitest.config.d.ts +0 -2
package/dist/web-live-player.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Is=Object.create;var Ai=Object.defineProperty;var ws=Object.getOwnPropertyDescriptor;var vs=Object.getOwnPropertyNames;var _s=Object.getPrototypeOf,Hs=Object.prototype.hasOwnProperty;var zs=(i,U,F)=>U in i?Ai(i,U,{enumerable:!0,configurable:!0,writable:!0,value:F}):i[U]=F;var Ys=(i,U,F,e)=>{if(U&&typeof U=="object"||typeof U=="function")for(let t of vs(U))!Hs.call(i,t)&&t!==F&&Ai(i,t,{get:()=>U[t],enumerable:!(e=ws(U,t))||e.enumerable});return i};var Gs=(i,U,F)=>(F=i!=null?Is(_s(i)):{},Ys(U||!i||!i.__esModule?Ai(F,"default",{value:i,enumerable:!0}):F,i));var d=(i,U,F)=>(zs(i,typeof U!="symbol"?U+"":U,F),F),ji=(i,U,F)=>{if(!U.has(i))throw TypeError("Cannot "+F)};var En=(i,U,F)=>(ji(i,U,"read from private field"),F?F.call(i):U.get(i)),Ki=(i,U,F)=>{if(U.has(i))throw TypeError("Cannot add the same private member more than once");U instanceof WeakSet?U.add(i):U.set(i,F)},Nn=(i,U,F,e)=>(ji(i,U,"write to private field"),e?e.call(i,F):U.set(i,F),F);var Pi=(i,U,F)=>(ji(i,U,"access private method"),F);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const eU={debug:i=>console.debug(`[VideoPlayer] ${i}`),info:i=>console.info(`[VideoPlayer] ${i}`),warn:i=>console.warn(`[VideoPlayer] ${i}`),error:i=>console.error(`[VideoPlayer] ${i}`)},yn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};class dn{constructor(){d(this,"handlers",new Map);d(this,"_connected",!1)}get connected(){return this._connected}on(U,F){this.handlers.has(U)||this.handlers.set(U,new Set),this.handlers.get(U).add(F)}off(U,F){var e;(e=this.handlers.get(U))==null||e.delete(F)}emit(U,...F){var e;(e=this.handlers.get(U))==null||e.forEach(t=>t(...F))}dispose(){this.handlers.clear()}}function Zn(i){return{debug:i?eU.debug:yn.debug,info:eU.info,warn:eU.warn,error:eU.error}}class rn{constructor(U,F=!1){d(this,"eventHandlers",new Map);d(this,"logger");d(this,"_state");this._state=U,this.logger=Zn(F)}get state(){return this._state}setState(U){if(this._state!==U){const F=this._state;this._state=U,this.logger.debug(`State: ${F} -> ${U}`),this.emit("statechange",U)}}setDebugLogging(U){this.logger=Zn(U)}on(U,F){this.eventHandlers.has(U)||this.eventHandlers.set(U,new Set),this.eventHandlers.get(U).add(F)}off(U,F){var e;(e=this.eventHandlers.get(U))==null||e.delete(F)}emit(U,...F){var e;(e=this.eventHandlers.get(U))==null||e.forEach(t=>t(...F))}clearEventHandlers(){this.eventHandlers.clear()}}const kn=1297302867,un=1,qi=32,ui=24,lU=64,$i=1,Un=2,In=4;var _i=(i=>(i[i.VIDEO_FRAME=1]="VIDEO_FRAME",i[i.AUDIO_FRAME=2]="AUDIO_FRAME",i[i.RPC=3]="RPC",i[i.MUXED_DATA=4]="MUXED_DATA",i[i.DECODER_DATA=5]="DECODER_DATA",i))(_i||{}),aU=(i=>(i[i.VIDEO_VP8=1]="VIDEO_VP8",i[i.VIDEO_VP9=2]="VIDEO_VP9",i[i.VIDEO_AVC=3]="VIDEO_AVC",i[i.VIDEO_HEVC=4]="VIDEO_HEVC",i[i.VIDEO_AV1=5]="VIDEO_AV1",i[i.AUDIO_OPUS=64]="AUDIO_OPUS",i[i.AUDIO_AAC=65]="AUDIO_AAC",i[i.AUDIO_PCM=66]="AUDIO_PCM",i))(aU||{});class Rn{static initHeader(U,F,e,t){return{magic:kn,version:un,header_size:this.calculateHeaderSize(F),type:U,flags:F,pts:e,id:t,reserved:0}}static calculateHeaderSize(U){let F=qi;return U&Un&&(F+=lU),U&$i&&(F+=ui),F}static validateHeader(U,F){if(U.magic!==kn||U.version!==un)return!1;const e=this.calculateHeaderSize(U.flags);return!(U.header_size!==e||F<U.header_size)}static serialize(U,F=null,e=null,t=null){const Q=F!==null&&U.flags&Un,n=e!==null&&U.flags&$i;let s=qi;Q&&(s+=lU),n&&(s+=ui),t&&(s+=t.length),U.header_size=s-(t?t.length:0);const l=new ArrayBuffer(s),B=new DataView(l);let a=0;if(B.setUint32(a,U.magic,!0),a+=4,B.setUint32(a,U.flags,!0),a+=4,B.setBigUint64(a,U.pts,!0),a+=8,B.setBigUint64(a,U.id,!0),a+=8,B.setUint16(a,U.version,!0),a+=2,B.setUint16(a,U.header_size,!0),a+=2,B.setUint16(a,U.type,!0),a+=2,B.setUint16(a,U.reserved,!0),a+=2,Q&&F){const r=this.stringToFixedBytes(F.metadata,64);new Uint8Array(l,a,64).set(r),a+=64}return n&&e&&(B.setUint32(a,e.sample_rate,!0),a+=4,B.setUint32(a,e.timebase_num,!0),a+=4,B.setUint32(a,e.timebase_den,!0),a+=4,B.setUint16(a,e.codec_profile,!0),a+=2,B.setUint16(a,e.codec_level,!0),a+=2,B.setUint16(a,e.width,!0),a+=2,B.setUint16(a,e.height,!0),a+=2,B.setUint8(a,e.codec_type),a+=1,B.setUint8(a,e.channels),a+=1,B.setUint8(a,e.bit_depth),a+=1,B.setUint8(a,e.reserved),a+=1),t&&t.length>0&&new Uint8Array(l,a).set(t),new Uint8Array(l)}static parseData(U){const F={valid:!1,header:null,metadata:null,codec_data:null,payload:null,payload_size:0};if(!U||U.length<36)return F;const e=new DataView(U.buffer,U.byteOffset);let t=0;const Q={magic:e.getUint32(t,!0),flags:e.getUint32(t+4,!0),pts:e.getBigUint64(t+8,!0),id:e.getBigUint64(t+16,!0),version:e.getUint16(t+24,!0),header_size:e.getUint16(t+26,!0),type:e.getUint16(t+28,!0),reserved:e.getUint16(t+30,!0)};if(t+=qi,!this.validateHeader(Q,U.length))return F;if(F.header=Q,Q.flags&Un){if(U.length<t+lU)return F;const n=U.slice(t,t+lU),s=this.fixedBytesToString(n);F.metadata={metadata:s},t+=lU}if(Q.flags&$i){if(U.length<t+ui)return F;F.codec_data={sample_rate:e.getUint32(t,!0),timebase_num:e.getUint32(t+4,!0),timebase_den:e.getUint32(t+8,!0),codec_profile:e.getUint16(t+12,!0),codec_level:e.getUint16(t+14,!0),width:e.getUint16(t+16,!0),height:e.getUint16(t+18,!0),codec_type:e.getUint8(t+20),channels:e.getUint8(t+21),bit_depth:e.getUint8(t+22),reserved:e.getUint8(t+23)},t+=ui}return t<U.length?(F.payload=U.slice(t),F.payload_size=F.payload.length):(F.payload=new Uint8Array(0),F.payload_size=0),F.valid=!0,F}static stringToFixedBytes(U,F){const e=new Uint8Array(F);let t;typeof TextEncoder<"u"?t=new TextEncoder().encode(U):t=new Uint8Array(Buffer.from(U,"utf8"));const Q=Math.min(t.length,F-1);return e.set(t.slice(0,Q)),e[Q]=0,e}static fixedBytesToString(U){let F=U.length;for(let e=0;e<U.length;e++)if(U[e]===0){F=e;break}return typeof TextDecoder<"u"?new TextDecoder().decode(U.slice(0,F)):Buffer.from(U.slice(0,F)).toString("utf8")}}function on(i,U,F){const e=i*BigInt(U.num)*BigInt(F.den)/(BigInt(U.den)*BigInt(F.num));return Number(e)}function fn(i,U){return!i&&!U?!1:!i||!U?!0:i.codec_type!==U.codec_type||i.width!==U.width||i.height!==U.height||i.codec_profile!==U.codec_profile||i.codec_level!==U.codec_level}function Xs(i){switch(i.codec_type){case 3:const U=i.codec_profile>0?i.codec_profile.toString(16).padStart(2,"0"):"42",F="00",e=i.codec_level>0?i.codec_level.toString(16).padStart(2,"0"):"1f";return`avc1.${U}${F}${e}`;case 4:return"hev1.1.6.L93.B0";case 2:return"vp09.00.10.08";case 1:return"vp8";case 5:return"av01.0.00M.08";default:return null}}class Hi{constructor(U={}){d(this,"decoder",null);d(this,"config");d(this,"flushing",!1);d(this,"logger");d(this,"maxQueueSize");d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"chunksSentToDecoder",0);d(this,"framesDecoded",0);this.logger=U.logger??eU,this.onFrameDecoded=U.onFrameDecoded??U.onFrame,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow,this.maxQueueSize=U.maxQueueSize??10,this.createDecoder()}get decodeQueueSize(){var U;return((U=this.decoder)==null?void 0:U.decodeQueueSize)??0}get state(){var U;return((U=this.decoder)==null?void 0:U.state)??"closed"}createDecoder(){this.decoder=new VideoDecoder({output:U=>{this.framesDecoded++,this.onFrameDecoded?this.onFrameDecoded(U):U.close()},error:U=>{this.logger.error(`Decoder error: ${U.message}`),this.onError&&this.onError(U)}})}async configure(U,F=!0){return"codec"in U&&typeof U.codec=="string"?this.configureWithConfig(U):this.configureWithCodecData(U,F)}async configureWithConfig(U){var e;const F=[U,{...U,hardwareAcceleration:U.hardwareAcceleration==="prefer-hardware"?"prefer-software":"prefer-hardware"}];for(const t of F)if((await VideoDecoder.isConfigSupported(t)).supported){this.config=t,(e=this.decoder)==null||e.configure(t),this.logger.info(`Decoder configured: ${t.codec} ${t.codedWidth}x${t.codedHeight} (${t.hardwareAcceleration??"default"})`);return}throw new Error(`Codec configuration not supported: ${U.codec}`)}async configureWithCodecData(U,F=!0){var Q;const e=Xs(U);if(!e)throw new Error(`Unsupported codec type: ${U.codec_type}`);const t=[{codec:e,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:F?"prefer-hardware":"prefer-software",latencyMode:"realtime"},{codec:e,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:F?"prefer-software":"prefer-hardware",latencyMode:"realtime"}];for(const n of t)if((await VideoDecoder.isConfigSupported(n)).supported){this.config=n,(Q=this.decoder)==null||Q.configure(n),this.logger.info(`Decoder configured: ${e} ${U.width}x${U.height} (${n.hardwareAcceleration})`);return}throw new Error(`Codec configuration not supported: ${e}`)}decodeBinary(U){var n,s;if(this.flushing){this.logger.warn("Received packet while flushing");return}if(!U.header||!U.payload||!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const F=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},e={num:1,den:1e6},t=on(U.header.pts,F,e),Q=new EncodedVideoChunk({timestamp:t,type:U.header.flags&In?"key":"delta",data:U.payload??new Uint8Array(0)});try{this.chunksSentToDecoder++,this.decoder.decode(Q)}catch(l){this.logger.error(`Decode error: ${l}`)}}decode(U){if(this.flushing){this.logger.warn("Received sample while flushing");return}if(!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const F=new EncodedVideoChunk({timestamp:U.timestamp,duration:U.duration,type:U.isKeyframe?"key":"delta",data:U.data});try{this.chunksSentToDecoder++,this.decoder.decode(F)}catch(e){this.logger.error(`Decode error: ${e}`)}}async flush(){if(!(!this.decoder||this.decoder.state==="closed")){this.flushing=!0;try{await this.decoder.flush()}catch{}this.flushing=!1}}flushSync(){this.flushing=!0,this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config)),this.flushing=!1}reset(){this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config))}dispose(){this.decoder&&(this.decoder.state!=="closed"&&this.decoder.close(),this.decoder=null),this.config=void 0}}const wn="dmFyIEwgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gYShBLCBDKSB7CiAgICB0aGlzLnRpbnlIMjY0TW9kdWxlID0gQSwgdGhpcy5vblBpY3R1cmVSZWFkeSA9IEMsIHRoaXMucFN0b3JhZ2UgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkQWxsb2MoKSwgdGhpcy5wV2lkdGggPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9tYWxsb2MoNCksIHRoaXMucEhlaWdodCA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5wUGljdHVyZSA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5fZGVjQnVmZmVyID0gdGhpcy50aW55SDI2NE1vZHVsZS5fbWFsbG9jKDEwNDg1NzYpLCB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkSW5pdCh0aGlzLnBTdG9yYWdlLCAwKTsKICB9CiAgdmFyIEogPSBhLnByb3RvdHlwZTsKICByZXR1cm4gSi5yZWxlYXNlID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgQyA9IHRoaXMucFN0b3JhZ2U7CiAgICBDICE9PSAwICYmICh0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkU2h1dGRvd24oQyksIHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2RGcmVlKEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBXaWR0aCksIHRoaXMudGlueUgyNjRNb2R1bGUuX2ZyZWUodGhpcy5wSGVpZ2h0KSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBQaWN0dXJlKSwgdGhpcy5wU3RvcmFnZSA9IDAsIHRoaXMucFdpZHRoID0gMCwgdGhpcy5wSGVpZ2h0ID0gMDsKICB9LCBKLmRlY29kZSA9IGZ1bmN0aW9uKEMpIHsKICAgIEMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiAoQyA9IG5ldyBVaW50OEFycmF5KEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5IRUFQVTguc2V0KEMsIHRoaXMuX2RlY0J1ZmZlcik7CiAgICB2YXIgUyA9IHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2REZWNvZGUodGhpcy5wU3RvcmFnZSwgdGhpcy5fZGVjQnVmZmVyLCBDLmJ5dGVMZW5ndGgsIHRoaXMucFBpY3R1cmUsIHRoaXMucFdpZHRoLCB0aGlzLnBIZWlnaHQpOwogICAgaWYgKFMgPT09IGEuUElDX1JEWSkgewogICAgICB2YXIgRCA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wV2lkdGgsICJpMzIiKSwgRSA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wSGVpZ2h0LCAiaTMyIiksIHMgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLmdldFZhbHVlKHRoaXMucFBpY3R1cmUsICJpOCoiKSwgRyA9IG5ldyBVaW50OEFycmF5KHRoaXMudGlueUgyNjRNb2R1bGUuSEVBUFU4LnN1YmFycmF5KHMsIHMgKyBEICogRSAqIDMgLyAyKSk7CiAgICAgIHRoaXMub25QaWN0dXJlUmVhZHkoRywgRCwgRSk7CiAgICB9CiAgfSwgYTsKfSgpOwpMLlJEWSA9IDA7CkwuUElDX1JEWSA9IDE7CkwuSERSU19SRFkgPSAyOwpMLkVSUk9SID0gMzsKTC5QQVJBTV9TRVRfRVJST1IgPSA0OwpMLk1FTUFMTE9DX0VSUk9SID0gNTsKdmFyIFNBID0gZnVuY3Rpb24oKSB7CiAgdmFyIGEgPSB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwOwogIHJldHVybiBmdW5jdGlvbihBKSB7CiAgICBBID0gQSB8fCB7fTsKICAgIHZhciBBID0gdHlwZW9mIEEgPCAidSIgPyBBIDoge30sIEMsIFM7CiAgICBBLnJlYWR5ID0gbmV3IFByb21pc2UoZnVuY3Rpb24oSSwgZykgewogICAgICBDID0gSSwgUyA9IGc7CiAgICB9KTsKICAgIHZhciBEID0ge30sIEU7CiAgICBmb3IgKEUgaW4gQSkKICAgICAgQS5oYXNPd25Qcm9wZXJ0eShFKSAmJiAoRFtFXSA9IEFbRV0pOwogICAgdmFyIHMgPSAhMCwgRyA9ICIiOwogICAgZnVuY3Rpb24gVShJKSB7CiAgICAgIHJldHVybiBBLmxvY2F0ZUZpbGUgPyBBLmxvY2F0ZUZpbGUoSSwgRykgOiBHICsgSTsKICAgIH0KICAgIHZhciBNOwogICAgRyA9IHNlbGYubG9jYXRpb24uaHJlZiwgYSAmJiAoRyA9IGEpLCBHLmluZGV4T2YoImJsb2I6IikgIT09IDAgPyBHID0gRy5zdWJzdHIoMCwgRy5sYXN0SW5kZXhPZigiLyIpICsgMSkgOiBHID0gIiIsIE0gPSBmdW5jdGlvbihnKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIFEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXR1cm4gUS5vcGVuKCJHRVQiLCBnLCAhMSksIFEucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIiwgUS5zZW5kKG51bGwpLCBuZXcgVWludDhBcnJheShRLnJlc3BvbnNlKTsKICAgICAgfSBjYXRjaCAoeSkgewogICAgICAgIHZhciBCID0geihnKTsKICAgICAgICBpZiAoQikKICAgICAgICAgIHJldHVybiBCOwogICAgICAgIHRocm93IHk7CiAgICAgIH0KICAgIH0sIEEucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTsKICAgIHZhciBrID0gQS5wcmludEVyciB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTsKICAgIGZvciAoRSBpbiBEKQogICAgICBELmhhc093blByb3BlcnR5KEUpICYmIChBW0VdID0gRFtFXSk7CiAgICBEID0gbnVsbCwgQS5hcmd1bWVudHMgJiYgQS5hcmd1bWVudHMsIEEudGhpc1Byb2dyYW0gJiYgQS50aGlzUHJvZ3JhbSwgQS5xdWl0ICYmIEEucXVpdDsKICAgIHZhciBIOwogICAgQS53YXNtQmluYXJ5ICYmIChIID0gQS53YXNtQmluYXJ5KSwgQS5ub0V4aXRSdW50aW1lLCB0eXBlb2YgV2ViQXNzZW1ibHkgIT0gIm9iamVjdCIgJiYgYygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpOwogICAgZnVuY3Rpb24gdihJLCBnLCBRKSB7CiAgICAgIHN3aXRjaCAoZyA9IGcgfHwgImk4IiwgZy5jaGFyQXQoZy5sZW5ndGggLSAxKSA9PT0gIioiICYmIChnID0gImkzMiIpLCBnKSB7CiAgICAgICAgY2FzZSAiaTEiOgogICAgICAgICAgcmV0dXJuIHRbSSA+PiAwXTsKICAgICAgICBjYXNlICJpOCI6CiAgICAgICAgICByZXR1cm4gdFtJID4+IDBdOwogICAgICAgIGNhc2UgImkxNiI6CiAgICAgICAgICByZXR1cm4gT1tJID4+IDFdOwogICAgICAgIGNhc2UgImkzMiI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImk2NCI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImZsb2F0IjoKICAgICAgICAgIHJldHVybiBsW0kgPj4gMl07CiAgICAgICAgY2FzZSAiZG91YmxlIjoKICAgICAgICAgIHJldHVybiBUW0kgPj4gM107CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGMoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIgKyBnKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBLLCBlID0gITE7CiAgICBmdW5jdGlvbiBfKEksIGcpIHsKICAgICAgcmV0dXJuIEkgJSBnID4gMCAmJiAoSSArPSBnIC0gSSAlIGcpLCBJOwogICAgfQogICAgdmFyIG0sIHQsIHIsIE8sIG4sIGwsIFQ7CiAgICBmdW5jdGlvbiBYKEkpIHsKICAgICAgbSA9IEksIEEuSEVBUDggPSB0ID0gbmV3IEludDhBcnJheShJKSwgQS5IRUFQMTYgPSBPID0gbmV3IEludDE2QXJyYXkoSSksIEEuSEVBUDMyID0gbiA9IG5ldyBJbnQzMkFycmF5KEkpLCBBLkhFQVBVOCA9IHIgPSBuZXcgVWludDhBcnJheShJKSwgQS5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KEkpLCBBLkhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoSSksIEEuSEVBUEYzMiA9IGwgPSBuZXcgRmxvYXQzMkFycmF5KEkpLCBBLkhFQVBGNjQgPSBUID0gbmV3IEZsb2F0NjRBcnJheShJKTsKICAgIH0KICAgIEEuSU5JVElBTF9NRU1PUlk7CiAgICB2YXIgcCwgYiA9IFtdLCBqID0gW10sIFYgPSBbXTsKICAgIGZ1bmN0aW9uICQoKSB7CiAgICAgIGlmIChBLnByZVJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnByZVJ1biA9PSAiZnVuY3Rpb24iICYmIChBLnByZVJ1biA9IFtBLnByZVJ1bl0pOyBBLnByZVJ1bi5sZW5ndGg7ICkKICAgICAgICAgIGdBKEEucHJlUnVuLnNoaWZ0KCkpOwogICAgICBaKGIpOwogICAgfQogICAgZnVuY3Rpb24gQUEoKSB7CiAgICAgIFooaik7CiAgICB9CiAgICBmdW5jdGlvbiBJQSgpIHsKICAgICAgaWYgKEEucG9zdFJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnBvc3RSdW4gPT0gImZ1bmN0aW9uIiAmJiAoQS5wb3N0UnVuID0gW0EucG9zdFJ1bl0pOyBBLnBvc3RSdW4ubGVuZ3RoOyApCiAgICAgICAgICBDQShBLnBvc3RSdW4uc2hpZnQoKSk7CiAgICAgIFooVik7CiAgICB9CiAgICBmdW5jdGlvbiBnQShJKSB7CiAgICAgIGIudW5zaGlmdChJKTsKICAgIH0KICAgIGZ1bmN0aW9uIFFBKEkpIHsKICAgICAgai51bnNoaWZ0KEkpOwogICAgfQogICAgZnVuY3Rpb24gQ0EoSSkgewogICAgICBWLnVuc2hpZnQoSSk7CiAgICB9CiAgICB2YXIgdyA9IDAsIEYgPSBudWxsOwogICAgZnVuY3Rpb24gQkEoSSkgewogICAgICB3KyssIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyk7CiAgICB9CiAgICBmdW5jdGlvbiBFQShJKSB7CiAgICAgIGlmICh3LS0sIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyksIHcgPT0gMCAmJiBGKSB7CiAgICAgICAgdmFyIGcgPSBGOwogICAgICAgIEYgPSBudWxsLCBnKCk7CiAgICAgIH0KICAgIH0KICAgIEEucHJlbG9hZGVkSW1hZ2VzID0ge30sIEEucHJlbG9hZGVkQXVkaW9zID0ge307CiAgICBmdW5jdGlvbiBjKEkpIHsKICAgICAgQS5vbkFib3J0ICYmIEEub25BYm9ydChJKSwgSSArPSAiIiwgayhJKSwgZSA9ICEwLCBJID0gImFib3J0KCIgKyBJICsgIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjsKICAgICAgdmFyIGcgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEkpOwogICAgICB0aHJvdyBTKGcpLCBnOwogICAgfQogICAgdmFyIFAgPSAiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7CiAgICBmdW5jdGlvbiBXKEkpIHsKICAgICAgcmV0dXJuIEkuc3RhcnRzV2l0aChQKTsKICAgIH0KICAgIHZhciBoOwogICAgaCA9ICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUdGemJRRUFBQUFCWWc1Z0NYOS9mMzkvZjM5L2Z3QmdBMzkvZndGL1lBSi9md0YvWUFGL0FYOWdBWDhBWUFSL2YzOS9BWDlnQm45L2YzOS9md0JnQW45L0FHQURmMzkvQUdBQUFHQUlmMzkvZjM5L2YzOEFZQVIvZjM5L0FHQUFBWDlnQm45L2YzOS9md0YvQWcwQ0FXRUJZUUFEQVdFQllnQUJBeVFqQWdFRUJRVUJBd0FCQ0FBR0F3Y0NBUUFHQWdrREFBQUFBQVFLQndJTEJBd0VEUUlFQlFGd0FRRUJCUWNCQVlBQ2dJQUNCZ2tCZndGQmdNVEFBZ3NIS1FvQll3SUFBV1FBRlFGbEFDUUJaZ0FJQVdjQUJBRm9BQ01CYVFBaUFXb0FJUUZyQUNBQmJBRUFDdktWQnlQM0NRRUpmeUFBS0FJRUlRVUNRQUpBQWtBQ1FBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnaHJJZ2RCSUU0RVFDQUZLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVESUFBb0FnZ2lBa1VOQVNBRElBSjBJQVV0QUFSQkNDQUNhM1p5SVFNTUFRc2dCMEVCU0FSQURBSUxJQVV0QUFBZ0FDZ0NDQ0lDUVJocUlnWjBJUU1nQWlBSGFrRUlheUlFUVFGSURRQWdCU0VDQTBBZ0FpMEFBU0FHUVFocklnWjBJQU55SVFNZ0JFRUlTaUVISUFKQkFXb2hBaUFFUVFocklRUWdCdzBBQ3dzZ0EwRi9UQVJBSUFBZ0NFRUJhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUFJUVFnQWlBSlN3MENJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JBd0NDeUFEUVlDQWdJQUVUd1JBSUFBZ0NFRURhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUJJUVlnQWlBSlN3MEVJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JDQURRUjEyUVFGeFFRRnFJUVFNQWdzZ0EwR0FnSUNBQWs4RVFDQUFJQWhCQldvaUFqWUNFQ0FBSUFKQkIzRTJBZ2hCQVNFR0lBSWdDVXNOQkNBQUlBQW9BZ0FnQWtFRGRtbzJBZ1FnQTBFYmRrRURjVUVEYWlFRURBSUxJQU5CZ0lDQWdBRkpEUUFnQUNBSVFRZHFJZ0kyQWhBZ0FDQUNRUWR4TmdJSVFRRWhCaUFDSUFsTERRTWdBQ0FBS0FJQUlBSkJBM1pxTmdJRUlBTkJHWFpCQjNGQkIyb2hCQXdCQzBHQWdJREFBQ0VFUVFRaENrRUFJUUlDUUNBRFFZQ0FnTUFBY1EwQUEwQUNRQ0FDSWdaQkFXb2hBaUFFUVFKSkRRQWdCRUVCZGlJRUlBTnhSUTBCQ3dzZ0JrRUZhaUlLUVNCSERRQWdBVUVBTmdJQUlBQWdBQ2dDRUNJS1FRZHhJZ00yQWdnZ0FDQUtRU0JxSWdJMkFoQWdBaUFBS0FJTVFRTjBJZ2ROQkVBZ0FDQUFLQUlBSUFKQkEzWnFJZ1UyQWdRTEFrQWdCeUFDYXlJR1FTQk9CRUFnQlNnQUFDSUNRUmgwSUFKQkNIUkJnSUQ4QjNGeUlBSkJDSFpCZ1A0RGNTQUNRUmgyY25JaEJDQURSUTBCSUFRZ0EzUWdCUzBBQkVFSUlBTnJkbkloQkF3QkN5QUdRUUZJQkVCQkFDRUVEQUVMSUFVdEFBQWdBMEVZY2lJQ2RDRUVJQU1nQm1wQkNHc2lBMEVCU0EwQUEwQWdCUzBBQVNBQ1FRaHJJZ0owSUFSeUlRUWdBMEVJU2lFR0lBVkJBV29oQlNBRFFRaHJJUU1nQmcwQUN3c2dBQ0FLUVNGcUlnTTJBaEFnQUNBRFFRZHhJZ1UyQWdoQkFTRUdJQU1nQjBzTkF5QUFJQUFvQWdBaUFpQURRUU4yYWpZQ0JDQUVRWDlLRFFNZ0FCQVdJUU1nQUNBRk5nSUlJQUFnQ2tIQkFHb2lCVFlDRUNBRklBZExEUU1nQUNBQ0lBVkJBM1pxTmdJRVFYOGhCQUpBSUFNT0FnTUFCQXRCQVNFRERBSUxJQUFnQWlBSWFrRUZhaUlJTmdJUUlBQWdDRUVIY1NJSE5nSUlJQWdnQ1UwRVFDQUFJQUFvQWdBZ0NFRURkbW9pQlRZQ0JBc0NRQ0FKSUFocklnTkJJRTRFUUNBRktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUVJQWRGRFFFZ0JDQUhkQ0FGTFFBRVFRZ2dCMnQyY2lFRURBRUxJQU5CQVVnRVFFRUFJUVFNQVFzZ0JTMEFBQ0FIUVJoeUlnWjBJUVFnQXlBSGFrRUlheUlEUVFGSURRQURRQ0FGTFFBQklBWkJDR3NpQm5RZ0JISWhCQ0FEUVFoS0lRY2dCVUVCYWlFRklBTkJDR3NoQXlBSERRQUxDeUFBSUFnZ0Ntb2lCVFlDRUNBQUlBVkJCM0UyQWdoQkFTRUdJQVVnQ1VzTkFpQUFJQUFvQWdBZ0JVRURkbW8yQWdRZ0JFRWNJQUpyZGlJQVFYOUdEUUlnQUVGL0lBcDBRWDl6YWlFRUMwRUFJUU1MSUFFZ0JEWUNBQ0FESVFZTElBWUw4Z0lDQW44QmZnSkFJQUpGRFFBZ0FDQUNhaUlEUVFGcklBRTZBQUFnQUNBQk9nQUFJQUpCQTBrTkFDQURRUUpySUFFNkFBQWdBQ0FCT2dBQklBTkJBMnNnQVRvQUFDQUFJQUU2QUFJZ0FrRUhTUTBBSUFOQkJHc2dBVG9BQUNBQUlBRTZBQU1nQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCQkdzZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FRaHJJQUUyQWdBZ0FrRU1heUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRVFheUFCTmdJQUlBSkJGR3NnQVRZQ0FDQUNRUmhySUFFMkFnQWdBa0VjYXlBQk5nSUFJQVFnQTBFRWNVRVljaUlFYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFVZ0F5QUVhaUVCQTBBZ0FTQUZOd01ZSUFFZ0JUY0RFQ0FCSUFVM0F3Z2dBU0FGTndNQUlBRkJJR29oQVNBQ1FTQnJJZ0pCSDBzTkFBc0xJQUFMekF3QkIzOENRQ0FBUlEwQUlBQkJDR3NpQXlBQVFRUnJLQUlBSWdGQmVIRWlBR29oQlFKQUlBRkJBWEVOQUNBQlFRTnhSUTBCSUFNZ0F5Z0NBQ0lCYXlJRFFaakFBQ2dDQUVrTkFTQUFJQUZxSVFBZ0EwR2N3QUFvQWdCSEJFQWdBVUgvQVUwRVFDQURLQUlJSWdJZ0FVRURkaUlFUVFOMFFiREFBR3BHR2lBQ0lBTW9BZ3dpQVVZRVFFR0l3QUJCaU1BQUtBSUFRWDRnQkhkeE5nSUFEQU1MSUFJZ0FUWUNEQ0FCSUFJMkFnZ01BZ3NnQXlnQ0dDRUdBa0FnQXlBREtBSU1JZ0ZIQkVBZ0F5Z0NDQ0lDSUFFMkFnd2dBU0FDTmdJSURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEFRd0JDd05BSUFJaEJ5QUVJZ0ZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUVDSUFFb0FoQWlCQTBBQ3lBSFFRQTJBZ0FMSUFaRkRRRUNRQ0FESUFNb0Fod2lBa0VDZEVHNHdnQnFJZ1FvQWdCR0JFQWdCQ0FCTmdJQUlBRU5BVUdNd0FCQmpNQUFLQUlBUVg0Z0FuZHhOZ0lBREFNTElBWkJFRUVVSUFZb0FoQWdBMFliYWlBQk5nSUFJQUZGRFFJTElBRWdCallDR0NBREtBSVFJZ0lFUUNBQklBSTJBaEFnQWlBQk5nSVlDeUFES0FJVUlnSkZEUUVnQVNBQ05nSVVJQUlnQVRZQ0dBd0JDeUFGS0FJRUlnRkJBM0ZCQTBjTkFFR1F3QUFnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQThMSUFNZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FDQUJRUUp4UlFSQUlBVkJvTUFBS0FJQVJnUkFRYURBQUNBRE5nSUFRWlRBQUVHVXdBQW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQTBHY3dBQW9BZ0JIRFFOQmtNQUFRUUEyQWdCQm5NQUFRUUEyQWdBUEN5QUZRWnpBQUNnQ0FFWUVRRUdjd0FBZ0F6WUNBRUdRd0FCQmtNQUFLQUlBSUFCcUlnQTJBZ0FnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUE4TElBRkJlSEVnQUdvaEFBSkFJQUZCL3dGTkJFQWdCU2dDQ0NJQ0lBRkJBM1lpQkVFRGRFR3d3QUJxUmhvZ0FpQUZLQUlNSWdGR0JFQkJpTUFBUVlqQUFDZ0NBRUYrSUFSM2NUWUNBQXdDQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMSUFVb0FoZ2hCZ0pBSUFVZ0JTZ0NEQ0lCUndSQUlBVW9BZ2dpQWtHWXdBQW9BZ0JKR2lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMQWtBZ0JVRVVhaUlDS0FJQUlnUU5BQ0FGUVJCcUlnSW9BZ0FpQkEwQVFRQWhBUXdCQ3dOQUlBSWhCeUFFSWdGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlFQ0lBRW9BaEFpQkEwQUN5QUhRUUEyQWdBTElBWkZEUUFDUUNBRklBVW9BaHdpQWtFQ2RFRzR3Z0JxSWdRb0FnQkdCRUFnQkNBQk5nSUFJQUVOQVVHTXdBQkJqTUFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdJRVFDQUJJQUkyQWhBZ0FpQUJOZ0lZQ3lBRktBSVVJZ0pGRFFBZ0FTQUNOZ0lVSUFJZ0FUWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFaekFBQ2dDQUVjTkFVR1F3QUFnQURZQ0FBOExJQVVnQVVGK2NUWUNCQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBQ3lBQVFmOEJUUVJBSUFCQkEzWWlBVUVEZEVHd3dBQnFJUUFDZjBHSXdBQW9BZ0FpQWtFQklBRjBJZ0Z4UlFSQVFZakFBQ0FCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQWlBQUlBTTJBZ2dnQWlBRE5nSU1JQU1nQURZQ0RDQURJQUkyQWdnUEMwRWZJUUlnQTBJQU53SVFJQUJCLy8vL0IwMEVRQ0FBUVFoMklnRWdBVUdBL2o5cVFSQjJRUWh4SWdGMElnSWdBa0dBNEI5cVFSQjJRUVJ4SWdKMElnUWdCRUdBZ0E5cVFSQjJRUUp4SWdSMFFROTJJQUVnQW5JZ0JISnJJZ0ZCQVhRZ0FDQUJRUlZxZGtFQmNYSkJIR29oQWdzZ0F5QUNOZ0ljSUFKQkFuUkJ1TUlBYWlFQkFrQUNRQUpBUVl6QUFDZ0NBQ0lFUVFFZ0FuUWlCM0ZGQkVCQmpNQUFJQVFnQjNJMkFnQWdBU0FETmdJQUlBTWdBVFlDR0F3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFCS0FJQUlRRURRQ0FCSWdRb0FnUkJlSEVnQUVZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFRZ0FVRUVjV29pQjBFUWFpZ0NBQ0lCRFFBTElBY2dBellDRUNBRElBUTJBaGdMSUFNZ0F6WUNEQ0FESUFNMkFnZ01BUXNnQkNnQ0NDSUFJQU0yQWd3Z0JDQUROZ0lJSUFOQkFEWUNHQ0FESUFRMkFnd2dBeUFBTmdJSUMwR293QUJCcU1BQUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTDJBc0JGSDhnQVVHUVBXb3RBQUJCREd3aUIwSEVQR29vQWdBaEJTQUhRY0E4YWlnQ0FDQUJRWUE4YWkwQUFDSUdkQ0VFSUFKRkJFQWdBQ0FBS0FJQUlBUnNOZ0lBQ3lBRklBWjBJUUVDUUFKQUlBTkJuUDhEY1FSQVFRRWhBeUFBSUFBb0FqZ2dBV3dpQlNBQUtBSWtJQUZzSWcxcUlnd2dCMEhJUEdvb0FnQWdCblFpQWlBQUtBSThiQ0lHUVFGMUlBQW9BaWdnQW13aUNtb2lEMnNpQnpZQ1BDQUFJQTBnQldzaUJTQUtRUUYxSUFacklnMXJJZ1kyQWpnZ0FDZ0NOQ0VLSUFBZ0JTQU5haUlGTmdJMElBQWdBQ2dDTENBRWJDSUlJQUFvQWd3Z0JHd2lEbW9pRUNBQUtBSWdJQUZzSWdrZ0FTQUtiQ0lLUVFGMWFpSVNheUlOTmdJc0lBQWdEaUFJYXlJSUlBbEJBWFVnQ21zaURtc2lDallDS0NBQUlBZ2dEbW9pQ0RZQ0pDQUFJQUFvQWh3Z0FXd2lEaUFBS0FJSUlBRnNJZ2xxSWhRZ0FDZ0NFQ0FDYkNJTElBQW9BakFnQW13aUVVRUJkV29pRldzaUFqWUNIQ0FBS0FJWUlSTWdBQ0FKSUE1cklna2dDMEVCZFNBUmF5SUxheUlPTmdJWUlBQW9BaFFoRVNBQUlBa2dDMm9pQ1RZQ0ZDQUFJQVFnRVd3aUJDQUFLQUlBSWd0cUloRWdBQ2dDQkNBQmJDSVdJQUVnRTJ3aUUwRUJkV29pRjJzaUFUWUNEQ0FBSUFzZ0JHc2lDeUFXUVFGMUlCTnJJaE5ySWdRMkFnZ2dBQ0FMSUJOcUlnczJBZ1FnQUNBUUlCSnFJaEFnRVNBWGFpSVNha0VnYWlJUklCUWdGV29pRkNBTUlBOXFJZ3hCQVhWcUlnOXJRUVoxSWhVMkFqQWdBQ0FTSUJCclFTQnFJaEFnRkVFQmRTQU1heUlNYTBFR2RTSVNOZ0lnSUFBZ0RDQVFha0VHZFNJTU5nSVFJQUFnRHlBUmFrRUdkU0lQTmdJQUlBOUJnQVJxUWY4SFN3MENJQXhCZ0FScVFmOEhTdzBDSUJKQmdBUnFRZjhIU3cwQ0lCVkJnQVJxUWY4SFN3MENJQUFnQ0NBTGFrRWdhaUlNSUFWQkFYVWdDV29pRDJ0QkJuVWlFRFlDTkNBQUlBc2dDR3RCSUdvaUNDQUpRUUYxSUFWcklnVnJRUVoxSWdrMkFpUWdBQ0FGSUFocVFRWjFJZ1UyQWhRZ0FDQU1JQTlxUVFaMUlnZzJBZ1FnQ0VHQUJHcEIvd2RMRFFJZ0JVR0FCR3BCL3dkTERRSWdDVUdBQkdwQi93ZExEUUlnRUVHQUJHcEIvd2RMRFFJZ0FDQUVJQXBxUVNCcUlnVWdCa0VCZFNBT2FpSUlhMEVHZFNJSk5nSTRJQUFnQkNBS2EwRWdhaUlFSUE1QkFYVWdCbXNpQm10QkJuVWlDallDS0NBQUlBUWdCbXBCQm5VaUJEWUNHQ0FBSUFVZ0NHcEJCblVpQmpZQ0NDQUdRWUFFYWtIL0Iwc05BaUFFUVlBRWFrSC9CMHNOQWlBS1FZQUVha0gvQjBzTkFpQUpRWUFFYWtIL0Iwc05BaUFBSUFFZ0RXcEJJR29pQkNBSFFRRjFJQUpxSWdaclFRWjFJZ1UyQWp3Z0FDQUJJQTFyUVNCcUlnRWdBa0VCZFNBSGF5SUNhMEVHZFNJSE5nSXNJQUFnQVNBQ2FrRUdkU0lCTmdJY0lBQWdCQ0FHYWtFR2RTSUFOZ0lNSUFCQmdBUnFRZjhIU3cwQ0lBRkJnQVJxUWY4SFN3MENJQWRCZ0FScVFmOEhTdzBDSUFWQmdBUnFRZjhIVFEwQkRBSUxJQU5CNGdCeFJRUkFRUUVoQXlBQUtBSUFRU0JxUVFaMUlnRkJnQVJxUWY4SFN3MENJQUFnQVRZQ09DQUFJQUUyQWp3Z0FDQUJOZ0kwSUFBZ0FUWUNNQ0FBSUFFMkFpd2dBQ0FCTmdJb0lBQWdBVFlDSkNBQUlBRTJBaUFnQUNBQk5nSWNJQUFnQVRZQ0dDQUFJQUUyQWhRZ0FDQUJOZ0lRSUFBZ0FUWUNEQ0FBSUFFMkFnZ2dBQ0FCTmdJRUlBQWdBVFlDQUF3QkMwRUJJUU1nQUNBQUtBSUVJQUZzSWdVZ0FDZ0NHQ0FCYkNJTlFRRjFhaUlDSUFBb0FnQWlCeUFBS0FJVUlBUnNJZ1pxSWdScVFTQnFRUVoxSWdFMkFqQWdBQ0FFSUFKclFTQnFRUVoxSWdJMkFnd2dBQ0FGUVFGMUlBMXJJZ1VnQnlBR2EycEJJR3BCQm5VaUJEWUNCQ0FBSUFFMkFnQWdBQ0FCTmdJZ0lBQWdCRFlDTkNBQUlBRTJBaEFnQUNBRU5nSWtJQUFnQkRZQ0ZDQUFJQUkyQWp3Z0FDQUhJQVVnQm1wclFTQnFRUVoxSWdjMkFnZ2dBQ0FITmdJNElBQWdCellDS0NBQUlBYzJBaGdnQUNBQ05nSXNJQUFnQWpZQ0hDQUJRWUFFYWtIL0Iwc05BU0FFUVlBRWFrSC9CMHNOQVNBSFFZQUVha0gvQjBzTkFTQUNRWUFFYWtIL0Iwc05BUXRCQUNFREN5QURDL29hQVJGL0l3QkJnQUZySWcwa0FDQUFLQUlFSVFRQ2Z3SkFBbjhDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJTUloSkJBM1FpRUNBQUtBSVFJZ2xySWdWQklFNEVRQ0FFS0FBQUlnVkJHSFFnQlVFSWRFR0FnUHdIY1hJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lFR0lBQW9BZ2dpQlVVTkFTQUdJQVYwSUFRdEFBUkJDQ0FGYTNaeUlRWU1BUXNnQlVFQlNBMEJJQVF0QUFBZ0FDZ0NDQ0lLUVJocUlnZDBJUVlnQlNBS2FrRUlheUlGUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0JuSWhCaUFGUVFoS0lRb2dCRUVCYWlFRUlBVkJDR3NoQlNBS0RRQUxDeUFDUVFKUERRTWdCa0VBU0FSQVFRRWhDd3dPQ3lBR1FSbDJRZjRBY1VHQUNHb2dCa0dBZ0lEZ0FFOE5EQm9nQmtFVmRrSCtEM0ZCd0FocUlBWkJnSUNBQ0U4TkRCb2dCa0dBZ0lBQlNRUkFJQVpCRUhZaEJBd0NDeUFHUVJGMlFmNy9BWEZCa0FscURBd0xRUUFoQkNBQ1FRSlBEUUVMSUFSQkFYUkJrQXBxREFvTElBSkJCRThOQVF3SUN5QUNRUVJKRFFZZ0FrRUlUdzBDSUFaQi8vLy8vd0ZORFFFZ0JrRVpka0grQUhGQjBBMXFEQWdMSUFKQkNFOE5BZ3NnQmtFVmRrSCtEM0ZCMEE1cURBWUxJQUpCRVVrTkFTQUdRZi8vLy84QlRRMENJQVpCSEhaQkRuRkIwQkZxREFVTElBSkJFRXNOQVFzZ0JrRVpka0grQUhGQjBCQnFEQU1MSUFaQkYzWkIvZ054UWVBUmFnd0NDeUFHUVg5TUJFQkJBa0dpRUNBR1FZQ0FnSUFFY1JzaEN3d0RDeUFHUVJsMlFmNEFjVUhRQ21vZ0JrR0FnSUNBQVU4TkFSb2dCa0dBZ0lBUVNRMEFJQVpCRm5aQi9nZHhRWkFMYWd3QkN5QUdRUkYyUWY3L0FYRkIwQXRxQ3k4QkFDSUxEUUJCQVF3QkMwRUJJQU1nQzBFTGRpSU9TUTBBR2tFZ0lBdEJIM0VpQW1zaENFRUFJUVVDUUNBTFFZQVFTUTBBSUFZZ0MzUWhCQUpBSUF0QkJYWkJQM0VpRDBVRVFFRUFJUWNNQVFzQ1FDQUlJQTlQRFFBZ0FDQUNJQWxxSWdrMkFoQWdBQ0FKUVFkeElnSTJBZ2hCQVNBSklCQkxEUU1hSUFBZ0FDZ0NBQ0FKUVFOMmFpSUZOZ0lFUVNBaENDQVFJQWxySWdwQklFNEVRQ0FGS0FBQUlnUkJHSFFnQkVFSWRFR0FnUHdIY1hJZ0JFRUlka0dBL2dOeElBUkJHSFp5Y2lFRUlBSkZEUUVnQkNBQ2RDQUZMUUFFUVFnZ0FtdDJjaUVFREFFTElBcEJBVWdFUUVFQUlRUU1BUXNnQlMwQUFDQUNRUmh5SWdkMElRUWdBaUFLYWtFSWF5SUdRUUZJRFFBRFFDQUZMUUFCSUFkQkNHc2lCM1FnQkhJaEJDQUdRUWhLSVFJZ0JVRUJhaUVGSUFaQkNHc2hCaUFDRFFBTEMwRUJJQTlCQVd0MElRVWdCRUVnSUE5cmRpRUNRUUFoQndOQUlBMUJRR3NnQjBFQ2RHcEJmMEVCSUFJZ0JYRWJOZ0lBSUFkQkFXb2hCeUFGUVFGTElRb2dCVUVCZGlFRklBb05BQXNnQ0NBUGF5RUlJQVFnRDNRaEJBc2dCeUFPU1FSQUlBOUJBMGtpRkNBTFFmK3ZBVXR4SVFvRFFBSkFJQWhCRDBzTkFDQUFJQWtnQ0d0QklHb2lDVFlDRUNBQUlBbEJCM0VpQWpZQ0NFRUJJQkpCQTNRaUJDQUpTUTBFR2lBQUlBQW9BZ0FnQ1VFRGRtb2lCVFlDQkNBRUlBbHJJZ3hCSUU0RVFDQUZLQUFBSWdSQkdIUWdCRUVJZEVHQWdQd0hjWElnQkVFSWRrR0EvZ054SUFSQkdIWnljaUVFUVNBaENDQUNSUTBCSUFRZ0FuUWdCUzBBQkVFSUlBSnJkbkloQkF3QkMwRUJJQXhCQVVnTkJCb2dCUzBBQUNBQ1FSaHlJZ3QwSVFSQklDRUlJQUlnREdwQkNHc2lCa0VCU0EwQUEwQWdCUzBBQVNBTFFRaHJJZ3QwSUFSeUlRUWdCa0VJU2lFQ0lBVkJBV29oQlNBR1FRaHJJUVlnQWcwQUN3dEJBQ0VGQWtBQ1FBSi9Ba0FnQkVFQVNBMEFRUUVoQlNBRVFmLy8vLzhEU3cwQVFRSWhCU0FFUWYvLy8vOEJTdzBBUVFNaEJTQUVRZi8vLy84QVN3MEFRUVFoQlNBRVFmLy8vejlMRFFCQkJTRUZJQVJCLy8vL0gwc05BRUVHSVFVZ0JFSC8vLzhQU3cwQVFRY2hCU0FFUWYvLy93ZExEUUJCQ0NFRklBUkIvLy8vQTBzTkFFRUpJUVVnQkVILy8vOEJTdzBBUVFvaEJTQUVRZi8vL3dCTERRQkJDeUVGSUFSQi8vOC9TdzBBUVF3aEJTQUVRZi8vSDBzTkFFRU5JUVVnQkVILy93OUxEUUFDZndKQUlBUkIvLzhIVFFSQUlBUkJnSUI4Y1VHQWdBUkdEUUZCQVF3S0N5QUtRUVFnQ2hzaERDQUlRUTlySVFoQkRpRUZJQVJCRDNRTUFRc2dDa0VCSUFvYklRb2dDRUVRYXlFSVFRd2hERUVQSVFVZ0JFRVFkQXNoQkNBRklBcDBJUXNnQ2tVTUFRc2dCU0FLZENFTFFRRWhFeUFJSUFWQkFXb2lBbXNoQ0NBRUlBSjBJUVFnQ2tVTkFTQUtJUXhCQUFzaEV3SkFJQWdnREU4RVFDQUVJUVVNQVFzZ0FDQUpJQWhyUVNCcUlnazJBaEFnQUNBSlFRZHhJZ1kyQWdoQkFTQVNRUU4wSUFsSkRRWWFJQUFnQUNnQ0FDQUpRUU4yYWlJRU5nSUVJQkFnQ1dzaUVVRWdUZ1JBSUFRb0FBQWlBa0VZZENBQ1FRaDBRWUNBL0FkeGNpQUNRUWgyUVlEK0EzRWdBa0VZZG5KeUlRVkJJQ0VJSUFaRkRRRWdCU0FHZENBRUxRQUVRUWdnQm10MmNpRUZEQUVMUVNBaENDQVJRUUZJQkVCQkFDRUZEQUVMSUFRdEFBQWdCa0VZY2lJQ2RDRUZJQVlnRVdwQkNHc2lCa0VCU0EwQUEwQWdCQzBBQVNBQ1FRaHJJZ0owSUFWeUlRVWdCa0VJU2lFUklBUkJBV29oQkNBR1FRaHJJUVlnRVEwQUN3c2dDQ0FNYXlFSUlBVWdESFFoQkNBRlFTQWdER3QySUF0cUlRc01BUXRCQUNFS0N5QU5RVUJySUFkQkFuUnFRUUFnQzBFQ2FpQUxJQWNnRDBZYklBc2dGQnNpQlVFQ2FrRUJkaUlDYXlBQ0lBVkJBWEViTmdJQVFRRWdDaUFUR3lJRklBVkJCa2tnQWtFRElBVkJBV3QwU25GcUlRb2dCMEVCYWlJSElBNUhEUUFMQzBFQUlRY2dBeUFPU3dSQUlBaEJDRTBFUUNBSklBaHJJUUpCSUNFSUlBQWdBa0VnYWlJSk5nSVFJQUFnQ1VFSGNUWUNDRUVCSUFrZ0VFc05BeG9nQUNBQUtBSUFJQWxCQTNacU5nSUVJQUFRRmlFRUN3SkFBa0FDZndKQUlBTkJCRWNFUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUE1QkFXc09EZzRBQVFJREJBVUdCd2dKQ2dzTUVBc2dCRUVhZGtIZ0Vtb01EZ3NnQkVFYWRrR2dFMm9NRFFzZ0JFRWJka0hnRTJvTURBc2dCRUViZGtHQUZHb01Dd3NnQkVFYWRrR2dGR29NQ2dzZ0JFRWFka0hnRkdvTUNRc2dCRUVhZGtHZ0ZXb01DQXNnQkVFYWRrSGdGV29NQndzZ0JFRWJka0dnRm1vTUJnc2dCRUVjZGtIQUZtb01CUXNnQkVFY2RrSFFGbW9NQkFzZ0JFRWRka0hnRm1vTUF3c2dCRUVlZGtIb0Ztb01BZ3NnQkVFQVNBUkFRUUVoQlF3RUMwRVJJUVVnRGtFRFJnMERRUkloQlNBRVFmLy8vLzhEU3cwRFFTSWhCU0FPUVFKR0RRTkJNMEVqSUFSQmdJQ0FnQUpKR3lFRkRBTUxJQVJCRjNaQndCSnFJZ0lnQWlBRVFSdDJJZ0pCb0JKcUlBSkJBVVliSUFSQmdJQ0F3QUJKR3dzdEFBQWlCUTBCUVFFTUJBdEJBVUVSSUFSQmYwb2JJUVVMSUFWQkJIWWhCeUFJSUFWQkQzRWlBbXNoQ0NBRUlBSjBJUVFMSUE1QkFXc2lBd1JBSUJKQkEzUWhEMEVBSVFvRFFBSkFJQWNFUUFKQUlBaEJDa3NOQUNBQUlBa2dDR3RCSUdvaUNUWUNFQ0FBSUFsQkIzRWlBallDQ0VFQklBa2dEMHNOQmhvZ0FDQUFLQUlBSUFsQkEzWnFJZ1UyQWdRZ0VDQUpheUlNUVNCT0JFQWdCU2dBQUNJRVFSaDBJQVJCQ0hSQmdJRDhCM0Z5SUFSQkNIWkJnUDREY1NBRVFSaDJjbkloQkVFZ0lRZ2dBa1VOQVNBRUlBSjBJQVV0QUFSQkNDQUNhM1p5SVFRTUFRdEJJQ0VJSUF4QkFVZ0VRRUVBSVFRTUFRc2dCUzBBQUNBQ1FSaHlJZ3QwSVFRZ0FpQU1ha0VJYXlJR1FRRklEUUFEUUNBRkxRQUJJQXRCQ0dzaUMzUWdCSEloQkNBR1FRaEtJUUlnQlVFQmFpRUZJQVpCQ0dzaEJpQUNEUUFMQ3dKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBSFFRRnJEZ1lHQUFFQ0F3UUZDeUFFUVI1MlFlNFdhZ3dHQ3lBRVFSNTJRZklXYWd3RkN5QUVRUjEyUWZZV2Fnd0VDeUFFUVIxMlFmNFdhZ3dEQ3lBRVFSMTJRWVlYYWd3Q0N3Si9RZk1BSUFSQkdYWkI4QUJ4YXlBRVFZQ0FnSUFDVHcwQUdrSDBBQ0FFUWYvLy8vOEFTdzBBR2tHRkFTQUVRZi8vL3o5TERRQWFRWllCSUFSQi8vLy9IMHNOQUJwQnB3RWdCRUgvLy84UFN3MEFHa0c0QVNBRVFmLy8vd2RMRFFBYVFja0JJQVJCLy8vL0Ewc05BQnBCMmdFZ0JFSC8vLzhCU3cwQUdrRUFRZXNCSUFSQmdJQ0FBVWtiQ3lJRlFRUjJJQWRORFFKQkFRd0lDeUFFUVI5MlFld1dhZ3N0QUFBaEJRdEJBU0FGUlEwRkdpQU5JQXBCQW5ScUlBVkJCSFlpQWtFQmFqWUNBQ0FISUFKcklRY2dDQ0FGUVE5eElnSnJJUWdnQkNBQ2RDRUVEQUVMSUEwZ0NrRUNkR3BCQVRZQ0FFRUFJUWNMSUFwQkFXb2lDaUFEUncwQUN5QUJJQWRCQW5ScUlBMUJRR3NnQTBFQ2RHb29BZ0EyQWdBZ0RrRUNheUVDUVFFZ0IzUWhCU0FEUVFGeEJIOGdBU0FOSUFKQkFuUWlBMm9vQWdBZ0Iyb2lCMEVDZEdvZ0RVRkFheUFEYWlnQ0FEWUNBRUVCSUFkMElBVnlJUVVnRGtFRGF3VWdBZ3NoQkNBQ1JRMEJBMEFnQVNBTklBUkJBblFpQTJvb0FnQWdCMm9pQWtFQ2RHb2dEVUZBYXlJTUlBTnFLQUlBTmdJQUlBRWdEU0FFUVFGcklnTkJBblFpQ21vb0FnQWdBbW9pQjBFQ2RHb2dDaUFNYWlnQ0FEWUNBRUVCSUFKMElBVnlRUUVnQjNSeUlRVWdCRUVDYXlFRUlBTU5BQXNNQVFzZ0FTQUhRUUowYWlBTktBSkFOZ0lBUVFFZ0IzUWhCUXNnQUNBQUtBSVFJQWhyUVNCcUlnRTJBaEFnQUNBQlFRZHhOZ0lJUVFFZ0FTQUFLQUlNUVFOMFN3MEFHaUFBSUFBb0FnQWdBVUVEZG1vMkFnUWdCVUVRZENBT1FRUjBjZ3NoQkNBTlFZQUJhaVFBSUFRTGd3UUJBMzhnQWtHQUJFOEVRQ0FBSUFFZ0FoQUJHaUFBRHdzZ0FDQUNhaUVEQWtBZ0FDQUJjMEVEY1VVRVFBSkFJQUJCQTNGRkJFQWdBQ0VDREFFTElBSkJBVWdFUUNBQUlRSU1BUXNnQUNFQ0EwQWdBaUFCTFFBQU9nQUFJQUZCQVdvaEFTQUNRUUZxSWdKQkEzRkZEUUVnQWlBRFNRMEFDd3NDUUNBRFFYeHhJZ1JCd0FCSkRRQWdBaUFFUVVCcUlnVkxEUUFEUUNBQ0lBRW9BZ0EyQWdBZ0FpQUJLQUlFTmdJRUlBSWdBU2dDQ0RZQ0NDQUNJQUVvQWd3MkFnd2dBaUFCS0FJUU5nSVFJQUlnQVNnQ0ZEWUNGQ0FDSUFFb0FoZzJBaGdnQWlBQktBSWNOZ0ljSUFJZ0FTZ0NJRFlDSUNBQ0lBRW9BaVEyQWlRZ0FpQUJLQUlvTmdJb0lBSWdBU2dDTERZQ0xDQUNJQUVvQWpBMkFqQWdBaUFCS0FJME5nSTBJQUlnQVNnQ09EWUNPQ0FDSUFFb0FqdzJBandnQVVGQWF5RUJJQUpCUUdzaUFpQUZUUTBBQ3dzZ0FpQUVUdzBCQTBBZ0FpQUJLQUlBTmdJQUlBRkJCR29oQVNBQ1FRUnFJZ0lnQkVrTkFBc01BUXNnQTBFRVNRUkFJQUFoQWd3QkN5QUFJQU5CQkdzaUJFc0VRQ0FBSVFJTUFRc2dBQ0VDQTBBZ0FpQUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUZCQkdvaEFTQUNRUVJxSWdJZ0JFME5BQXNMSUFJZ0Ewa0VRQU5BSUFJZ0FTMEFBRG9BQUNBQlFRRnFJUUVnQWtFQmFpSUNJQU5IRFFBTEN5QUFDNEF2QVF0L0l3QkJFR3NpQ3lRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBUWZRQlRRUkFRWWpBQUNnQ0FDSUhRUkFnQUVFTGFrRjRjU0FBUVF0Skd5SUdRUU4ySWdKMklnRkJBM0VFUUNBQlFYOXpRUUZ4SUFKcUlnUkJBM1FpQVVHNHdBQnFLQUlBSWdOQkNHb2hBQUpBSUFNb0FnZ2lBaUFCUWJEQUFHb2lBVVlFUUVHSXdBQWdCMEYrSUFSM2NUWUNBQXdCQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlDeUFESUFSQkEzUWlBVUVEY2pZQ0JDQUJJQU5xSWdFZ0FTZ0NCRUVCY2pZQ0JBd01DeUFHUVpEQUFDZ0NBQ0lLVFEwQklBRUVRQUpBUVFJZ0FuUWlBRUVBSUFCcmNpQUJJQUowY1NJQVFRQWdBR3R4UVFGcklnQWdBRUVNZGtFUWNTSUNkaUlCUVFWMlFRaHhJZ0FnQW5JZ0FTQUFkaUlCUVFKMlFRUnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQ2NTSUFjaUFCSUFCMklnRkJBWFpCQVhFaUFISWdBU0FBZG1vaUJFRURkQ0lBUWJqQUFHb29BZ0FpQXlnQ0NDSUJJQUJCc01BQWFpSUFSZ1JBUVlqQUFDQUhRWDRnQkhkeElnYzJBZ0FNQVFzZ0FTQUFOZ0lNSUFBZ0FUWUNDQXNnQTBFSWFpRUFJQU1nQmtFRGNqWUNCQ0FESUFacUlnSWdCRUVEZENJQklBWnJJZ1JCQVhJMkFnUWdBU0FEYWlBRU5nSUFJQW9FUUNBS1FRTjJJZ0ZCQTNSQnNNQUFhaUVGUVp6QUFDZ0NBQ0VEQW44Z0IwRUJJQUYwSWdGeFJRUkFRWWpBQUNBQklBZHlOZ0lBSUFVTUFRc2dCU2dDQ0FzaEFTQUZJQU0yQWdnZ0FTQUROZ0lNSUFNZ0JUWUNEQ0FESUFFMkFnZ0xRWnpBQUNBQ05nSUFRWkRBQUNBRU5nSUFEQXdMUVl6QUFDZ0NBQ0lKUlEwQklBbEJBQ0FKYTNGQkFXc2lBQ0FBUVF4MlFSQnhJZ0oySWdGQkJYWkJDSEVpQUNBQ2NpQUJJQUIySWdGQkFuWkJCSEVpQUhJZ0FTQUFkaUlCUVFGMlFRSnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQmNTSUFjaUFCSUFCMmFrRUNkRUc0d2dCcUtBSUFJZ0VvQWdSQmVIRWdCbXNoQkNBQklRSURRQUpBSUFJb0FoQWlBRVVFUUNBQ0tBSVVJZ0JGRFFFTElBQW9BZ1JCZUhFZ0Jtc2lBaUFFSUFJZ0JFa2lBaHNoQkNBQUlBRWdBaHNoQVNBQUlRSU1BUXNMSUFFb0FoZ2hDQ0FCSUFFb0Fnd2lBMGNFUUNBQktBSUlJZ0JCbU1BQUtBSUFTUm9nQUNBRE5nSU1JQU1nQURZQ0NBd0xDeUFCUVJScUlnSW9BZ0FpQUVVRVFDQUJLQUlRSWdCRkRRTWdBVUVRYWlFQ0N3TkFJQUloQlNBQUlnTkJGR29pQWlnQ0FDSUFEUUFnQTBFUWFpRUNJQU1vQWhBaUFBMEFDeUFGUVFBMkFnQU1DZ3RCZnlFR0lBQkJ2MzlMRFFBZ0FFRUxhaUlBUVhoeElRWkJqTUFBS0FJQUlnbEZEUUJCQUNBR2F5RUVBa0FDUUFKQUFuOUJBQ0FHUVlBQ1NRMEFHa0VmSUFaQi8vLy9CMHNOQUJvZ0FFRUlkaUlBSUFCQmdQNC9ha0VRZGtFSWNTSUNkQ0lBSUFCQmdPQWZha0VRZGtFRWNTSUJkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBQklBSnlJQUJ5YXlJQVFRRjBJQVlnQUVFVmFuWkJBWEZ5UVJ4cUN5SUhRUUowUWJqQ0FHb29BZ0FpQWtVRVFFRUFJUUFNQVF0QkFDRUFJQVpCQUVFWklBZEJBWFpySUFkQkgwWWJkQ0VCQTBBQ1FDQUNLQUlFUVhoeElBWnJJZ1VnQkU4TkFDQUNJUU1nQlNJRURRQkJBQ0VFSUFJaEFBd0RDeUFBSUFJb0FoUWlCU0FGSUFJZ0FVRWRka0VFY1dvb0FoQWlBa1liSUFBZ0JSc2hBQ0FCUVFGMElRRWdBZzBBQ3dzZ0FDQURja1VFUUVFQUlRTkJBaUFIZENJQVFRQWdBR3R5SUFseElnQkZEUU1nQUVFQUlBQnJjVUVCYXlJQUlBQkJESFpCRUhFaUFuWWlBVUVGZGtFSWNTSUFJQUp5SUFFZ0FIWWlBVUVDZGtFRWNTSUFjaUFCSUFCMklnRkJBWFpCQW5FaUFISWdBU0FBZGlJQlFRRjJRUUZ4SWdCeUlBRWdBSFpxUVFKMFFiakNBR29vQWdBaEFBc2dBRVVOQVFzRFFDQUFLQUlFUVhoeElBWnJJZ0VnQkVraEFpQUJJQVFnQWhzaEJDQUFJQU1nQWhzaEF5QUFLQUlRSWdFRWZ5QUJCU0FBS0FJVUN5SUFEUUFMQ3lBRFJRMEFJQVJCa01BQUtBSUFJQVpyVHcwQUlBTW9BaGdoQnlBRElBTW9BZ3dpQVVjRVFDQURLQUlJSWdCQm1NQUFLQUlBU1JvZ0FDQUJOZ0lNSUFFZ0FEWUNDQXdKQ3lBRFFSUnFJZ0lvQWdBaUFFVUVRQ0FES0FJUUlnQkZEUU1nQTBFUWFpRUNDd05BSUFJaEJTQUFJZ0ZCRkdvaUFpZ0NBQ0lBRFFBZ0FVRVFhaUVDSUFFb0FoQWlBQTBBQ3lBRlFRQTJBZ0FNQ0FzZ0JrR1F3QUFvQWdBaUFrMEVRRUdjd0FBb0FnQWhCQUpBSUFJZ0Jtc2lBVUVRVHdSQVFaREFBQ0FCTmdJQVFaekFBQ0FFSUFacUlnQTJBZ0FnQUNBQlFRRnlOZ0lFSUFJZ0JHb2dBVFlDQUNBRUlBWkJBM0kyQWdRTUFRdEJuTUFBUVFBMkFnQkJrTUFBUVFBMkFnQWdCQ0FDUVFOeU5nSUVJQUlnQkdvaUFDQUFLQUlFUVFGeU5nSUVDeUFFUVFocUlRQU1DZ3NnQmtHVXdBQW9BZ0FpQ0VrRVFFR1V3QUFnQ0NBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBb0xRUUFoQUNBR1FTOXFJZ2tDZjBIZ3d3QW9BZ0FFUUVIb3d3QW9BZ0FNQVF0QjdNTUFRbjgzQWdCQjVNTUFRb0NnZ0lDQWdBUTNBZ0JCNE1NQUlBdEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmVERBRUVBTmdJQVFjVERBRUVBTmdJQVFZQWdDeUlCYWlJSFFRQWdBV3NpQlhFaUFpQUdUUTBKUWNEREFDZ0NBQ0lEQkVCQnVNTUFLQUlBSWdRZ0Ftb2lBU0FFVFEwS0lBRWdBMHNOQ2d0QnhNTUFMUUFBUVFSeERRUUNRQUpBUWFEQUFDZ0NBQ0lFQkVCQnlNTUFJUUFEUUNBRUlBQW9BZ0FpQVU4RVFDQUJJQUFvQWdScUlBUkxEUU1MSUFBb0FnZ2lBQTBBQ3d0QkFCQU9JZ0ZCZjBZTkJTQUNJUWRCNU1NQUtBSUFJZ1JCQVdzaUFDQUJjUVJBSUFJZ0FXc2dBQ0FCYWtFQUlBUnJjV29oQndzZ0JpQUhUdzBGSUFkQi92Ly8vd2RMRFFWQndNTUFLQUlBSWdNRVFFRzR3d0FvQWdBaUJDQUhhaUlBSUFSTkRRWWdBQ0FEU3cwR0N5QUhFQTRpQUNBQlJ3MEJEQWNMSUFjZ0NHc2dCWEVpQjBIKy8vLy9CMHNOQkNBSEVBNGlBU0FBS0FJQUlBQW9BZ1JxUmcwRElBRWhBQXNDUUNBQVFYOUdEUUFnQmtFd2FpQUhUUTBBUWVqREFDZ0NBQ0lCSUFrZ0IydHFRUUFnQVd0eElnRkIvdi8vL3dkTEJFQWdBQ0VCREFjTElBRVFEa0YvUndSQUlBRWdCMm9oQnlBQUlRRU1Cd3RCQUNBSGF4QU9HZ3dFQ3lBQUlnRkJmMGNOQlF3REMwRUFJUU1NQnd0QkFDRUJEQVVMSUFGQmYwY05BZ3RCeE1NQVFjVERBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVVHQXdBQW9BZ0FpQVNBQ1FRTnFRWHh4SWdKcUlRQUNRQUpBQW44Q1FDQUNSUTBBSUFBZ0FVc05BQ0FCREFFTElBQS9BRUVRZEUwTkFTQUFFQUFOQVVHQXdBQW9BZ0FMSVFCQmhNQUFRVEEyQWdCQmZ5RUJEQUVMUVlEQUFDQUFOZ0lBQ3lBQVB3QkJFSFJMQkVBZ0FCQUFSUTBDQzBHQXdBQWdBRFlDQUNBQlFYOUdEUUVnQUVGL1JnMEJJQUFnQVUwTkFTQUFJQUZySWdjZ0JrRW9hazBOQVF0QnVNTUFRYmpEQUNnQ0FDQUhhaUlBTmdJQVFiekRBQ2dDQUNBQVNRUkFRYnpEQUNBQU5nSUFDd0pBQWtBQ1FFR2d3QUFvQWdBaUJRUkFRY2pEQUNFQUEwQWdBU0FBS0FJQUlnUWdBQ2dDQkNJQ2FrWU5BaUFBS0FJSUlnQU5BQXNNQWd0Qm1NQUFLQUlBSWdCQkFDQUFJQUZORzBVRVFFR1l3QUFnQVRZQ0FBdEJBQ0VBUWN6REFDQUhOZ0lBUWNqREFDQUJOZ0lBUWFqQUFFRi9OZ0lBUWF6QUFFSGd3d0FvQWdBMkFnQkIxTU1BUVFBMkFnQURRQ0FBUVFOMElnUkJ1TUFBYWlBRVFiREFBR29pQWpZQ0FDQUVRYnpBQUdvZ0FqWUNBQ0FBUVFGcUlnQkJJRWNOQUF0QmxNQUFJQWRCS0dzaUJFRjRJQUZyUVFkeFFRQWdBVUVJYWtFSGNSc2lBR3NpQWpZQ0FFR2d3QUFnQUNBQmFpSUFOZ0lBSUFBZ0FrRUJjallDQkNBQklBUnFRU2cyQWdSQnBNQUFRZkREQUNnQ0FEWUNBQXdDQ3lBQUxRQU1RUWh4RFFBZ0JDQUZTdzBBSUFFZ0JVME5BQ0FBSUFJZ0IybzJBZ1JCb01BQUlBVkJlQ0FGYTBFSGNVRUFJQVZCQ0dwQkIzRWJJZ0JxSWdJMkFnQkJsTUFBUVpUQUFDZ0NBQ0FIYWlJQklBQnJJZ0EyQWdBZ0FpQUFRUUZ5TmdJRUlBRWdCV3BCS0RZQ0JFR2t3QUJCOE1NQUtBSUFOZ0lBREFFTFFaakFBQ2dDQUNBQlN3UkFRWmpBQUNBQk5nSUFDeUFCSUFkcUlRUkJ5TU1BSVFJQ1FBTkFJQVFnQWlnQ0FFY0VRRUhJd3dBaEFDQUNLQUlJSWdJTkFRd0NDd3RCeU1NQUlRQWdBaTBBREVFSWNRMEFJQUlnQVRZQ0FDQUNJQUlvQWdRZ0IybzJBZ1FnQVVGNElBRnJRUWR4UVFBZ0FVRUlha0VIY1J0cUlna2dCa0VEY2pZQ0JDQUVRWGdnQkd0QkIzRkJBQ0FFUVFocVFRZHhHMm9pQXlBR0lBbHFJZ2hySVFJQ1FDQURJQVZHQkVCQm9NQUFJQWcyQWdCQmxNQUFRWlRBQUNnQ0FDQUNhaUlBTmdJQUlBZ2dBRUVCY2pZQ0JBd0JDeUFEUVp6QUFDZ0NBRVlFUUVHY3dBQWdDRFlDQUVHUXdBQkJrTUFBS0FJQUlBSnFJZ0EyQWdBZ0NDQUFRUUZ5TmdJRUlBQWdDR29nQURZQ0FBd0JDeUFES0FJRUlnQkJBM0ZCQVVZRVFDQUFRWGh4SVFjQ1FDQUFRZjhCVFFSQUlBTW9BZ2dpQkNBQVFRTjJJZ0JCQTNSQnNNQUFha1lhSUFRZ0F5Z0NEQ0lCUmdSQVFZakFBRUdJd0FBb0FnQkJmaUFBZDNFMkFnQU1BZ3NnQkNBQk5nSU1JQUVnQkRZQ0NBd0JDeUFES0FJWUlRWUNRQ0FESUFNb0Fnd2lBVWNFUUNBREtBSUlJZ0FnQVRZQ0RDQUJJQUEyQWdnTUFRc0NRQ0FEUVJScUlnQW9BZ0FpQkEwQUlBTkJFR29pQUNnQ0FDSUVEUUJCQUNFQkRBRUxBMEFnQUNFRklBUWlBVUVVYWlJQUtBSUFJZ1FOQUNBQlFSQnFJUUFnQVNnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQmtVTkFBSkFJQU1nQXlnQ0hDSUVRUUowUWJqQ0FHb2lBQ2dDQUVZRVFDQUFJQUUyQWdBZ0FRMEJRWXpBQUVHTXdBQW9BZ0JCZmlBRWQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFFMkFnQWdBVVVOQVFzZ0FTQUdOZ0lZSUFNb0FoQWlBQVJBSUFFZ0FEWUNFQ0FBSUFFMkFoZ0xJQU1vQWhRaUFFVU5BQ0FCSUFBMkFoUWdBQ0FCTmdJWUN5QURJQWRxSVFNZ0FpQUhhaUVDQ3lBRElBTW9BZ1JCZm5FMkFnUWdDQ0FDUVFGeU5nSUVJQUlnQ0dvZ0FqWUNBQ0FDUWY4QlRRUkFJQUpCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFnMkFnZ2dBQ0FJTmdJTUlBZ2dBallDRENBSUlBQTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdSMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQkhJZ0FISnJJZ0JCQVhRZ0FpQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0NDQUFOZ0ljSUFoQ0FEY0NFQ0FBUVFKMFFiakNBR29oQXdKQUFrQkJqTUFBS0FJQUlnUkJBU0FBZENJQmNVVUVRRUdNd0FBZ0FTQUVjallDQUNBRElBZzJBZ0FnQ0NBRE5nSVlEQUVMSUFKQkFFRVpJQUJCQVhacklBQkJIMFliZENFQUlBTW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhBU0FBUVFGMElRQWdCQ0FCUVFSeGFpSURLQUlRSWdFTkFBc2dBeUFJTmdJUUlBZ2dCRFlDR0FzZ0NDQUlOZ0lNSUFnZ0NEWUNDQXdCQ3lBRUtBSUlJZ0FnQ0RZQ0RDQUVJQWcyQWdnZ0NFRUFOZ0lZSUFnZ0JEWUNEQ0FJSUFBMkFnZ0xJQWxCQ0dvaEFBd0ZDd05BQWtBZ0JTQUFLQUlBSWdKUEJFQWdBaUFBS0FJRWFpSURJQVZMRFFFTElBQW9BZ2doQUF3QkN3dEJsTUFBSUFkQktHc2lCRUY0SUFGclFRZHhRUUFnQVVFSWFrRUhjUnNpQUdzaUFqWUNBRUdnd0FBZ0FDQUJhaUlBTmdJQUlBQWdBa0VCY2pZQ0JDQUJJQVJxUVNnMkFnUkJwTUFBUWZEREFDZ0NBRFlDQUNBRklBTkJKeUFEYTBFSGNVRUFJQU5CSjJ0QkIzRWJha0V2YXlJQUlBQWdCVUVRYWtrYklnSkJHellDQkNBQ1FkRERBQ2tDQURjQ0VDQUNRY2pEQUNrQ0FEY0NDRUhRd3dBZ0FrRUlhallDQUVITXd3QWdCellDQUVISXd3QWdBVFlDQUVIVXd3QkJBRFlDQUNBQ1FSaHFJUUFEUUNBQVFRYzJBZ1FnQUVFSWFpRUJJQUJCQkdvaEFDQUJJQU5KRFFBTElBSWdCVVlOQUNBQ0lBSW9BZ1JCZm5FMkFnUWdCU0FDSUFWcklnTkJBWEkyQWdRZ0FpQUROZ0lBSUFOQi93Rk5CRUFnQTBFRGRpSUFRUU4wUWJEQUFHb2hBZ0ovUVlqQUFDZ0NBQ0lCUVFFZ0FIUWlBSEZGQkVCQmlNQUFJQUFnQVhJMkFnQWdBZ3dCQ3lBQ0tBSUlDeUVBSUFJZ0JUWUNDQ0FBSUFVMkFnd2dCU0FDTmdJTUlBVWdBRFlDQ0F3QkMwRWZJUUFnQlVJQU53SVFJQU5CLy8vL0IwMEVRQ0FEUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0F5QUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFCQkFuUkJ1TUlBYWlFRUFrQUNRRUdNd0FBb0FnQWlBa0VCSUFCMElnRnhSUVJBUVl6QUFDQUJJQUp5TmdJQUlBUWdCVFlDQUNBRklBUTJBaGdNQVFzZ0EwRUFRUmtnQUVFQmRtc2dBRUVmUmh0MElRQWdCQ2dDQUNFQkEwQWdBU0lDS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVCSUFCQkFYUWhBQ0FDSUFGQkJIRnFJZ1FvQWhBaUFRMEFDeUFFSUFVMkFoQWdCU0FDTmdJWUN5QUZJQVUyQWd3Z0JTQUZOZ0lJREFFTElBSW9BZ2dpQUNBRk5nSU1JQUlnQlRZQ0NDQUZRUUEyQWhnZ0JTQUNOZ0lNSUFVZ0FEWUNDQXRCbE1BQUtBSUFJZ0FnQmswTkFFR1V3QUFnQUNBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBTUxRUUFoQUVHRXdBQkJNRFlDQUF3Q0N3SkFJQWRGRFFBQ1FDQURLQUljSWdKQkFuUkJ1TUlBYWlJQUtBSUFJQU5HQkVBZ0FDQUJOZ0lBSUFFTkFVR013QUFnQ1VGK0lBSjNjU0lKTmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQTBZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQnpZQ0dDQURLQUlRSWdBRVFDQUJJQUEyQWhBZ0FDQUJOZ0lZQ3lBREtBSVVJZ0JGRFFBZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNDUUNBRVFROU5CRUFnQXlBRUlBWnFJZ0JCQTNJMkFnUWdBQ0FEYWlJQUlBQW9BZ1JCQVhJMkFnUU1BUXNnQXlBR1FRTnlOZ0lFSUFNZ0Jtb2lCU0FFUVFGeU5nSUVJQVFnQldvZ0JEWUNBQ0FFUWY4QlRRUkFJQVJCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBallDRENBRklBQTJBZ2dNQVF0Qkh5RUFJQVJCLy8vL0IwMEVRQ0FFUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0JDQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFWQ0FEY0NFQ0FBUVFKMFFiakNBR29oQVFKQUFrQWdDVUVCSUFCMElnSnhSUVJBUVl6QUFDQUNJQWx5TmdJQUlBRWdCVFlDQUF3QkN5QUVRUUJCR1NBQVFRRjJheUFBUVI5R0czUWhBQ0FCS0FJQUlRWURRQ0FHSWdFb0FnUkJlSEVnQkVZTkFpQUFRUjEySVFJZ0FFRUJkQ0VBSUFFZ0FrRUVjV29pQWlnQ0VDSUdEUUFMSUFJZ0JUWUNFQXNnQlNBQk5nSVlJQVVnQlRZQ0RDQUZJQVUyQWdnTUFRc2dBU2dDQ0NJQUlBVTJBZ3dnQVNBRk5nSUlJQVZCQURZQ0dDQUZJQUUyQWd3Z0JTQUFOZ0lJQ3lBRFFRaHFJUUFNQVFzQ1FDQUlSUTBBQWtBZ0FTZ0NIQ0lDUVFKMFFiakNBR29pQUNnQ0FDQUJSZ1JBSUFBZ0F6WUNBQ0FERFFGQmpNQUFJQWxCZmlBQ2QzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUJSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUlOZ0lZSUFFb0FoQWlBQVJBSUFNZ0FEWUNFQ0FBSUFNMkFoZ0xJQUVvQWhRaUFFVU5BQ0FESUFBMkFoUWdBQ0FETmdJWUN3SkFJQVJCRDAwRVFDQUJJQVFnQm1vaUFFRURjallDQkNBQUlBRnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUJJQVpCQTNJMkFnUWdBU0FHYWlJQ0lBUkJBWEkyQWdRZ0FpQUVhaUFFTmdJQUlBb0VRQ0FLUVFOMklnQkJBM1JCc01BQWFpRUZRWnpBQUNnQ0FDRURBbjlCQVNBQWRDSUFJQWR4UlFSQVFZakFBQ0FBSUFkeU5nSUFJQVVNQVFzZ0JTZ0NDQXNoQUNBRklBTTJBZ2dnQUNBRE5nSU1JQU1nQlRZQ0RDQURJQUEyQWdnTFFaekFBQ0FDTmdJQVFaREFBQ0FFTmdJQUN5QUJRUWhxSVFBTElBdEJFR29rQUNBQUMrNFdBUkIvSUFBZ0JFRUFJQVpySUFJZ0FpQUdha0VBU0JzaUFpQUNJQVJLR3lJT1FRQWdEa0VBU2hzaUZHb2dCVUVBSUFkcklBTWdBeUFIYWtFQVNCc2lBQ0FBSUFWS0d5SURJQVJzUVFBZ0EwRUFTaHRxSVFrZ0IwRUFJQU5ySUFOQkgzVnhJZ29nQXlBSGFpSVZJQVZySWhKQkFDQUZJQlZJR3lJWGFtc2hEeUFHUVFBZ0Rtc2dEa0VmZFhFaUN5QUdJQTVxSWhNZ0JHdEJBQ0FFSUJOSUlnQWJJZzFxYXlFTUFrQWdEa0VBU0NBQWNpSVlSUVJBQWtBZ0NrVU5BQ0FLUVFOeElnSUVRQU5BSUFwQkFXc2hDaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QURRWDl6SUFOQkFDQURRUUJLRzJwQkEwa05BQU5BSUFFZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvaEFTQUtRUVJySWdvTkFBc0xJQTlGRFFFZ0QwRURjU0lDQkVBRFFDQVBRUUZySVE4Z0FTQUpJQXdRQnlBSWFpRUJJQVFnQ1dvaENTQUNRUUZySWdJTkFBc0xJQVVnQjJvZ0Eyb2dCU0FWSUFVZ0ZVb2JRWDl6YWlBRFFRQWdBMEVBU2h0clFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBUWdDV29pQUNBTUVBY2dDR29nQUNBRWFpSUFJQXdRQnlBSWFpQUFJQVJxSWdBZ0RCQUhJQWhxSVFFZ0FDQUVhaUVKSUE5QkJHc2lEdzBBQ3d3QkN3SkFJQXBGRFFBQ1FDQU1SUVJBSUFsQkFXc2hBaUFMUlFSQUlBMUZEUUlnQTBGL2N5QURRUUFnQTBFQVNodHFJUUFnQ2tFRGNTSURCRUFEUUNBS1FRRnJJUW9nQVNBQ0xRQUFJQTBRQXlBSWFpRUJJQU5CQVdzaUF3MEFDd3NnQUVFRFNRMERJQXBCQkdzaUFFRUVjVVVFUUNBQUlRb2dBU0FDTFFBQUlBMFFBeUFJYWlBQ0xRQUFJQTBRQXlBSWFpQUNMUUFBSUEwUUF5QUlhaUFDTFFBQUlBMFFBeUFJYWlFQkN5QUFRUVJKRFFNRFFDQUJJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlRRWdDa0VJYXlJS0RRQUxEQU1MSUFOQmYzTWdBMEVBSUFOQkFFb2JhaUVBSUFwQkEzRWhBeUFOQkVBZ0F3UkFBMEFnQVNBSkxRQUFJQXNRQXlJQklBdHFJQUl0QUFBZ0RSQURHaUFLUVFGcklRb2dBU0FJYWlFQklBTkJBV3NpQXcwQUN3c2dBRUVEU1EwREEwQWdBU0FKTFFBQUlBc1FBeUlBSUF0cUlBSXRBQUFnRFJBREdpQUFJQWhxSUFrdEFBQWdDeEFESWdBZ0Myb2dBaTBBQUNBTkVBTWFJQUFnQ0dvZ0NTMEFBQ0FMRUFNaUFDQUxhaUFDTFFBQUlBMFFBeG9nQUNBSWFpQUpMUUFBSUFzUUF5SUFJQXRxSUFJdEFBQWdEUkFER2lBQUlBaHFJUUVnQ2tFRWF5SUtEUUFMREFNTElBTUVRQU5BSUFwQkFXc2hDaUFCSUFrdEFBQWdDeEFESUFocUlRRWdBMEVCYXlJRERRQUxDeUFBUVFOSkRRSWdDa0VFYXlJQVFRUnhSUVJBSUFBaENpQUJJQWt0QUFBZ0N4QURJQWhxSUFrdEFBQWdDeEFESUFocUlBa3RBQUFnQ3hBRElBaHFJQWt0QUFBZ0N4QURJQWhxSVFFTElBQkJCRWtOQWdOQUlBRWdDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvaEFTQUtRUWhySWdvTkFBc01BZ3NnQkNBR2FpQU9haUFFSUJNZ0JDQVRTaHRCZjNOcUlRQWdDMFVFUUNBTVFRZHhJUkFnQUNBVWF5RUFJQTFGQkVBZ0FFRUhTU0VSQTBBZ0RDRUhJQUVoQWlBSklRTWdFQ0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBUlJRUkFBMEFnQWlBRExRQUFPZ0FBSUFJZ0F5MEFBVG9BQVNBQ0lBTXRBQUk2QUFJZ0FpQURMUUFET2dBRElBSWdBeTBBQkRvQUJDQUNJQU10QUFVNkFBVWdBaUFETFFBR09nQUdJQUlnQXkwQUJ6b0FCeUFDUVFocUlRSWdBMEVJYWlFRElBZEJDR3NpQncwQUN3c2dBU0FJYWlFQklBcEJBV3NpQ2cwQUN3d0RDeUFBUVFkSklSWURRQ0FNSVFjZ0FTRUNJQWtoQUNBUUlSRWdFQVJBQTBBZ0FpQUFJZ010QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUUFnRVVFQmF5SVJEUUFMQ3lBV1JRUkFBMEFnQWlBQUlnTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFETFFBRU9nQUVJQUlnQXkwQUJUb0FCU0FDSUFNdEFBWTZBQVlnQWlBRExRQUhPZ0FISUFKQkNHb2hBaUFEUVFocUlRQWdCMEVJYXlJSERRQUxJQU5CQjJvaEF3c2dBaUFETFFBQUlBMFFBeG9nQVNBSWFpRUJJQXBCQVdzaUNnMEFDd3dDQ3lBTkJFQWdERUVIY1NFUUlBQWdEa0VBSUE1QkFFb2JhMEVIU1NFUkEwQWdBU0FKTFFBQUlBc1FBeUlXSUF0cUlRSWdEQ0VISUFraEFDQVFJZ0VFUUFOQUlBSWdBQ0lETFFBQU9nQUFJQWRCQVdzaEJ5QUNRUUZxSVFJZ0EwRUJhaUVBSUFGQkFXc2lBUTBBQ3dzZ0VVVUVRQU5BSUFJZ0FDSUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUlnQVMwQUJEb0FCQ0FDSUFFdEFBVTZBQVVnQWlBQkxRQUdPZ0FHSUFJZ0FTMEFCem9BQnlBQ1FRaHFJUUlnQVVFSWFpRUFJQWRCQ0dzaUJ3MEFDeUFCUVFkcUlRTUxJQUlnQXkwQUFDQU5FQU1hSUFnZ0Ztb2hBU0FLUVFGcklnb05BQXNNQWdzZ0RFRUhjU0VRSUFBZ0ZHdEJCMGtoRVFOQUlBRWdDUzBBQUNBTEVBTWlBU0FMYWlFQ0lBd2hCeUFKSVFNZ0VDSUFCRUFEUUNBQ0lBTXRBQUE2QUFBZ0IwRUJheUVISUFKQkFXb2hBaUFEUVFGcUlRTWdBRUVCYXlJQURRQUxDeUFSUlFSQUEwQWdBaUFETFFBQU9nQUFJQUlnQXkwQUFUb0FBU0FDSUFNdEFBSTZBQUlnQWlBRExRQURPZ0FESUFJZ0F5MEFCRG9BQkNBQ0lBTXRBQVU2QUFVZ0FpQURMUUFHT2dBR0lBSWdBeTBBQnpvQUJ5QUNRUWhxSVFJZ0EwRUlhaUVESUFkQkNHc2lCdzBBQ3dzZ0FTQUlhaUVCSUFwQkFXc2lDZzBBQ3d3QkN5QUJJQWdnQ214cUlRRUxJQTlGRFFBZ0RFRUhjU0VLSUFRZ0Jtb2dEbW9nQkNBVElBUWdFMG9iUVg5emFpQVVhMEVIU1NFUUEwQWdBU0VDSUFzRVFDQUJJQWt0QUFBZ0N4QURJQXRxSVFJTEFrQWdERVVFUUNBSklRTU1BUXNnRENFSElBa2hBeUFLSWdBRVFBTkFJQUlnQXkwQUFEb0FBQ0FIUVFGcklRY2dBa0VCYWlFQ0lBTkJBV29oQXlBQVFRRnJJZ0FOQUFzTElCQU5BQU5BSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU10QUFRNkFBUWdBaUFETFFBRk9nQUZJQUlnQXkwQUJqb0FCaUFDSUFNdEFBYzZBQWNnQWtFSWFpRUNJQU5CQ0dvaEF5QUhRUWhySWdjTkFBc0xJQTBFUUNBQ0lBTkJBV3N0QUFBZ0RSQURHZ3NnQVNBSWFpRUJJQVFnQ1dvaENTQVBRUUZySWc4TkFBc0xBa0FnRjBVTkFDQUpJQVJySVFrZ0dFVUVRQ0FTUVFOeElnSUVRQU5BSUJKQkFXc2hFaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QVZJQVZCZjNOcVFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlRRWdFa0VFYXlJU0RRQUxEQUVMSUF4QkIzRWhCU0FFSUFacUlBNXFJQVFnRXlBRUlCTktHMEYvYzJvZ0ZHdEJCMGtoQkFOQUlBRWhBaUFMQkVBZ0FTQUpMUUFBSUFzUUF5QUxhaUVDQ3dKQUlBeEZCRUFnQ1NFRERBRUxJQXdoQnlBSklRTWdCU0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBRURRQURRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURMUUFFT2dBRUlBSWdBeTBBQlRvQUJTQUNJQU10QUFZNkFBWWdBaUFETFFBSE9nQUhJQUpCQ0dvaEFpQURRUWhxSVFNZ0IwRUlheUlIRFFBTEN5QU5CRUFnQWlBRFFRRnJMUUFBSUEwUUF4b0xJQUVnQ0dvaEFTQVNRUUZySWhJTkFBc0xDOEFDQVFOL1Fjei9zd1lnQVhaQkFYRWhCQ0FCUVFOMElnTkI1Q3hxTFFBQUlRVWdBMEdrSzJvdEFBQWhBd0pBUWZyMXF3VWdBWFpCQVhFRVFDQUNJQU5CQVhScUxnRUFJUUVnQkFSQUlBRWdBaUFGUVFGMGFpNEJBR3BCQVdwQkFYVVBDeUFBS0FMTUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQlVFQmRHb3VBUnhxUVFGcVFRRjFEd3NnQkFSQUlBSWdCVUVCZEdvdUFRQWhBU0FBS0FMSUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQTBFQmRHb3VBUnhxUVFGcVFRRjFEd3RCQUNFQlFRRWhBZ0pBSUFBb0FzZ0JJZ1JGRFFBZ0FDZ0NCQ0FFS0FJRVJ3MEFJQVFnQTBFQmRHb3VBUndoQVVFQUlRSUxJQUFvQXN3QklnTkZEUUFnQUNnQ0JDQURLQUlFUncwQUlBTWdCVUVCZEdvdUFSd2hBQ0FDQkVBZ0FBOExJQUFnQVdwQkFXcEJBWFVoQVFzZ0FRdnlBd0VEZnlBQktBSUFJZ05CLy8vL0IwY0VRQ0FCS0FJRUlRUWdBQ0FDSUFKQkEzRWdBa0VRU1NJQ0cwRUNkQ0lGUWZBcGFpZ0NBRUVRUVFnZ0Foc2lBbXhxSUFWQnNDbHFLQUlBYWlJQUlBTWdBQzBBQUdwQndEVnFMUUFBT2dBQUlBRW9BZ2doQXlBQUlBUWdBQzBBQVdwQndEVnFMUUFBT2dBQklBRW9BZ3doQkNBQUlBTWdBQzBBQW1wQndEVnFMUUFBT2dBQ0lBQWdCQ0FBTFFBRGFrSEFOV290QUFBNkFBTWdBU2dDRkNFRElBQWdBbW9pQUNBQktBSVFJQUF0QUFCcVFjQTFhaTBBQURvQUFDQUJLQUlZSVFRZ0FDQURJQUF0QUFGcVFjQTFhaTBBQURvQUFTQUJLQUljSVFNZ0FDQUVJQUF0QUFKcVFjQTFhaTBBQURvQUFpQUFJQU1nQUMwQUEycEJ3RFZxTFFBQU9nQURJQUVvQWlRaEF5QUFJQUpxSWdBZ0FTZ0NJQ0FBTFFBQWFrSEFOV290QUFBNkFBQWdBU2dDS0NFRUlBQWdBeUFBTFFBQmFrSEFOV290QUFBNkFBRWdBU2dDTENFRElBQWdCQ0FBTFFBQ2FrSEFOV290QUFBNkFBSWdBQ0FESUFBdEFBTnFRY0ExYWkwQUFEb0FBeUFCS0FJMElRTWdBQ0FDYWlJQUlBRW9BakFnQUMwQUFHcEJ3RFZxTFFBQU9nQUFJQUVvQWpnaEFpQUFJQU1nQUMwQUFXcEJ3RFZxTFFBQU9nQUJJQUVvQWp3aEFTQUFJQUlnQUMwQUFtcEJ3RFZxTFFBQU9nQUNJQUFnQVNBQUxRQURha0hBTldvdEFBQTZBQU1MQzVja0FSUi9Jd0JCZ0E1ckloVWtBQ0FESUFWcUloa2dBUzRCQUNJT1FRSjFhaUVESUFRZ0Jtb2lHeUFCTGdFQ0lndEJBblZxSVFrZ0FpZ0NDRUVFZENFTUlBSW9BZ1JCQkhRaERTQUFJQVpCQkhScUlBVnFJUVFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQTVCQTNGQkJIUWdDMEVEY1VFQ2RISkJ3RHRxS0FJQURnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEN5QUNLQUlBSUFRZ0F5QUpJQTBnRENBSElBaEJFQkFKREE4TElBSW9BZ0FnQkNBRElBbEJBbXNnRFNBTUlBY2dDRUVBRUJvTURnc2dDVUVDYXlFS1FRQWhEaUFDS0FJQUlRc0NRQUpBSUFOQkFFZ05BQ0FESUFkcUlBMUxEUUFnQ1VFQ1NBMEFJQWdnQ21wQkJXb2dERXNOQUNBS0lRNE1BUXNnQ3lBVklBTWdDaUFOSUF3Z0J5QUlRUVZxSUFjUUNTQVZJUXNnQnlFTlFRQWhBd3NnQ3lBTklBNXNJQU5xYWlBTmFpSUpJQTFCQld4cUlRTWdDRUVDZGlFUlFjQUFJQWRySVJRZ0RVRUJkQ0VNSUExQkFuUWdCMnNoRDBFQUlBMXJJaEJCQVhRaEdBTkFJQWNoRXdOQUlBUWdDU0FNYWkwQUFDSU9JQU1nREdvdEFBQWdBeUFOYWkwQUFDSVdJQU1nR0dvdEFBQWlDMm9pQ21zZ0NrRUNkR3RxSUFNdEFBQWlFaUFESUJCcUxRQUFJZ3BxUVJSc2FrRVFha0VGZFVIQU5Xb3RBQUE2QURBZ0JDQUpJQTFxTFFBQUloY2dGaUFLSUF0cUlocEJCSFJxSUE0Z0Vtb2lGbXRxSUJvZ0ZtdEJBblJxUVJCcVFRVjFRY0ExYWkwQUFEb0FJQ0FFSUFrdEFBQWlGaUFTSUFzZ0Rtb2lHa0VFZEdvZ0NpQVhhaUlTYTJvZ0dpQVNhMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFPZ0FRSUFRZ0NTQVFhaTBBQUNBS0lBNGdGMm9pRGtFRWRHb2dDeUFXYWlJTGEyb2dEaUFMYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQUlBbEJBV29oQ1NBRVFRRnFJUVFnQTBFQmFpRURJQk5CQVdzaUV3MEFDeUFFSUJScUlRUWdBeUFQYWlFRElBa2dEMm9oQ1NBUlFRRnJJaEVOQUFzTURRc2dBaWdDQUNBRUlBTWdDVUVDYXlBTklBd2dCeUFJUVFFUUdnd01DeUFDS0FJQUlBUWdBMEVDYXlBSklBMGdEQ0FISUFoQkFCQVpEQXNMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVBRUJJTUNnc2dBaWdDQUNBRUlBTkJBbXNnQ1VFQ2F5QU5JQXdnQnlBSVFRQVFGd3dKQ3lBQ0tBSUFJQVFnQTBFQ2F5QUpRUUpySUEwZ0RDQUhJQWhCQWhBU0RBZ0xJQWRCQldvaEN5QURRUUpySVFvZ0FpZ0NBQ0VPQWtBQ1FDQURRUUpJRFFBZ0NpQUxhaUFOU3cwQUlBbEJBRWdOQUNBSUlBbHFJQXhMRFFBZ0RTRUxEQUVMSUE0Z0ZTQUtJQWtnRFNBTUlBc2dDQ0FMRUFsQkFDRUpJQlVoRGtFQUlRb0xRUkFnQjJzaEZDQUxJQWRySVJnZ0IwRUNkaUVTSUE0Z0NTQUxiQ0FLYW1wQkJXb2hBeUFJSVFzRFFDQURRUUZyTFFBQUlRa2dBMEVDYXkwQUFDRU1JQU5CQTJzdEFBQWhDaUFEUVFSckxRQUFJUThnQTBFRmF5MEFBQ0VUSUJJaEVRTkFJQVFnQXkwQUFDSU9JQk1nQ2lBTWFpSU5RUVIwYWlBSklBOXFJaE5ySUEwZ0UydEJBblJxYWtFUWFrRUZkVUhBTldvdEFBQTZBQUFnQkNBRExRQUJJZzBnRHlBSklBeHFJaE5CQkhScUlBb2dEbW9pRDJ0cUlCTWdEMnRCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQVNBRUlBTXRBQUlpRUNBS0lBa2dEbW9pRTBFRWRHb2dEQ0FOYWlJS2Eyb2dFeUFLYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQ0lBUWdBeTBBQXlJWElBd2dEU0FPYWlJS1FRUjBhaUFKSUJCcUlneHJhaUFLSUF4clFRSjBha0VRYWtFRmRVSEFOV290QUFBNkFBTWdCRUVFYWlFRUlBTkJCR29oQXlBSklSTWdEaUVQSUEwaENpQVFJUXdnRnlFSklCRkJBV3NpRVEwQUN5QUVJQlJxSVFRZ0F5QVlhaUVESUF0QkFXc2lDdzBBQ3d3SEN5QUNLQUlBSUFRZ0EwRUNheUFKUVFKcklBMGdEQ0FISUFoQkFCQVlEQVlMSUFkQkJXb2hDeUFKUVFKcklRNGdBMEVDYXlFS0lBSW9BZ0FoRHdKQUFrQWdBMEVDU0EwQUlBb2dDMm9nRFVzTkFDQUpRUUpJRFFBZ0NFRUZhaUlVSUE1cUlBeExEUUFnRFNFTERBRUxJQThnRlVIQUNtb2lEeUFLSUE0Z0RTQU1JQXNnQ0VFRmFpSVVJQXNRQ1VFQUlRNUJBQ0VLQ3lBVUJFQWdDeUFIYXlFWUlBZEJBblloRWlBUElBc2dEbXdnQ21wcVFRVnFJUU1nRlNFTUEwQWdBMEVCYXkwQUFDRUpJQU5CQW1zdEFBQWhDeUFEUVFOckxRQUFJUTRnQTBFRWF5MEFBQ0VOSUFOQkJXc3RBQUFoRVNBU0lROERRQ0FNSUFNdEFBQWlDaUFSSUFzZ0Rtb2lFMEVFZEdvZ0NTQU5haUlSYXlBVElCRnJRUUowYW1vMkFnQWdEQ0FETFFBQkloTWdEU0FKSUF0cUloRkJCSFJxSUFvZ0Rtb2lEV3RxSUJFZ0RXdEJBblJxTmdJRUlBd2dBeTBBQWlJUUlBNGdDU0FLYWlJT1FRUjBhaUFMSUJOcUlnMXJhaUFPSUExclFRSjBhallDQ0NBTUlBTXRBQU1pRnlBS0lCTnFJZzVCQkhRZ0Myb2dDU0FRYWlJTGEyb2dEaUFMYTBFQ2RHbzJBZ3dnREVFUWFpRU1JQU5CQkdvaEF5QUpJUkVnQ2lFTklCTWhEaUFRSVFzZ0Z5RUpJQTlCQVdzaUR3MEFDeUFESUJocUlRTWdGRUVCYXlJVURRQUxDeUFWSUFkQkFuUWlER29pQ1NBSFFSUnNhaUVESUFoQkFuWWhEMEhBQUNBSGF5RVhRUUFnQjJzaUZFRURkQ0VZSUFkQkEzUWhFU0FIUVFOc1FRSjBJUk1EUUNBSElRMERRQ0FFSUFrZ0VXb29BZ0FpRGlBRElCRnFLQUlBSUFNZ0RHb29BZ0FpRmlBRElCaHFLQUlBSWd0cUlncHJJQXBCQW5ScmFpQURLQUlBSWhBZ0F5QVVRUUowSWhwcUtBSUFJZ3BxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBT2dBd0lBUWdDU0FNYWlnQ0FDSVNJQllnQ2lBTGFpSWNRUVIwYWlBT0lCQnFJaFpyYWlBY0lCWnJRUUowYWtHQUJHcEJDblZCd0RWcUxRQUFPZ0FnSUFRZ0NTZ0NBQ0lXSUJBZ0N5QU9haUljUVFSMGFpQUtJQkpxSWhCcmFpQWNJQkJyUVFKMGFrR0FCR3BCQ25WQndEVnFMUUFBT2dBUUlBUWdDU0FhYWlnQ0FDQUtJQTRnRW1vaURrRUVkR29nQ3lBV2FpSUxhMm9nRGlBTGEwRUNkR3BCZ0FScVFRcDFRY0ExYWkwQUFEb0FBQ0FKUVFScUlRa2dCRUVCYWlFRUlBTkJCR29oQXlBTlFRRnJJZzBOQUFzZ0JDQVhhaUVFSUFNZ0Uyb2hBeUFKSUJOcUlRa2dEMEVCYXlJUERRQUxEQVVMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVCRUJnTUJBc2dBaWdDQUNBRUlBTkJBbXNnQ1NBTklBd2dCeUFJUVFFUUdRd0RDeUFDS0FJQUlBUWdBMEVDYXlBSlFRSnJJQTBnRENBSElBaEJBUkFTREFJTElBSW9BZ0FnQkNBRFFRSnJJQWxCQW1zZ0RTQU1JQWNnQ0VFQkVCY01BUXNnQWlnQ0FDQUVJQU5CQW1zZ0NVRUNheUFOSUF3Z0J5QUlRUU1RRWdzZ0FTNEJBQ0lPUVFOMUlCbEJBWFpxSVE4Z0FTNEJBaUlMUVFOMUlCdEJBWFpxSVFNZ0FpZ0NBQ0FDS0FJRUlnb2dBaWdDQ0NJQ2JFRUlkR29oQVNBQUlBWkJBblJCZUhGcUlBVkJBWFpxUVlBQ2FpRUVJQWhCQVhZaEVTQUhRUUYySVEwZ0MwRUhjU0VRSUFKQkEzUWhBQ0FLUVFOMElRb0NRQUpBSUE1QkIzRWlFa1VOQUNBUVJRMEFJQTFCQVdvaERrRUFJUVVDUUFKQUlBOUJBRWdOQUNBT0lBOXFJQXBMRFFBZ0EwRUFTQTBBSUFNZ0VXcEJBV29nQUVzTkFDQUFJUVlnQ2lFT0lBTWhCUXdCQ3lBQklCVWdEeUFESUFvZ0FDQU9JQkZCQVdvaUJpQU9FQWtnQVNBQUlBcHNhaUFWSUFZZ0RteHFJQThnQXlBS0lBQWdEaUFHSUE0UUNTQVZJUUZCQUNFUEMwRVFJQTFySVJjZ0IwRUNkaUVBUVFnZ0VHc2hBMEVJSUJKcklRa2dEa0VCZENJTUlBMXJJUlFnQVNBRklBNXNhaUFQYWlFTElBUWhDaUFJUVFKMklnY2hBZ05BSUJBZ0N5QU1haTBBQUd3Z0F5QUxJQTVxTFFBQUlnaHNhaUVOSUFnZ0VHd2dBeUFMTFFBQWJHb2hFeUFBSVJFRFFDQUxRUUZxSWdnZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBSUlBNXFMUUFBSWdoc0lBTWdDeTBBQVd4cUloTWdFbXhxUVNCcVFRWjJPZ0FBSUFvZ0NTQU5iQ0FRSUJsc0lBTWdDR3hxSWdnZ0VteHFRU0JxUVFaMk9nQUlJQXN0QUFJaERTQUxRUUpxSWdzZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBTElBNXFMUUFBSWh0c0lBTWdEV3hxSWhNZ0VteHFRU0JxUVFaMk9nQUJJQW9nQ0NBSmJDQVFJQmxzSUFNZ0cyeHFJZzBnRW14cVFTQnFRUVoyT2dBSklBcEJBbW9oQ2lBUlFRRnJJaEVOQUFzZ0N5QVVhaUVMSUFvZ0Yyb2hDaUFDUVFGcklnSU5BQXNnQkVGQWF5RUtJQUVnQlNBR2FpQU9iR29nRDJvaEN3TkFJQkFnQ3lBTWFpMEFBR3dnQXlBTElBNXFMUUFBSWdGc2FpRU5JQUVnRUd3Z0F5QUxMUUFBYkdvaEV5QUFJUkVEUUNBTFFRRnFJZ0VnREdvdEFBQWhBaUFLSUFrZ0Uyd2dFQ0FCSUE1cUxRQUFJZ0ZzSUFNZ0N5MEFBV3hxSWdRZ0VteHFRU0JxUVFaMk9nQUFJQW9nQ1NBTmJDQUNJQkJzSUFFZ0EyeHFJZ0VnRW14cVFTQnFRUVoyT2dBSUlBc3RBQUloQWlBTFFRSnFJZ3NnREdvdEFBQWhCU0FLSUFRZ0NXd2dFQ0FMSUE1cUxRQUFJZ1JzSUFJZ0EyeHFJaE1nRW14cVFTQnFRUVoyT2dBQklBb2dBU0FKYkNBRklCQnNJQU1nQkd4cUlnMGdFbXhxUVNCcVFRWjJPZ0FKSUFwQkFtb2hDaUFSUVFGckloRU5BQXNnQ3lBVWFpRUxJQW9nRjJvaENpQUhRUUZySWdjTkFBc01BUXNnRWdSQUlBMUJBV29oQzBFQUlRSUNRQUpBSUE5QkFFZ05BQ0FMSUE5cUlBcExEUUFnQTBFQVNBMEFJQU1nRVdvZ0FFc05BQ0FBSVJFZ0NpRUxJQU1oQWd3QkN5QUJJQlVnRHlBRElBb2dBQ0FMSUJFZ0N4QUpJQUVnQUNBS2JHb2dGU0FMSUJGc2FpQVBJQU1nQ2lBQUlBc2dFU0FMRUFrZ0ZTRUJRUUFoRHd0QkVDQU5heUVHSUFkQkFuWWhBRUVJSUJKcklRTWdDMEVCZENBTmF5RUhJQUVnQWlBTGJHb2dEMm9oQ1NBRUlRd2dDRUVDZGlJVUlRVURRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUWdnQ1NBTGFpMEFBQ0VLSUF3Z0VpQUpMUUFCSWcxc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQ0NBU2JDQURJQXBzYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFvZ0NVRUNhaUlKSUF0cUxRQUFJUk1nRENBS0lCSnNJQU1nRFd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnRWlBVGJDQURJQWhzYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnQlVFQmF5SUZEUUFMSUFSQlFHc2hEQ0FCSUFJZ0VXb2dDMnhxSUE5cUlRa0RRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUUVnQ1NBTGFpMEFBQ0VDSUF3Z0VpQUpMUUFCSWdSc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQVNBU2JDQUNJQU5zYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFJZ0NVRUNhaUlKSUF0cUxRQUFJUVVnRENBQ0lCSnNJQU1nQkd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnQlNBU2JDQUJJQU5zYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnRkVFQmF5SVVEUUFMREFFTElCQUVRRUVBSVFJQ1FBSkFJQTlCQUVnTkFDQU5JQTlxSUFwTERRQWdBMEVBU0EwQUlBTWdFV3BCQVdvZ0FFc05BQ0FBSVFVZ0F5RUNEQUVMSUFFZ0ZTQVBJQU1nQ2lBQUlBMGdFVUVCYWlJRklBMFFDU0FCSUFBZ0NteHFJQlVnQlNBTmJHb2dEeUFESUFvZ0FDQU5JQVVnRFJBSklCVWhBU0FOSVFwQkFDRVBDMEVRSUExcklSRWdCMEVDZGlFQVFRZ2dFR3NoQXlBS1FRRjBJZ1lnRFdzaEJ5QUJJQUlnQ214cUlBOXFJUWtnQkNFTUlBaEJBbllpQ3lFVUEwQWdBQ0VPQTBBZ0JpQUphaTBBQUNFSUlBd2dBeUFKTFFBQWJDQVFJQWtnQ21vdEFBQWlEV3hxUVFOMFFTQnFRUVoyT2dBQUlBd2dBeUFOYkNBSUlCQnNha0VEZEVFZ2FrRUdkam9BQ0NBSlFRRnFJZ2dnQm1vdEFBQWhEU0FNSUFNZ0NTMEFBV3dnRUNBSUlBcHFMUUFBSWdoc2FrRURkRUVnYWtFR2Rqb0FBU0FNSUFNZ0NHd2dEU0FRYkdwQkEzUkJJR3BCQm5ZNkFBa2dERUVDYWlFTUlBbEJBbW9oQ1NBT1FRRnJJZzROQUFzZ0J5QUphaUVKSUF3Z0VXb2hEQ0FVUVFGckloUU5BQXNnQkVGQWF5RU1JQUVnQWlBRmFpQUtiR29nRDJvaENRTkFJQUFoRGdOQUlBWWdDV290QUFBaEFTQU1JQU1nQ1MwQUFHd2dFQ0FKSUFwcUxRQUFJZ0pzYWtFRGRFRWdha0VHZGpvQUFDQU1JQUlnQTJ3Z0FTQVFiR3BCQTNSQklHcEJCblk2QUFnZ0NVRUJhaUlCSUFacUxRQUFJUUlnRENBRElBa3RBQUZzSUJBZ0FTQUthaTBBQUNJQmJHcEJBM1JCSUdwQkJuWTZBQUVnRENBQklBTnNJQUlnRUd4cVFRTjBRU0JxUVFaMk9nQUpJQXhCQW1vaERDQUpRUUpxSVFrZ0RrRUJheUlPRFFBTElBY2dDV29oQ1NBTUlCRnFJUXdnQzBFQmF5SUxEUUFMREFFTElBRWdCQ0FQSUFNZ0NpQUFJQTBnRVVFSUVBa2dBU0FBSUFwc2FpQUVRVUJySUE4Z0F5QUtJQUFnRFNBUlFRZ1FDUXNnRlVHQURtb2tBQXYxRndFZ2Z5TUFRZEFEYXlJR0pBQWdBU0FCS0FJQUlnb2dBU2dDQkNJSUlBSnNJaFFnQTJvaUJ5QUljQ0lMUVFSMGFpQUhJQXRySWdsQkNIUnFOZ0lNSUFFZ0NpQUlJQUVvQWdnaUIyd2lERUVJZEdvaUhDQUpRUVowYWlBTFFRTjBhaUlMTmdJUUlBRWdDeUFNUVFaMElpSnFOZ0lVSUFCQ0FEY0NEQ0FBUWlnM0FoUWdBRUVBTmdJSUlBQkJCallDQUNBRFFRUjBJUXNDUUFKQUFrQWdCRUVDYXc0R0FRQUFBQUFCQUFzZ0JrRUFOZ0lNSUFZZ0J6WUNHQ0FHSUFnMkFoUWdCaUFGTmdJUUlBVkZCRUFNQVFzZ0JrSFFBR29pQUNBR1FReHFJQVpCRUdvZ0N5QUNRUVIwUVFCQkFFRVFRUkFRRENBQklBQVFEd3dCQ3lBR1FkQUFha0VBUVlBREVBTWFJQW9nRkVFSWRHb2dDMm9oRENBR1FnQTNBMGdnQmtGQWEwSUFOd01BSUFaQ0FEY0RPQ0FHUWdBM0F6QWdCa0lBTndNb0lBWkNBRGNESUNBR1FnQTNBeGdnQmtJQU53TVFRUUFoQlVFQUlRa0Nmd0pBSUFJRVFDQUFJQWhCcUg1c2FpZ0N4QUVOQVF0QkFDRUxRUUFNQVFzZ0JpQU1JQWhCQkhScklnUXRBQVVnQkMwQUJHb2dCQzBBQm1vZ0JDMEFCMm9pRmlBRUxRQURJQVF0QUFJZ0JDMEFBU0FFTFFBQWFtcHFJaFZxSWdvZ0JDMEFEeUFFTFFBT0lBUXRBQTBnQkMwQURHcHFhaUlZSUFRdEFBc2dCQzBBQ2lBRUxRQUpJQVF0QUFocWFtb2lGMm9pQkdzaUNUWUNGQ0FHSUFRZ0Ntb2lDellDRUVFQklSbEJBUXNoQkFKQUlBZEJBV3NnQWtZTkFDQUFJQWhCMkFGc2FpZ0N4QUZGQkVBTUFRc2dCaUFNSUFoQkNIUnFJZ0l0QUFVZ0FpMEFCR29nQWkwQUJtb2dBaTBBQjJvaUhTQUNMUUFESUFJdEFBSWdBaTBBQVNBQ0xRQUFhbXBxSWg1cUlnVWdBaTBBRHlBQ0xRQU9JQUl0QUEwZ0FpMEFER3BxYWlJZklBSXRBQXNnQWkwQUNpQUNMUUFKSUFJdEFBaHFhbW9pSUdvaUFtc2dDV29pQ1RZQ0ZDQUdJQUlnQldvZ0Myb2lDellDRUVFQklRVWdCRUVCYWlFRUN3Si9Ba0FnQTBVTkFDQUFRUlJyS0FJQVJRMEFJQVlnREVFQmF5SUNJQWhCQm5RaUVHb2lDaUFJUVFSMElnZHFMUUFBSUFvdEFBQnFJQW9nQ0VFRmRDSU5haTBBQUdvZ0NpQUlRVEJzSWc5cUxRQUFhaUlhSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lHMm9pRVNBS0lCQnFJZ0lnRUdvaUNpQUhhaTBBQUNBS0xRQUFhaUFLSUExcUxRQUFhaUFLSUE5cUxRQUFhaUlRSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lEMm9pQW1zaUJ6WUNJQ0FHSUFJZ0VXb2dDMm9pQ3pZQ0VFRUJJUkVnQkVFQmFpRUtRUUVNQVF0QkFDRUhJQVFoQ2tFQUN5RUNBa0FDUUFKQUFrQUNRQ0FESUFoQkFXdEhCRUFnQUNnQ25BTU5BUXNnQkEwQkRBSUxJQWNnREVFUWFpSUhJQWhCQm5RaUUyb2lBQ0FJUVFSMElnMXFMUUFBSUFBdEFBQnFJQUFnQ0VFRmRDSVNhaTBBQUdvZ0FDQUlRVEJzSWc1cUxRQUFhaUFISUE1cUxRQUFJQWNnRW1vdEFBQWdCeUFOYWkwQUFDQU1MUUFRYW1wcWFpSU1JQUFnRTJvaUFDQVRhaUlISUExcUxRQUFJQWN0QUFCcUlBY2dFbW90QUFCcUlBY2dEbW90QUFCcUloTWdBQ0FPYWkwQUFDQUFJQkpxTFFBQUlBQWdEV290QUFBZ0FDMEFBR3BxYWlJQWFpSU5hMm9oQnlBTUlBMXFJQXRxSVF0QkFTRVNJQUpCQVdvaEFpQUtRUUZxSVFvZ0VVVWdCRUVBUjNKRkJFQWdHaUFiYWlBUGFpQVFhaUFBSUF4cUlCTnFhMEVGZFNFSkRBTUxJQVJGRFFJTElBa2dCRUVEYW5VaENRc2dHU0FDUlhFZ0JYRUVRQ0FWSUJacUlCZHFJQmhxSUI4Z0lHb2dIV29nSG1wclFRVjFJUWNNQWdzZ0FrVU5BUXNnQnlBQ1FRTnFkU0VIQ3lBR0FuOENRQUpBQWtBQ1FDQUtRUUZyRGdNQUFRSURDeUFMUVFSMkRBTUxJQXRCQlhZTUFnc2dDMEVWYkVFS2Rnd0JDeUFMUVFaMkN5SUFOZ0lRQW44Z0J5QUpja1VFUUNBR0lBQTJBa2dnQmlBQU5nSk1JQVlnQURZQ1JDQUdJQUEyQWtBZ0JpQUFOZ0k4SUFZZ0FEWUNPQ0FHSUFBMkFqUWdCaUFBTmdJd0lBWWdBRFlDTENBR0lBQTJBaWdnQmlBQU5nSWtJQVlnQURZQ0lDQUdJQUEyQWh3Z0JpQUFOZ0lZSUFZZ0FEWUNGQ0FHUWRBQWFpRUhJQVpCRUdvaENVRUFEQUVMSUFZZ0FDQUphaUlFSUFkck5nSkFJQVlnQkNBSFFRRjFJZ0pyTmdJd0lBWWdBaUFFYWpZQ0lDQUdJQVFnQjJvMkFoQWdCaUFBSUFscklnUWdCMnMyQWt3Z0JpQUVJQUpyTmdJOElBWWdBaUFFYWpZQ0xDQUdJQVFnQjJvMkFod2dCaUFBSUFsQkFYVWlDbW9pQkNBSGF6WUNSQ0FHSUFRZ0FtczJBalFnQmlBQ0lBUnFOZ0lrSUFZZ0JDQUhhallDRkNBR0lBQWdDbXNpQUNBSGF6WUNTQ0FHSUFBZ0FtczJBamdnQmlBQUlBSnFOZ0lvSUFZZ0FDQUhhallDR0NBR1FkQUFhaUVISUFaQkVHb2hDVUVBQ3lFQUEwQWdCeUFKSUFCQkRIRnFLQUlBSWdKQi93RWdBa0gvQVVnYklnSkJBQ0FDUVFCS0d5SUNPZ0FCSUFjZ0Fqb0FBQ0FIUVFKcUlRY2dDU0FBUVFKcUlnQkJQbkZGUVFSMGFpRUpJQUJCZ0FKSERRQUxJQndnRkVFR2RHb2dBMEVEZEdvaEF5QUlRUVIwSVEwZ0NFRUdkQ0VVUVFBZ0NFRURkQ0lNYXlFVElBWkIwQUpxSVJ3Z0JrRkFheUVqUVFBaEMwRUFJUW9EUUNBR1FnQTNBMGdnSTBJQU53TUFJQVpDQURjRE9DQUdRZ0EzQXpBZ0JrSUFOd01vSUFaQ0FEY0RJQ0FHUWdBM0F4Z2dCa0lBTndNUVFRQWhDVUVBSVFCQkFDRUNJQmtFUUNBR0lBTWdFMm9pQUMwQUF5QUFMUUFDYWlJV0lBQXRBQUVnQUMwQUFHb2lGV29pQWlBQUxRQUhJQUF0QUFacUloZ2dBQzBBQlNBQUxRQUVhaUlYYWlJQWF5SUpOZ0lVSUFZZ0FDQUNhaUlBTmdJUVFRRWhBZ3NnQlFSQUlBWWdBeUFVYWlJRUxRQURJQVF0QUFKcUloMGdCQzBBQVNBRUxRQUFhaUllYWlJSUlBUXRBQWNnQkMwQUJtb2lIeUFFTFFBRklBUXRBQVJxSWlCcUlnUnJJQWxxSWdrMkFoUWdCaUFFSUFocUlBQnFJZ0EyQWhBZ0FrRUJhaUVDQzBFQUlRY0NmeUFSUlFSQUlBSWhDRUVBREFFTElBWWdBMEVCYXlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUdpQUVJQXhxTFFBQUlBUXRBQUJxSWh0cUlnNGdDQ0FOYWlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUVDQUVJQXhxTFFBQUlBUXRBQUJxSWc5cUlnUnJJZ2MyQWlBZ0JpQUVJQTVxSUFCcUlnQTJBaEFnQWtFQmFpRUlRUUVMSVFRQ1FBSkFBa0FDUUNBU1JRUkFJQUlOQVF3Q0N5QUhJQU5CQ0dvaURpQU5haUlISUF4cUxRQUFJQWN0QUFCcUlBd2dEbW90QUFBZ0F5MEFDR3BxSWc0Z0J5QU5haUlISUExcUlpRWdER290QUFBZ0lTMEFBR29pSVNBSElBeHFMUUFBSUFjdEFBQnFJaVJxSWlWcmFpRUhJQTRnSldvZ0FHb2hBQ0FFUVFGcUlRUWdDRUVCYWlFSUlCRkZJQUpCQUVkeVJRUkFJQm9nRzJvZ0Qyb2dFR29nRGlBa2FpQWhhbXRCQkhVaENRd0RDeUFDUlEwQ0N5QUpJQUpCQW1wMUlRa0xJQmtnQkVWeElBVnhCRUFnRlNBV2FpQVhhaUFZYWlBZklDQnFJQjFxSUI1cWEwRUVkU0VIREFJTElBUkZEUUVMSUFjZ0JFRUNhblVoQndzZ0JnSi9Ba0FDUUFKQUFrQWdDRUVCYXc0REFBRUNBd3NnQUVFRGRnd0RDeUFBUVFSMkRBSUxJQUJCRld4QkNYWU1BUXNnQUVFRmRnc2lBRFlDRUFKQUlBY2dDWEpGQkVBZ0JpQUFOZ0pJSUFZZ0FEWUNUQ0FHSUFBMkFrUWdCaUFBTmdKQUlBWWdBRFlDUENBR0lBQTJBamdnQmlBQU5nSTBJQVlnQURZQ01DQUdJQUEyQWl3Z0JpQUFOZ0lvSUFZZ0FEWUNKQ0FHSUFBMkFpQWdCaUFBTmdJY0lBWWdBRFlDR0NBR0lBQTJBaFFNQVFzZ0JpQUFJQWxxSWdRZ0IyczJBa0FnQmlBRUlBZEJBWFVpQW1zMkFqQWdCaUFDSUFScU5nSWdJQVlnQkNBSGFqWUNFQ0FHSUFBZ0NXc2lCQ0FIYXpZQ1RDQUdJQVFnQW1zMkFqd2dCaUFDSUFScU5nSXNJQVlnQkNBSGFqWUNIQ0FHSUFBZ0NVRUJkU0lJYWlJRUlBZHJOZ0pFSUFZZ0JDQUNhellDTkNBR0lBSWdCR28yQWlRZ0JpQUVJQWRxTmdJVUlBWWdBQ0FJYXlJQUlBZHJOZ0pJSUFZZ0FDQUNhellDT0NBR0lBQWdBbW8yQWlnZ0JpQUFJQWRxTmdJWUN5QUtJQnhxSVFCQkFDRUhJQVpCRUdvaENRTkFJQUFnQ1NBSFFRRjBRUXh4YWlnQ0FDSUNRZjhCSUFKQi93RklHeUlDUVFBZ0FrRUFTaHNpQWpvQUFTQUFJQUk2QUFBZ0FFRUNhaUVBSUFrZ0IwRUNhaUlIUVE1eFJVRUVkR29oQ1NBSFFjQUFSdzBBQ3lBRElDSnFJUU1nQ3lFQVFjQUFJUXBCQVNFTElBQkZEUUFMSUFFZ0JrSFFBR29RRHdzZ0JrSFFBMm9rQUF0U0FRSi9RWURBQUNnQ0FDSUJJQUJCQTJwQmZIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkd3MEFJQUEvQUVFUWRFc0VRQ0FBRUFCRkRRRUxRWURBQUNBQU5nSUFJQUVQQzBHRXdBQkJNRFlDQUVGL0M3VUZBUVIvSUFBb0FoUWhBeUFBS0FJUUlRUWdBQ2dDQkNFRklBQW9BZ3dpQWlBQktRSUFOd0lBSUFJZ0FTa0NDRGNDQ0NBQ0lBVkJCSFFpQUdvaUFpQUJLUUlRTndJQUlBSWdBU2tDR0RjQ0NDQUFJQUpxSWdJZ0FTa0NJRGNDQUNBQ0lBRXBBaWczQWdnZ0FDQUNhaUlDSUFFcEFqQTNBZ0FnQWlBQktRSTROd0lJSUFBZ0Ftb2lBaUFCS1FKQU53SUFJQUlnQVNrQ1NEY0NDQ0FBSUFKcUlnSWdBU2tDVURjQ0FDQUNJQUVwQWxnM0FnZ2dBQ0FDYWlJQ0lBRXBBbUEzQWdBZ0FpQUJLUUpvTndJSUlBQWdBbW9pQWlBQktRSndOd0lBSUFJZ0FTa0NlRGNDQ0NBQUlBSnFJZ0lnQVNrQ2dBRTNBZ0FnQWlBQktRS0lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ2tBRTNBZ0FnQWlBQktRS1lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ29BRTNBZ0FnQWlBQktRS29BVGNDQ0NBQUlBSnFJZ0lnQVNrQ3NBRTNBZ0FnQWlBQktRSzRBVGNDQ0NBQUlBSnFJZ0lnQVNrQ3dBRTNBZ0FnQWlBQktRTElBVGNDQ0NBQUlBSnFJZ0lnQVNrQzBBRTNBZ0FnQWlBQktRTFlBVGNDQ0NBQUlBSnFJZ0lnQVNrQzRBRTNBZ0FnQWlBQktRTG9BVGNDQ0NBQUlBSnFJZ0FnQVNrQzhBRTNBZ0FnQUNBQktRTDRBVGNDQ0NBRUlBRXBBb0FDTndJQUlBUWdCVUVEZENJQWFpSUVJQUVwQW9nQ053SUFJQUFnQkdvaUJDQUJLUUtRQWpjQ0FDQUFJQVJxSWdRZ0FTa0NtQUkzQWdBZ0FDQUVhaUlFSUFFcEFxQUNOd0lBSUFBZ0JHb2lCQ0FCS1FLb0FqY0NBQ0FBSUFScUlnUWdBU2tDc0FJM0FnQWdBQ0FFYWlBQktRSzRBamNDQUNBRElBRXBBc0FDTndJQUlBQWdBMm9pQXlBQktRTElBamNDQUNBQUlBTnFJZ01nQVNrQzBBSTNBZ0FnQUNBRGFpSURJQUVwQXRnQ053SUFJQUFnQTJvaUF5QUJLUUxnQWpjQ0FDQUFJQU5xSWdNZ0FTa0M2QUkzQWdBZ0FDQURhaUlESUFFcEF2QUNOd0lBSUFBZ0Eyb2dBU2tDK0FJM0FnQUxid0VCZnlNQVFSQnJJZ0lrQUNBQ1FRQTJBZ3dnQUNBQ1FReHFFQUloQUFKL0lBRUNmeUFDS0FJTUlnRkJmMFlFUUVHQWdJQ0FlQ0FBRFFFYVFRRU1BZ3RCQVNBQURRRWFJQUZCQVdwQkFYWWlBRUVBSUFCcklBRkJBWEViQ3pZQ0FFRUFDeUVBSUFKQkVHb2tBQ0FBQ3pZQUlBSUVRQ0FBSUFFUUFnOExRUUVoQWlBQklBQkJBUkFVSWdBMkFnQWdBRUYvUndSL0lBRWdBRUVCY3pZQ0FFRUFCVUVCQ3d2YUJ3RU5meU1BUWNBRGF5SVJKQUFnQmtFRmFpRUpBa0FDUUNBQ1FRQklEUUFnQWlBSmFpQUVTdzBBSUFOQkFFZ05BQ0FESUFkcVFRVnFJQVZMRFFBZ0JDRUpJQU1oQ2d3QkN5QUFJQkVnQWlBRElBUWdCU0FKSUFkQkJXb2dDUkFKSUJFaEFFRUFJUUlMSUFBZ0NTQUtiQ0FDYW1vaUFDQUpJQWhCQVhaQkFYRkJBbkpzYWtFRmFpRUNRUkFnQm1zaERDQUpJQVpySVE0Z0JrRUNkaUVTSUFoQkFYRWhGQ0FBSUFscUlSVWdCeUVQQTBBZ0FrRUJheTBBQUNFQUlBSkJBbXN0QUFBaENDQUNRUU5yTFFBQUlRUWdBa0VFYXkwQUFDRUtJQUpCQldzdEFBQWhDeUFTSVEwRFFDQUJJQUl0QUFBaUF5QUxJQVFnQ0dvaUJVRUVkR29nQUNBS2FpSUxheUFGSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQU9nQUFJQUVnQWkwQUFTSUZJQW9nQUNBSWFpSUxRUVIwYWlBRElBUnFJZ3ByYWlBTElBcHJRUUowYWtFUWFrRUZkVUhBTldvdEFBQTZBQUVnQVNBQ0xRQUNJaEFnQkNBQUlBTnFJZ3BCQkhScUlBVWdDR29pQkd0cUlBb2dCR3RCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQWlBQklBSXRBQU1pRXlBSUlBTWdCV29pQkVFRWRHb2dBQ0FRYWlJSWEyb2dCQ0FJYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBRElBRkJCR29oQVNBQ1FRUnFJUUlnQUNFTElBTWhDaUFGSVFRZ0VDRUlJQk1oQUNBTlFRRnJJZzBOQUFzZ0FTQU1haUVCSUFJZ0Rtb2hBaUFQUVFGcklnOE5BQXNnRkNBVmFrRUNhaUlJSUFsQkJXeHFJUUFnQjBFQ2RpRUtRY0FBSUFacklSSWdDVUVCZENFUElBRWdCMEVFZEdzaEFpQUpRUUowSUFacklRZEJBQ0FKYXlJTFFRRjBJUk1EUUNBR0lRRURRQ0FDSUFnZ0Qyb3RBQUFpQXlBQUlBOXFMUUFBSUFBZ0NXb3RBQUFpRENBQUlCTnFMUUFBSWdScUlnVnJJQVZCQW5ScmFpQUFMUUFBSWcwZ0FDQUxhaTBBQUNJRmFrRVViR3BCRUdwQkJYVkJ3RFZxTFFBQUlBSXRBREJxUVFGcVFRRjJPZ0F3SUFJZ0NDQUphaTBBQUNJUUlBd2dCQ0FGYWlJT1FRUjBhaUFESUExcUlneHJJQTRnREd0QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0FpMEFJR3BCQVdwQkFYWTZBQ0FnQWlBSUxRQUFJZ3dnRFNBRElBUnFJZzVCQkhScUlBVWdFR29pRFdzZ0RpQU5hMEVDZEdwcVFSQnFRUVYxUWNBMWFpMEFBQ0FDTFFBUWFrRUJha0VCZGpvQUVDQUNJQWdnQzJvdEFBQWdCU0FESUJCcUlnTkJCSFJxSUFRZ0RHb2lCR3NnQXlBRWEwRUNkR3BxUVJCcVFRVjFRY0ExYWkwQUFDQUNMUUFBYWtFQmFrRUJkam9BQUNBSVFRRnFJUWdnQWtFQmFpRUNJQUJCQVdvaEFDQUJRUUZySWdFTkFBc2dBaUFTYWlFQ0lBQWdCMm9oQUNBSElBaHFJUWdnQ2tFQmF5SUtEUUFMSUJGQndBTnFKQUFMNXdZQkRIOENRQ0FCUVFSUEJFQWdBMEVDZGtFQ2FpRUxRUVFoQVFOQUFrQWdBRUVCYXlJR0xRQUFJZ2NnQUMwQUFDSUlheUlDSUFKQkgzVWlBbW9nQW5NaUFpQURUdzBBSUFCQkFtc2lEeTBBQUNJS0lBZHJJZ2tnQ1VFZmRTSUphaUFKY3lBRVR3MEFJQUF0QUFFaURDQUlheUlKSUFsQkgzVWlDV29nQ1hNZ0JFOE5BQUovQWtBZ0FpQUxTUVJBSUFBdEFBSWhEZ0ovSUFRZ0FFRURheUlKTFFBQUlnSWdCMnNpRFNBTlFSOTFJZzFxSUExelN3UkFJQVlnRENBSElBaHFJQXBxSWdaQkFYUnFJQUpxUVFScVFRTjJPZ0FBSUE4Z0FpQUdha0VDYWtFQ2Rqb0FBQ0FHSUFKQkEyeHFJQUJCQkdzdEFBQkJBWFJxUVFScVFRTjJEQUVMSUFZaENTQUhJQXhxSUFwQkFYUnFRUUpxUVFKMkN5RUNJQWtnQWpvQUFDQU9JQWhySWdJZ0FrRWZkU0lDYWlBQ2N5QUVUdzBCSUFBZ0J5QU1haUFJYWlJR0lBNXFRUUpxUVFKMk9nQUJJQUFnQ2lBR1FRRjBhaUFPYWtFRWFrRURkam9BQUNBR0lBNUJBMnhxSUFBdEFBTkJBWFJxUVFScVFRTjJJUVlnQUVFQ2Fnd0NDeUFHSUFjZ0RHb2dDa0VCZEdwQkFtcEJBblk2QUFBTElBZ2dDbW9nREVFQmRHcEJBbXBCQW5ZaEJpQUFDeUFHT2dBQUN5QUFJQVZxSVFBZ0FVRUJheUlCRFFBTERBRUxJQUVnQW1wQkFXc3RBQUFpQmtFQmFpRUpRUUFnQm1zaENrRUVJUUVEUUFKQUlBQkJBV3NpRHkwQUFDSUhJQUF0QUFBaUNHc2lBaUFDUVI5MUlnSnFJQUp6SUFOUERRQWdBRUVDYXlJTkxRQUFJZ3dnQjJzaUFpQUNRUjkxSWdKcUlBSnpJQVJQRFFBZ0FDMEFBU0lPSUFocklnSWdBa0VmZFNJQ2FpQUNjeUFFVHcwQUlBQXRBQUloQ3lBR0lRSWdCQ0FBUVFOckxRQUFJaEVnQjJzaUVDQVFRUjkxSWhCcUlCQnpTd1JBSUEwZ0RDQUtJQVlnQnlBSWFrRUJha0VCZGlBTVFRRjBheUFSYWtFQmRTSUNJQUlnQmtvYklBSWdDa2diYWpvQUFDQUpJUUlMSUE4Z0J3Si9JQVFnQ3lBSWF5SU5JQTFCSDNVaURXb2dEWE5MQkVBZ0FDQU9JQW9nQmlBSElBaHFRUUZxUVFGMklBNUJBWFJySUF0cVFRRjFJZ3NnQmlBTFNCc2dDaUFMU2h0cU9nQUJJQUpCQVdvaEFndEJBQ0FDYXlJTEN5QUNJQXdnRG1zZ0NDQUhhMEVDZEdwQkJHcEJBM1VpQnlBQ0lBZElHeUFISUF0SUd5SUNha0hBTldvdEFBQTZBQUFnQUNBSUlBSnJRY0ExYWkwQUFEb0FBQXNnQUNBRmFpRUFJQUZCQVdzaUFRMEFDd3NMaUFJQkIzOGdBQ2dDQkNFRUFrQWdBQ2dDREVFRGRDSUhJQUFvQWhBaUNHc2lBa0VnVGdSQUlBUW9BQUFpQTBFWWRDQURRUWgwUVlDQS9BZHhjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJUU1nQUNnQ0NDSUNSUTBCSUFNZ0FuUWdCQzBBQkVFSUlBSnJkbkloQXd3QkN5QUNRUUZJQkVBTUFRc2dCQzBBQUNBQUtBSUlJZ1ZCR0dvaUJuUWhBeUFDSUFWcVFRaHJJZ0pCQVVnTkFBTkFJQVF0QUFFZ0JrRUlheUlHZENBRGNpRURJQUpCQ0VvaEJTQUVRUUZxSVFRZ0FrRUlheUVDSUFVTkFBc0xJQUFnQVNBSWFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0VGL0lRSWdCQ0FIVFFSL0lBQWdBQ2dDQUNBRVFRTjJhallDQkNBRFFTQWdBV3QyQlVGL0N3c0RBQUVMeHdFQkJIOGdBQ2dDQkNFQ0FrQWdBQ2dDREVFRGRDQUFLQUlRYXlJRFFTQk9CRUFnQWlnQUFDSUJRUmgwSUFGQkNIUkJnSUQ4QjNGeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JaEFTQUFLQUlJSWdCRkRRRWdBU0FBZENBQ0xRQUVRUWdnQUd0MmNnOExJQU5CQVVnRVFFRUFEd3NnQWkwQUFDQUFLQUlJSWdCQkdHb2lCSFFoQVNBQUlBTnFRUWhySWdCQkFVZ05BQU5BSUFJdEFBRWdCRUVJYXlJRWRDQUJjaUVCSUFCQkNFb2hBeUFDUVFGcUlRSWdBRUVJYXlFQUlBTU5BQXNMSUFFTDh3Y0JFbjhqQUVHQURtc2lEeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFrRUZhaUFGU3cwQUlBTWhDZ3dCQ3lBQUlBOUJ3QXBxSWdBZ0FpQURJQVFnQlNBSklBZEJCV29nQ1JBSklBa2hCRUVBSVFJTElBQWdCQ0FLYkNBQ2Ftb2dCR29pQUNBRVFRVnNhaUVDSUFSQkFYUWhFQ0FIUVFKMklSSkJBQ0FFYXlJTFFRRjBJUllnQkVFQ2RDQUdhMEVGYXlFVElBOGdDVUVDZENJWGFpRURJQWxCQTNRaEdFRjdJQVpyUVFKMElSa2dDVUVEYkVFQ2RDRWFBMEFnQ1NFRkEwQWdBeUFZYWlBQUlCQnFMUUFBSWdvZ0FpQVFhaTBBQUNBQ0lBUnFMUUFBSWhFZ0FpQVdhaTBBQUNJTWFpSU5heUFOUVFKMGEyb2dBaTBBQUNJT0lBSWdDMm90QUFBaURXcEJGR3hxTmdJQUlBTWdGMm9nQUNBRWFpMEFBQ0lWSUJFZ0RDQU5haUlVUVFSMGFpQUtJQTVxSWhGcmFpQVVJQkZyUVFKMGFqWUNBQ0FESUFBdEFBQWlFU0FPSUFvZ0RHb2lGRUVFZEdvZ0RTQVZhaUlPYTJvZ0ZDQU9hMEVDZEdvMkFnQWdBeUFaYWlBQUlBdHFMUUFBSUEwZ0NpQVZhaUlLUVFSMGFpQU1JQkZxSWd4cmFpQUtJQXhyUVFKMGFqWUNBQ0FBUVFGcUlRQWdBMEVFYWlFRElBSkJBV29oQWlBRlFRRnJJZ1VOQUFzZ0FpQVRhaUVDSUFBZ0Uyb2hBQ0FESUJwcUlRTWdFa0VCYXlJU0RRQUxRUkFnQm1zaERpQUdRUUoySVJJZ0R5QUlRUUowYWtFSWFpRUlJQTlCRkdvaEJBTkFJQVJCQkdzb0FnQWhBaUFFUVFocktBSUFJUUFnQkVFTWF5Z0NBQ0VGSUFSQkVHc29BZ0FoQ1NBRVFSUnJLQUlBSVF3Z0VpRU5BMEFnQVNBRUlnc29BZ0FpQmlBTUlBQWdCV29pQTBFRWRHb2dBaUFKYWlJRWF5QURJQVJyUVFKMGFtcEJnQVJxUVFwMVFjQTFhaTBBQUNBSUlnTW9BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQUFDQUJJQXNvQWdRaUNpQUpJQUFnQW1vaUJFRUVkR29nQlNBR2FpSUlheUFFSUFoclFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQURLQUlFUVJCcVFRVjFRY0ExYWkwQUFHcEJBV3BCQVhZNkFBRWdBU0FMS0FJSUloQWdCU0FDSUFacUlnUkJCSFJxSUFBZ0Ntb2lCV3NnQkNBRmEwRUNkR3BxUVlBRWFrRUtkVUhBTldvdEFBQWdBeWdDQ0VFUWFrRUZkVUhBTldvdEFBQnFRUUZxUVFGMk9nQUNJQUVnQ3lnQ0RDSVRJQUFnQmlBS2FpSUVRUVIwYWlBQ0lCQnFJZ0JySUFRZ0FHdEJBblJxYWtHQUJHcEJDblZCd0RWcUxRQUFJQU1vQWd4QkVHcEJCWFZCd0RWcUxRQUFha0VCYWtFQmRqb0FBeUFCUVFScUlRRWdBMEVRYWlFSUlBdEJFR29oQkNBQ0lRd2dCaUVKSUFvaEJTQVFJUUFnRXlFQ0lBMUJBV3NpRFEwQUN5QUJJQTVxSVFFZ0EwRWthaUVJSUF0QkpHb2hCQ0FIUVFGcklnY05BQXNnRDBHQURtb2tBQXZnQndFTmZ5TUFRWUFPYXlJUkpBQWdCa0VGYWlFSkFrQUNRQ0FDUVFCSURRQWdBaUFKYWlBRVN3MEFJQU5CQUVnTkFDQUhRUVZxSWc0Z0Eyb2dCVXNOQUNBRUlRa2dBeUVLREFFTElBQWdFVUhBQ21vaUFDQUNJQU1nQkNBRklBa2dCMEVGYWlJT0lBa1FDVUVBSVFJTElBNEVRQ0FKSUFacklSTWdCa0VDZGlFU0lBQWdDU0FLYkNBQ2FtcEJCV29oQWlBUklRQURRQ0FDUVFGckxRQUFJUWtnQWtFQ2F5MEFBQ0VESUFKQkEyc3RBQUFoQlNBQ1FRUnJMUUFBSVFvZ0FrRUZheTBBQUNFTElCSWhEUU5BSUFBZ0FpMEFBQ0lFSUFzZ0F5QUZhaUlNUVFSMGFpQUpJQXBxSWd0cklBd2dDMnRCQW5ScWFqWUNBQ0FBSUFJdEFBRWlEQ0FLSUFNZ0NXb2lDMEVFZEdvZ0JDQUZhaUlLYTJvZ0N5QUthMEVDZEdvMkFnUWdBQ0FDTFFBQ0lnOGdCU0FFSUFscUlnVkJCSFJxSUFNZ0RHb2lDbXRxSUFVZ0NtdEJBblJxTmdJSUlBQWdBaTBBQXlJVUlBTWdCQ0FNYWlJRFFRUjBhaUFKSUE5cUlnVnJhaUFESUFWclFRSjBhallDRENBQVFSQnFJUUFnQWtFRWFpRUNJQWtoQ3lBRUlRb2dEQ0VGSUE4aEF5QVVJUWtnRFVFQmF5SU5EUUFMSUFJZ0Uyb2hBaUFPUVFGcklnNE5BQXNMSUJFZ0JrRUNkQ0lFYWlJSklBWkJGR3hxSVFJZ0NTQUlRUUpxSUFac1FRSjBhaUVBSUFkQkFuWWhDRUhBQUNBR2F5RVVRUUFnQm1zaURrRURkQ0VUSUFaQkEzUWhCU0FHUVFOc1FRSjBJUWNEUUNBR0lRTURRQ0FCSUFVZ0NXb29BZ0FpQ2lBQ0lBVnFLQUlBSUFJZ0JHb29BZ0FpRUNBQ0lCTnFLQUlBSWd4cUlndHJJQXRCQW5ScmFpQUNLQUlBSWcwZ0FpQU9RUUowSWc5cUtBSUFJZ3RxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBSUFBZ0JXb29BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQU1DQUJJQVFnQ1dvb0FnQWlFaUFRSUFzZ0RHb2lGVUVFZEdvZ0NpQU5haUlRYXlBVklCQnJRUUowYW1wQmdBUnFRUXAxUWNBMWFpMEFBQ0FBSUFScUtBSUFRUkJxUVFWMVFjQTFhaTBBQUdwQkFXcEJBWFk2QUNBZ0FTQUpLQUlBSWhBZ0RTQUtJQXhxSWhWQkJIUnFJQXNnRW1vaURXc2dGU0FOYTBFQ2RHcHFRWUFFYWtFS2RVSEFOV290QUFBZ0FDZ0NBRUVRYWtFRmRVSEFOV290QUFCcVFRRnFRUUYyT2dBUUlBRWdDU0FQYWlnQ0FDQUxJQW9nRW1vaUNrRUVkR29nRENBUWFpSU1heUFLSUF4clFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQUFJQTlxS0FJQVFSQnFRUVYxUWNBMWFpMEFBR3BCQVdwQkFYWTZBQUFnQUVFRWFpRUFJQWxCQkdvaENTQUJRUUZxSVFFZ0FrRUVhaUVDSUFOQkFXc2lBdzBBQ3lBQklCUnFJUUVnQUNBSGFpRUFJQUlnQjJvaEFpQUhJQWxxSVFrZ0NFRUJheUlJRFFBTElCRkJnQTVxSkFBTHBnUUJDWDhqQUVIQUEyc2lDeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFpQUZTdzBBSUFRaENTQURJUW9NQVFzZ0FDQUxJQUlnQXlBRUlBVWdDU0FISUFrUUNTQUxJUUJCQUNFQ0MwRVFJQVpySVE0Z0NTQUdheUVQSUFaQkFuWWhFQ0FBSUFrZ0Ntd2dBbXBxUVFWcUlRQURRQ0FBUVFGckxRQUFJUWtnQUVFQ2F5MEFBQ0VDSUFCQkEyc3RBQUFoQXlBQVFRUnJMUUFBSVFvZ0FFRUZheTBBQUNFR0lCQWhEQU5BSUFFZ0FDMEFBQ0lFSUFZZ0FpQURhaUlGUVFSMGFpQUpJQXBxSWdacklBVWdCbXRCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQWlBRElBZ2Jha0VCYWtFQmRqb0FBQ0FCSUFBdEFBRWlCU0FLSUFJZ0NXb2lCa0VFZEdvZ0F5QUVhaUlLYTJvZ0JpQUthMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFJQWtnQWlBSUcycEJBV3BCQVhZNkFBRWdBU0FBTFFBQ0lnMGdBeUFFSUFscUlnWkJCSFJxSUFJZ0JXb2lBMnRxSUFZZ0EydEJBblJxUVJCcVFRVjFRY0ExYWkwQUFDQUVJQWtnQ0J0cVFRRnFRUUYyT2dBQ0lBRWdBQzBBQXlJUklBSWdCQ0FGYWlJRFFRUjBhaUFKSUExcUlnSnJhaUFESUFKclFRSjBha0VRYWtFRmRVSEFOV290QUFBZ0JTQUVJQWdiYWtFQmFrRUJkam9BQXlBQlFRUnFJUUVnQUVFRWFpRUFJQWtoQmlBRUlRb2dCU0VESUEwaEFpQVJJUWtnREVFQmF5SU1EUUFMSUFFZ0Rtb2hBU0FBSUE5cUlRQWdCMEVCYXlJSERRQUxJQXRCd0FOcUpBQUx6UVFCREg4akFFSEFBMnNpRHlRQUFrQUNRQ0FDUVFCSURRQWdBaUFHYWlBRVN3MEFJQU5CQUVnTkFDQURJQWRxUVFWcUlBVkxEUUFnQXlFSkRBRUxJQUFnRHlBQ0lBTWdCQ0FGSUFZZ0IwRUZhaUFHRUFrZ0R5RUFJQVloQkVFQUlRSUxJQUFnQkNBSmJDQUNhbW9nQkdvaUFDQUVRUVZzYWlFQ0lBQWdCQ0FJUVFKcWJHb2hBeUFIUVFKMklSRkJ3QUFnQm1zaEV5QUVRUUYwSVFjZ0JFRUNkQ0FHYXlFSVFRQWdCR3NpQ1VFQmRDRVVBMEFnQmlFRkEwQWdBU0FBSUFkcUxRQUFJZ29nQWlBSGFpMEFBQ0FDSUFScUxRQUFJZ3NnQWlBVWFpMEFBQ0lNYWlJTmF5QU5RUUowYTJvZ0FpMEFBQ0lPSUFJZ0NXb3RBQUFpRFdwQkZHeHFRUkJxUVFWMVFjQTFhaTBBQUNBRElBZHFMUUFBYWtFQmFrRUJkam9BTUNBQklBQWdCR290QUFBaUVpQUxJQXdnRFdvaUVFRUVkR29nQ2lBT2FpSUxheUFRSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQUlBTWdCR290QUFCcVFRRnFRUUYyT2dBZ0lBRWdBQzBBQUNJTElBNGdDaUFNYWlJUVFRUjBhaUFOSUJKcUlnNXJJQkFnRG10QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0F5MEFBR3BCQVdwQkFYWTZBQkFnQVNBQUlBbHFMUUFBSUEwZ0NpQVNhaUlLUVFSMGFpQUxJQXhxSWd4cklBb2dER3RCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQXlBSmFpMEFBR3BCQVdwQkFYWTZBQUFnQTBFQmFpRURJQUJCQVdvaEFDQUJRUUZxSVFFZ0FrRUJhaUVDSUFWQkFXc2lCUTBBQ3lBQklCTnFJUUVnQXlBSWFpRURJQUlnQ0dvaEFpQUFJQWhxSVFBZ0VVRUJheUlSRFFBTElBOUJ3QU5xSkFBTDZnWUJDSDhDUUNBQUtBSUFJZ0VvQWhSRkRRQWdBVUVBTmdJVUlBRW9BaGdOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ1BFVU5BQ0FCUVFBMkFqd2dBVUZBYXlnQ0FBMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUprUlEwQUlBRkJBRFlDWkNBQktBSm9EUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQW93QlJRMEFJQUZCQURZQ2pBRWdBU2dDa0FFTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0N0QUZGRFFBZ0FVRUFOZ0swQVNBQktBSzRBUTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMY0FVVU5BQ0FCUVFBMkF0d0JJQUVvQXVBQkRRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9Bb1FDUlEwQUlBRkJBRFlDaEFJZ0FTZ0NpQUlOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ3JBSkZEUUFnQVVFQU5nS3NBaUFCS0FLd0FnMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUxVQWtVTkFDQUJRUUEyQXRRQ0lBRW9BdGdDRFFBZ0FDQUFLQUlzUVFGck5nSXNDd0pBSUFFb0F2d0NSUTBBSUFGQkFEWUMvQUlnQVNnQ2dBTU5BQ0FBSUFBb0FpeEJBV3MyQWl3TEFrQWdBU2dDcEFORkRRQWdBVUVBTmdLa0F5QUJLQUtvQXcwQUlBQWdBQ2dDTEVFQmF6WUNMQXNDUUNBQktBTE1BMFVOQUNBQlFRQTJBc3dESUFFb0F0QUREUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQXZRRFJRMEFJQUZCQURZQzlBTWdBU2dDK0FNTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0NuQVJGRFFBZ0FVRUFOZ0tjQkNBQktBS2dCQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMRUJFVU5BQ0FCUVFBMkFzUUVJQUVvQXNnRURRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9BdXdFUlEwQUlBRkJBRFlDN0FRZ0FTZ0M4QVFOQUNBQUlBQW9BaXhCQVdzMkFpd0xJQUFvQWpnaEJnTkFBa0FnQmcwQUlBQW9BaHdoQjBFQUlRSkIvLy8vL3djaEEwRUFJUVFEUUNBQklBUkJLR3hxSWdVb0FoZ0VRQ0FGSUFJZ0JTZ0NFQ0lGSUFOSUlnZ2JJUUlnQlNBRElBZ2JJUU1MSUFSQkFXb2lCQ0FIVFEwQUN5QUNSUTBBSUFBb0Fnd2dBQ2dDRUNJRVFRUjBhaUlESUFJb0FnQTJBZ0FnQXlBQ0tBSWtOZ0lNSUFNZ0FpZ0NIRFlDQkNBRElBSW9BaUEyQWdnZ0FDQUVRUUZxTmdJUUlBSkJBRFlDR0NBQ0tBSVVEUUVnQUNBQUtBSXNRUUZyTmdJc0RBRUxDeUFBUVFBMkFqQWdBRUwvL3dNM0FpUUwyUThCQ244Z0FpQUFLQUlJSWdrb0FnQkdCRUFnQUVFQU5nSTBJQUFvQWpnaUFrVWhFUUpBSUFGRkJFQWdDU0FETmdJTUlBbEJBRFlDRkNBSklCRTJBaGdnQ1NBRU5nSVFJQWtnQXpZQ0NDQUNEUUVnQUNBQUtBSXNRUUZxTmdJc0RBRUxJQVVFUUNBQVFnQTNBaEFnQUJBYkFrQWdBU2dDQUVVRVFDQUFLQUk0UlEwQkN5QUFRZ0EzQWhBTElBQW9BZ2dpQWtFRFFRSWdBU2dDQkNJQkd6WUNGQ0FBUVFCQi8vOERJQUViTmdJa0lBSWdFVFlDR0NBQ1FRQTJBaEFnQWtJQU53SUlJQUJDZ1lDQWdCQTNBaWdNQVFzQ1FBSkFJQUVvQWdnRVFFRUFJUWtEUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUVnQ1VFVWJHb2lBaWdDREVFQmF3NEdBQUVDQXdRRkNRc2dBQ2dDR0NJS1JRMElJQU1nQWlnQ0VHc2hDeUFBS0FJQUlReEJBQ0VDQTBBQ1FDQU1JQUpCS0d4cUlnZ29BaFJCQVd0QkFVMEVRQ0FJS0FJSUlBdEdEUUVMSUFKQkFXb2lBaUFLUncwQkRBb0xDeUFDUVFCSURRZ2dDRUVBTmdJVUlBQWdBQ2dDS0VFQmF6WUNLQ0FJS0FJWURRVWdBQ0FBS0FJc1FRRnJOZ0lzSUFsQkFXb2hDUXdHQ3lBQUtBSVlJZ3BGRFFjZ0FpZ0NGQ0VMSUFBb0FnQWhERUVBSVFJRFFBSkFJQXdnQWtFb2JHb2lDQ2dDRkVFRFJnUkFJQWdvQWdnZ0MwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNRc0xJQUpCQUVnTkJ5QUlRUUEyQWhRZ0FDQUFLQUlvUVFGck5nSW9JQWdvQWhnTkJDQUFJQUFvQWl4QkFXczJBaXdnQ1VFQmFpRUpEQVVMSUFBb0FpUWlDRUgvL3dOR0RRWWdDQ0FDS0FJWUlndEpEUVlnQUNnQ0dDSUlSUTBHSUFJb0FoQWhEeUFBS0FJQUlReEJBQ0VDQTBBQ1FBSkFJQXdnQWtFb2JHb2lDaWdDRkVFRFJ3MEFJQW9vQWdnZ0MwY05BQ0FLUVFBMkFoUWdBQ0FBS0FJb1FRRnJOZ0lvSUFvb0FoZ05BU0FBSUFBb0FpeEJBV3MyQWl3TUFRc2dBa0VCYWlJQ0lBaEhEUUVMQ3lBSVFRRWdDRUVCU3hzaENpQURJQTlySVE5QkFDRUNBMEFDUUNBTUlBSkJLR3hxSWdnb0FoUWlEVUVCYTBFQlRRUkFJQWdvQWdnZ0QwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNBc0xJQUpCQUVnTkJpQU5RUUpKRFFZZ0NFRUROZ0lVSUFnZ0N6WUNDQ0FKUVFGcUlRa01CQXNnQUNBQ0tBSWNJZ28yQWlRZ0FDZ0NHQ0lMUlEwQ0lBQW9BZ0FoREVFQUlRSWdDa0gvL3dOR0JFQURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFNQkFzQUN3TkFBa0FnRENBQ1FTaHNhaUlJS0FJVVFRTkhEUUFnQ0NnQ0NDQUtUUTBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFMREFJTElBQVFHeUFBUVFFMkFqUkJBQ0VESUFsQkFXb2hDUXdDQ3lBQUtBSWtJZ2hCLy84RFJnMERJQWdnQWlnQ0dDSUtTUTBEQWtBZ0FDZ0NHQ0lMUlEwQUlBQW9BZ0FoREVFQUlRSURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFnb0FnZ2dDa2NOQUNBSVFRQTJBaFFnQUNBQUtBSW9RUUZyTmdJb0lBZ29BaGdOQWlBQUlBQW9BaXhCQVdzMkFpd01BZ3NnQWtFQmFpSUNJQXRIRFFBTEN5QUFLQUlvSWdnZ0MwOE5BeUFBS0FJSUlnSkJBellDRkNBQ0lBUTJBaEFnQWlBS05nSUlJQUlnQXpZQ0RDQUNJQUFvQWpoRk5nSVlRUUVoRGlBQUlBaEJBV28yQWlnZ0FDQUFLQUlzUVFGcU5nSXNDeUFKUVFGcUlRa01BQXNBQ3lBQUtBSW9JZ2dnQUNnQ0dDSUxTUTBCSUFoRkJFQkJBQ0VJREFJTElBQW9BZ0FoQ2tFQUlRbEJmeUVCQWtBZ0NFRUJSd1JBSUFoQkFYRWhEMEVBSVFJZ0NFRitjU0lPSVF3RFFDQUtJQUpCS0d4cUlnMG9BaFJCQVd0QkFVMEVRQ0FOS0FJSUlnMGdDU0FCUVg5R0lBa2dEVXB5SWcwYklRa2dBaUFCSUEwYklRRUxJQW9nQWtFQmNpSU5RU2hzYWlJUUtBSVVRUUZyUVFKSkJFQWdFQ2dDQ0NJUUlBa2dBVUYvUmlBSklCQktjaUlRR3lFSklBMGdBU0FRR3lFQkN5QUNRUUpxSVFJZ0RFRUNheUlNRFFBTElBOUZEUUVMSUFvZ0RrRW9iR29pQWlnQ0ZFRUJhMEVCU3cwQUlBNGdEaUFCSUFGQmYwWWJJQUlvQWdnZ0NVZ2JJUUVMSUFGQkFFZ05BU0FLSUFGQktHeHFJZ0ZCQURZQ0ZDQUFJQWhCQVdzaUNEWUNLQ0FCS0FJWURRRWdBQ0FBS0FJc1FRRnJOZ0lzREFFTElBNE5BU0FBS0FJWUlRc2dBQ2dDS0NFSUN5QUlJQXRQRFFBZ0FDZ0NDQ0lCSUJFMkFoZ2dBVUVDTmdJVUlBRWdCRFlDRUNBQklBTTJBZ2dnQVNBRE5nSU1JQUFnQ0VFQmFqWUNLQ0FBSUFBb0FpeEJBV28yQWl3TElBQW9BZ2dpQVNBSE5nSWdJQUVnQmpZQ0hDQUJJQVUyQWlRQ1FDQUFLQUk0UlFSQUlBQW9BaXdpQVNBQUtBSWNJZ05ORFFFZ0FDZ0NBQ0VHQTBCQi8vLy8vd2NoQlVFQUlRbEJBQ0VDQTBBZ0JpQUNRU2hzYWlJRUtBSVlCRUFnQkNBSklBUW9BaEFpQkNBRlNDSUhHeUVKSUFRZ0JTQUhHeUVGQ3lBQ1FRRnFJZ0lnQTAwTkFBc0NRQ0FKUlEwQUlBQW9BZ3dnQUNnQ0VDSUVRUVIwYWlJQ0lBa29BZ0EyQWdBZ0FpQUpLQUlrTmdJTUlBSWdDU2dDSERZQ0JDQUNJQWtvQWlBMkFnZ2dBQ0FFUVFGcU5nSVFJQWxCQURZQ0dDQUpLQUlVRFFBZ0FDQUJRUUZySWdFMkFpd0xJQUVnQTBzTkFBc01BUXNnQVNnQ0FDRUNJQUFvQWd3Z0FDZ0NFQ0lEUVFSMGFpSUJJQVUyQWd3Z0FTQUNOZ0lBSUFFZ0J6WUNDQ0FCSUFZMkFnUWdBQ0FEUVFGcU5nSVFJQUFvQWh3aEF3c2dBQ2dDQUNBRFFRRnFFQjBMQzhjRUFneC9BbjVCQnlFRkl3QkJFR3NpQ3lFTUEwQWdBU0FGU3dSQVFRQWdCV3NoQnlBRklRWURRQ0FBSUFaQktHeHFJZ0lvQWhnaERTQUNLUUlNSVE0Z0FpZ0NDQ0VJSUFJcEFnQWhEeUFDS0FJVUlRa2dEQ0FDS0FJa05nSUlJQXNnQWlrQ0hEY0RBQUpBSUFZaUFpQUZTUTBBSUFsRkJFQWdEVVVOQVFOQUlBQWdBa0VvYkdvaUJDQUhRU2hzYWlJREtBSVVEUUlnQXlnQ0dBMENJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBc01BUXNnQ1VFQmEwRUJUUVJBQTBBQ1FDQUFJQUpCS0d4cUlnUWdCMEVvYkdvaUF5Z0NGQ0lLUlEwQUlBcEJBV3RCQVVzTkFDQURLQUlJSUFoT0RRTUxJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBd0NDd0FMQTBBZ0FDQUNRU2hzYWlJRUlBZEJLR3hxSWdNb0FoUWlDZ1JBSUFwQkFXdEJBa2tOQWlBREtBSUlJQWhNRFFJTElBUWdBQ0FDSUFWcklnSkJLR3hxSWdNcEFnQTNBZ0FnQkNBREtRSWdOd0lnSUFRZ0F5a0NHRGNDR0NBRUlBTXBBaEEzQWhBZ0JDQURLUUlJTndJSUlBSWdCVThOQUFzTElBQWdBa0VvYkdvaUFpQU5OZ0lZSUFJZ0NUWUNGQ0FDSUE0M0Fnd2dBaUFJTmdJSUlBSWdEemNDQUNBQ0lBc3BBd0EzQWh3Z0FpQU1LQUlJTmdJa0lBWkJBV29pQmlBQlJ3MEFDd3NnQlVFQlN5RUdJQVZCQVhZaEJTQUdEUUFMQzlZTEFRcC9RUUVoQndKQUlBQWdBUkFDRFFBZ0FTQUJLQUlBUVFGcUlnbzJBZ0FnQ2tFZ1N3MEFJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDQ0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQURBRUxJQVF0QUFBZ0FDZ0NDQ0lKUVJocUlnVjBJUUlnQXlBSmFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRa2dCRUVCYWlFRUlBTkJDR3NoQXlBSkRRQUxDeUFBSUFaQkJHb2lCVFlDRUNBQUlBVkJCM0VpQXpZQ0NDQUZJQWhMRFFBZ0FDQUFLQUlBSWdrZ0JVRURkbW9pQkRZQ0JDQUJJQUpCSEhZMkFnUUNRQ0FJSUFWcklndEJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQXRCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnVjBJUUlnQXlBTGFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRc2dCRUVCYWlFRUlBTkJDR3NoQXlBTERRQUxDeUFBSUFaQkIzRTJBZ2dnQUNBR1FRaHFJZ1UyQWhBZ0JTQUlTdzBBSUFBZ0NTQUZRUU4yYWlJRU5nSUVJQUVnQWtFY2RqWUNDQ0FLQkVCQkFDRUlBMEFnQUNBQklBaEJBblJxSWdVaUFrRU1haEFDQkVCQkFROExJQUlvQWd3aUJFRi9SZ1JBUVFFUEN5QUNJQVJCQVdvaUJEWUNEQ0FDSUFRZ0FTZ0NCRUVHYW5RMkFnd2dBQ0FGUVl3QmFoQUNEUUlnQlNnQ2pBRWlBa0YvUmcwQ0lBVWdBa0VCYWlJQ05nS01BU0FGSUFJZ0FTZ0NDRUVFYW5RMkFvd0JJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQVFRQWhBZ3dCQ3lBRUxRQUFJQUFvQWdnaUNrRVlhaUlIZENFQ0lBTWdDbXBCQ0dzaUEwRUJTQTBBQTBBZ0JDMEFBU0FIUVFocklnZDBJQUp5SVFJZ0EwRUlTaUVLSUFSQkFXb2hCQ0FEUVFocklRTWdDZzBBQ3d0QkFTRUhJQUFnQmtFQmFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0NBRUlBbExEUUlnQUNBQUtBSUFJZ2tnQkVFRGRtb2lCRFlDQkNBRklBSkJIM1kyQW93Q0lBaEJBV29pQ0NBQktBSUFTUTBBQ3lBQUtBSU1RUU4wSVFnZ0FDZ0NFQ0VGQ3dKQUlBZ2dCV3NpQTBFZ1RnUkFJQVFvQUFBaUFrRVlkQ0FDUVFoMFFZQ0EvQWR4Y2lBQ1FRaDJRWUQrQTNFZ0FrRVlkbkp5SVFJZ0FDZ0NDQ0lEUlEwQklBSWdBM1FnQkMwQUJFRUlJQU5yZG5JaEFnd0JDeUFEUVFGSUJFQkJBQ0VDREFFTElBUXRBQUFnQUNnQ0NDSUdRUmhxSWdkMElRSWdBeUFHYWtFSWF5SURRUUZJRFFBRFFDQUVMUUFCSUFkQkNHc2lCM1FnQW5JaEFpQURRUWhLSVFZZ0JFRUJhaUVFSUFOQkNHc2hBeUFHRFFBTEN5QUFJQVZCQldvaUJqWUNFQ0FBSUFaQkIzRWlBellDQ0VFQklRY2dCaUFJU3cwQUlBQWdDU0FHUVFOMmFpSUVOZ0lFSUFFZ0FrRWJka0VCYWpZQ2pBTUNRQ0FJSUFacklnWkJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQVpCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnZDBJUUlnQXlBR2FrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0FuSWhBaUFEUVFoS0lRWWdCRUVCYWlFRUlBTkJDR3NoQXlBR0RRQUxDeUFBSUFWQkNtb2lCRFlDRUNBQUlBUkJCM0UyQWdoQkFTRUhJQVFnQ0VzTkFDQUFJQWtnQkVFRGRtbzJBZ1FnQVNBQ1FSdDJRUUZxTmdLUUF5QUFRUVVRRkNJQ1FYOUdEUUFnQVNBQ1FRRnFOZ0tVQXlBQVFRVVFGQ0lBUVg5R0RRQWdBU0FBTmdLWUEwRUFJUWNMSUFjTHFBd0JDbjhDUUNBQlFRUlBCRUJCQUNBRGF5SU1RUUYwSVFzQ1FDQUNLQUlFSWdFZ0FDQURheUlHTFFBQUlnY2dBQzBBQUNJSWF5SUtJQXBCSDNVaUNtb2dDbk5ORFFBZ0FpZ0NDQ0lGSUFBZ0Myb3RBQUFpQ2lBSGF5SUpJQWxCSDNVaUNXb2dDWE5ORFFBZ0JTQUFJQU5xTFFBQUlnVWdDR3NpQ1NBSlFSOTFJZ2xxSUFselRRMEFJQVlnQlNBSGFpQUtRUUYwYWtFQ2FrRUNkam9BQUNBQUlBZ2dCVUVCZEdvZ0NtcEJBbXBCQW5ZNkFBQWdBaWdDQkNFQkN3SkFJQUJCQVdvaUJ5QU1haUlKTFFBQUlnZ2dBQzBBQVNJS2F5SUZJQVZCSDNVaUJXb2dCWE1nQVU4TkFDQUNLQUlJSWdZZ0J5QUxhaTBBQUNJRklBaHJJZ1FnQkVFZmRTSUVhaUFFYzAwTkFDQUdJQU1nQjJvdEFBQWlCaUFLYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQ1NBR0lBaHFJQVZCQVhScVFRSnFRUUoyT2dBQUlBY2dDaUFHUVFGMGFpQUZha0VDYWtFQ2Rqb0FBQ0FDS0FJRUlRRUxBa0FnQUVFQ2FpSUhJQXhxSWdrdEFBQWlDQ0FBTFFBQ0lncHJJZ1VnQlVFZmRTSUZhaUFGY3lBQlR3MEFJQUlvQWdnaUJpQUhJQXRxTFFBQUlnVWdDR3NpQkNBRVFSOTFJZ1JxSUFSelRRMEFJQVlnQXlBSGFpMEFBQ0lHSUFwcklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBSklBWWdDR29nQlVFQmRHcEJBbXBCQW5ZNkFBQWdCeUFLSUFaQkFYUnFJQVZxUVFKcVFRSjJPZ0FBSUFJb0FnUWhBUXNDUUNBQVFRTnFJZ2NnREdvaUNTMEFBQ0lJSUFBdEFBTWlDbXNpQlNBRlFSOTFJZ1ZxSUFWeklBRlBEUUFnQWlnQ0NDSUdJQWNnQzJvdEFBQWlCU0FJYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQmlBRElBZHFMUUFBSWdZZ0Ntc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBa2dCaUFJYWlBRlFRRjBha0VDYWtFQ2Rqb0FBQ0FISUFvZ0JrRUJkR29nQldwQkFtcEJBblk2QUFBZ0FpZ0NCQ0VCQ3dKQUlBQkJCR29pQnlBTWFpSUpMUUFBSWdnZ0FDMEFCQ0lLYXlJRklBVkJIM1VpQldvZ0JYTWdBVThOQUNBQ0tBSUlJZ1lnQnlBTGFpMEFBQ0lGSUFocklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBR0lBTWdCMm90QUFBaUJpQUtheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdDU0FHSUFocUlBVkJBWFJxUVFKcVFRSjJPZ0FBSUFjZ0NpQUdRUUYwYWlBRmFrRUNha0VDZGpvQUFDQUNLQUlFSVFFTEFrQWdBRUVGYWlJSElBeHFJZ2t0QUFBaUNDQUFMUUFGSWdwcklnVWdCVUVmZFNJRmFpQUZjeUFCVHcwQUlBSW9BZ2dpQmlBSElBdHFMUUFBSWdVZ0NHc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBWWdBeUFIYWkwQUFDSUdJQXBySWdRZ0JFRWZkU0lFYWlBRWMwME5BQ0FKSUFZZ0NHb2dCVUVCZEdwQkFtcEJBblk2QUFBZ0J5QUtJQVpCQVhScUlBVnFRUUpxUVFKMk9nQUFJQUlvQWdRaEFRc0NRQ0FBUVFacUlnY2dER29pQ1MwQUFDSUlJQUF0QUFZaUNtc2lCU0FGUVI5MUlnVnFJQVZ6SUFGUERRQWdBaWdDQ0NJR0lBY2dDMm90QUFBaUJTQUlheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdCaUFESUFkcUxRQUFJZ1lnQ21zaUJDQUVRUjkxSWdScUlBUnpUUTBBSUFrZ0JpQUlhaUFGUVFGMGFrRUNha0VDZGpvQUFDQUhJQW9nQmtFQmRHb2dCV3BCQW1wQkFuWTZBQUFnQWlnQ0JDRUJDeUFCSUFCQkIyb2lBU0FNYWlJSExRQUFJZ3dnQUMwQUJ5SUFheUlJSUFoQkgzVWlDR29nQ0hOTkRRRWdBaWdDQ0NJSUlBRWdDMm90QUFBaUFpQU1heUlMSUF0QkgzVWlDMm9nQzNOTkRRRWdBU0FEYWkwQUFDSURJQUJySWdzZ0MwRWZkU0lMYWlBTGN5QUlUdzBCSUFjZ0F5QU1haUFDUVFGMGFrRUNha0VDZGpvQUFDQUJJQUFnQTBFQmRHb2dBbXBCQW1wQkFuWTZBQUFQQzBFQUlBTnJJZ3BCQVhRaEJTQUJJQUlvQWdCcVFRRnJMUUFBSWdGQmYzTWhCeUFCUVFGcUlRaEJDQ0VCQTBBQ1FDQUNLQUlFSUFBZ0Ntb2lCaTBBQUNJTElBQXRBQUFpREdzaUNTQUpRUjkxSWdscUlBbHpUUTBBSUFJb0FnZ2lDU0FBSUFWcUxRQUFJZ1FnQzJzaURTQU5RUjkxSWcxcUlBMXpUUTBBSUFrZ0FDQURhaTBBQUNJSklBeHJJZzBnRFVFZmRTSU5haUFOYzAwTkFDQUdJQXNnQnlBSUlBd2dDMnRCQW5RZ0NXc2dCR3BCQkdwQkEzVWlDeUFJSUF0SUd5QUhJQXRLR3lJTGFrSEFOV290QUFBNkFBQWdBQ0FNSUF0clFjQTFhaTBBQURvQUFBc2dBRUVCYWlFQUlBRkJBV3NpQVEwQUN3c0xCZ0FnQUJBRUN3Y0FRY1FhRUFnTHlBTUJBMzhEUUNBQUlBSkJBblJxSWdGQkZHb29BZ0FpQXdSQUlBTW9BaWdRQkNBQktBSVVRUUEyQWlnZ0FTZ0NGQ2dDVkJBRUlBRW9BaFJCQURZQ1ZDQUJLQUlVRUFRZ0FVRUFOZ0lVQ3lBQ1FRRnFJZ0pCSUVjTkFBdEJBQ0VDQTBBZ0FDQUNRUUowYWlJQlFaUUJhaWdDQUNJREJFQWdBeWdDRkJBRUlBRW9BcFFCUVFBMkFoUWdBU2dDbEFFb0FoZ1FCQ0FCS0FLVUFVRUFOZ0lZSUFFb0FwUUJLQUljRUFRZ0FTZ0NsQUZCQURZQ0hDQUJLQUtVQVNnQ0xCQUVJQUVvQXBRQlFRQTJBaXdnQVNnQ2xBRVFCQ0FCUVFBMkFwUUJDeUFDUVFGcUlnSkJnQUpIRFFBTElBQW9BckFhRUFSQkFDRUNJQUJCQURZQ3NCb2dBQ2dDdkFrUUJDQUFRUUEyQXJ3SklBQW9BcFFKRUFRZ0FFRUFOZ0tVQ1NBQUtBSzhHaUlEQkVBZ0F4QUVJQUJCQURZQ3ZCb0xBa0FnQUNnQ3hBa2lBMFVOQUNBQVFlQUphaWdDQUVGL1JnUkFJQU1oQWd3QkMwRUFJUUVnQXlFQ0EwQWdBaUFCUVNoc0lnTnFLQUlFRUFRZ0FDZ0N4QWtpQWlBRGFrRUFOZ0lFSUFGQkFXb2lBU0FBS0FMZ0NVRUJha2tOQUFzTElBSVFCQ0FBUVFBMkFzUUpJQUJCeUFscUlnTW9BZ0FRQkNBRFFRQTJBZ0FnQUVIUUNXb2lBQ2dDQUJBRUlBQkJBRFlDQUF2TjN3UUNhSDhDZmlNQVFmQUJheUlMSkFBZ0FFSHNER29oVkNBQVFiUVNhaUZWSUFCQjJBcHFJVllnQUVIRUNXb2hPQ0FBUWJnS2FpRXJJQUJCbkJwcUlUd2dDMEcwQVdvaFZ5QUxRYkFCYWlGWUlBdEJyQUZxSVZrZ0MwR29BV29oV2lBTFFaUUJhaUZiSUF0QmpBRnFJVndnQzBId0FHb2hYU0FMUVRCcUlWNGdDMEVnYWtFRWNpRmZBMEFnQVNBeWFpRUJJQUlnTW1zaEFnSkFBa0FDUUFKQUlBQW9BcEFhUlEwQUlBQW9BcFFhSUFGSERRQWdDeUE4S0FJUU5nSVlJQXNnUENrQ0NEY0RFQ0E4S1FJQUlXNUJBQ0VLSUF0QkFEWUNHQ0FMUVFBMkFoQWdDeUJ1TndNSUlBc2diajRDRENBQUtBS1lHaUV5SUFzb0FoUWhCZ3dCQ3dKQUFrQWdBa0VFU1EwQUlBRXRBQUFOQUNBQkxRQUJEUUFnQVMwQUFpSU5RUUZMRFFCQkF5RUhJQUZCQTJvaENVRUNJVElEUUNBSklRWUNRQ0FOUWY4QmNTSUlSUVJBSURKQkFXb2hNZ3dCQzBFQUlRa2dDRUVCUndSQVFRQWhNZ3dCQ3lBeVFRRkxJUWhCQUNFeUlBaEZEUUFnQnlFeVFRQWhHRUVBSVJJRFFFRUJJQmdnQ1NBR0xRQUFJZ3BGYWlJSVFRSkdHeUFZSUFwQkEwWWJJUmdDUUNBS1FRRkhEUUFnQ0VFQ1NRMEFJQXNnTWlBSElBaHFheUlHTmdJVVFRQWdDRUVEYXlJSklBZ2dDVWtiSVFrTUJRdEJBQ0FJSUFvYklRbEJBU0FTSUFoQkFrc2JJQklnQ2hzaEVpQUdRUUZxSVFZZ01rRUJhaUl5SUFKSERRQUxJQXNnQWlBSElBbHFheUlHTmdJVURBTUxJQVpCQVdvaENTQUdMUUFBSVExQkF5RU1RUUFoQ2lBSFFRRnFJZ2NnQWtjTkFBc2dBaUV5REFRTElBc2dBallDRkVFQklSaEJBQ0VISUFJaEJrRUFJUWxCQUNFU0MwRUFJUW9nQzBFQU5nSVlJQXRCQURZQ0VDQUxJQUVnQjJvaURUWUNEQ0FMSUEwMkFnZ2dCeUFKYWlBR2FpRXlRUU1oRENBU0RRSWdHQVJBSUEwaEJ5QUxJQVlFZndOQUlBWkJBV3NoQmlBSExRQUFJUWdDZnlBS1FRSkdCRUFnQ0VFRFJnUkFJQVpGQkVCQkFDRUtEQWtMUVFBaUNpQUhMUUFCUVFOTkRRSWFEQWdMSUFoQkEwa05CZ3NnRFNBSU9nQUFJQTFCQVdvaERVRUFJQXBCQVdvZ0NCc0xJUW9nQjBFQmFpRUhJQVlOQUFzZ0N5Z0NHQ0VLSUFzb0FoUUZRUUFMSUEwZ0IydHFJZ1kyQWhRTElEd2dDeWtEQ0RjQ0FDQThJQXNvQWhnMkFoQWdQQ0FMS1FNUU53SUlJQUFnQVRZQ2xCb2dBQ0F5TmdLWUdnc2dBRUVBTmdLUUdnSkFJQVpCQTNRaUdDQUtheUlHUVFGclFSNUxEUUFnQmlBTEtBSVFha0VJYXlJR1FRRklEUUFEUUNBR1FRaEtJUWNnQmtFSWF5RUdJQWNOQUFzTElBc2dDa0VCYWlJSE5nSVlJQXNnQjBFSGNTSUlOZ0lRSUFjZ0dFc0VRRUVESVF4QkFDRUtEQUlMSUFzZ0N5Z0NDQ0lPSUFkQkEzWnFJZ1kyQWd3Q1FDQVlJQWRySWcxQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSklBaEZEUUVnQ1NBSWRDQUdMUUFFUVFnZ0NHdDJjaUVKREFFTElBMUJBVWdFUUVFQUlRa01BUXNnQmkwQUFDQUlRUmh5SWd4MElRa2dCaUVISUFnZ0RXcEJDR3NpRFVFQlNBMEFBMEFnQnkwQUFTQU1RUWhySWd4MElBbHlJUWtnRFVFSVNpRUlJQWRCQVdvaEJ5QU5RUWhySVEwZ0NBMEFDd3NnQ3lBS1FRTnFJZ2cyQWhnZ0N5QUlRUWR4SWdjMkFoQkJmeUVTSUFnZ0dFMEVRQ0FMSUE0Z0NFRURkbW9pQmpZQ0RDQUpRUjUySVJJTEFrQWdHQ0FJYXlJSVFTQk9CRUFnQmlnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERTQUhSUTBCSUEwZ0IzUWdCaTBBQkVFSUlBZHJkbkloRFF3QkN5QUlRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdCMEVZY2lJSmRDRU5JQWNnQ0dwQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBSlFRaHJJZ2wwSUExeUlRMGdCMEVJU2lFSUlBWkJBV29oQmlBSFFRaHJJUWNnQ0EwQUN3c2dDeUFLUVFkeE5nSVFJQXNnQ2tFSWFpSUdOZ0lZUVFBaENpQUdJQmhMQkVCQkFDRU1EQUlMSUFzZ0RpQUdRUU4yYWpZQ0RDQU5RUnQySWhwQkFtdEJBMGtFUUVFRElRd01BZ3NDUUNBYVFReExEUUJCQVNBYWRDSUdRY0E4Y1VVRVFDQUdRYUFEY1VVTkFTQVNSUVJBUVFNaERBd0VDeUFhUVFaSERRRkJBeUVNREFNTElCSkZEUUJCQXlFTURBSUxJQnBCQVdzaUUwRUxTd1JBUVFBaERBd0NDd0pBSUJwQkVrc05BQUpBQWtCQkFTQWFkQ0lHUWNEZkgzRkZCRUFnQmtFaWNVVU5BeUFBS0FLMENnUi9JQUJCQURZQ3RBcEJBUVZCQUFzaENpQUxJQXNvQWhnMkF1QUJJQXNnQ3lrRENEY0QwQUVnQ3lBTFFSQnFJaGdwQXdBM0E5Z0JJQXRCMEFGcUlBdEI3QUZxRUFJaUJnMEJJQXRCMEFGcUlBdEI3QUZxRUFJTkJDQUxRZEFCYWlBTFFld0JhaEFDRFFRZ0N5Z0M3QUVpQmtIL0FVc05CQ0FBSUFaQkFuUnFLQUtVQVNJTlJRMENJQUFnRFNnQ0JDSUdRUUowYWlnQ0ZDSUhSUTBDQWtBZ0FDZ0NDQ0lJUVNCR0RRQWdCaUFJUmcwQUlCcEJCVWNOQXdzZ0NpQUtRUUVnRWh0QkFTQUFLQUtZQ2lJR0d5QUdJQkpHR3lFS0FrQUNRQ0FBS0FLVUNrRUZSZ1JBSUJwQkJVY05BUXdDQ3lBYVFRVkhEUUVMUVFFaENnc2dCeWdDRENFR0lBc2dDeWdDR0RZQzRBRWdDeUFZS1FNQU53UFlBU0FMSUFzcEF3ZzNBOUFCSUF0QjBBRnFJQXRCN0FGcUVBSU5CQ0FMUWRBQmFpQUxRZXdCYWhBQ0RRUWdDMEhRQVdvZ0MwSHNBV29RQWcwRVFSOGdCbWNpQ1dzaEp5QUxLQUxVQVNFT0FrQWdDeWdDM0FGQkEzUWlEQ0FMS0FMZ0FTSVVheUlHUVNCT0JFQWdEaWdBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloRHlBTEtBTFlBU0lHUlEwQklBOGdCblFnRGkwQUJFRUlJQVpyZG5JaER3d0JDeUFHUVFGSUJFQkJBQ0VQREFFTElBNHRBQUFnQ3lnQzJBRWlFVUVZYWlJSWRDRVBJQVlnRVdwQkNHc2lFVUVCU0EwQUEwQWdEaTBBQVNBSVFRaHJJZ2gwSUE5eUlROGdFVUVJU2lFR0lBNUJBV29oRGlBUlFRaHJJUkVnQmcwQUN3c2dGQ0FuYWlBTVN3MEVJQThnQ1VFQmFuWWlCa0YvUmcwRUlBWWdBQ2dDbkFwSEJFQWdBQ0FHTmdLY0NrRUJJUW9MSUJwQkJVY2lGRVVFUUNBSEtBSU1JUVlnQ3lBTEtBSVlOZ0xnQVNBTElCZ3BBd0EzQTlnQklBc2dDeWtEQ0RjRDBBRWdDMEhRQVdvZ0MwSHNBV29RQWcwRklBdEIwQUZxSUF0QjdBRnFFQUlOQlNBTFFkQUJhaUFMUWV3QmFoQUNEUVZCSHlBR1p5SU1heUVPSUFzb0F0UUJJUkVDUUNBTEtBTGNBVUVEZENJY0lBc29BdUFCSWhkcklnbEJJRTRFUUNBUktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUlJQXNvQXRnQklnWkZEUUVnQ0NBR2RDQVJMUUFFUVFnZ0JtdDJjaUVJREFFTElBbEJBVWdFUUVFQUlRZ01BUXNnRVMwQUFDQUxLQUxZQVNJblFSaHFJZ1owSVFnZ0NTQW5ha0VJYXlJUFFRRklEUUFEUUNBUkxRQUJJQVpCQ0dzaUJuUWdDSEloQ0NBUFFRaEtJU2NnRVVFQmFpRVJJQTlCQ0dzaER5QW5EUUFMQ3lBTElBNGdGMm9pQmpZQzRBRWdDeUFHUVFkeE5nTFlBU0FHSUJ4TERRVWdDeUFMS0FMUUFTQUdRUU4yYWpZQzFBRWdDQ0FNUVFGcWRrRi9SZzBGSUF0QjBBRnFJQXRCeUFGcUVBSU5CUUpBSUFBb0FwUUtRUVZIQkVBZ0N5Z0N5QUVoRVF3QkN5QUtRUUVnQ3lnQ3lBRWlFU0FBS0FLZ0NrWWJJUW9MSUFBZ0VUWUNvQW9MQWtBQ1FBSkFJQWNvQWhBT0FnQUJBZ3NnQ3lBTEtBSVlOZ0xnQVNBTElBc3BBd2czQTlBQklBc2dHQ2tEQURjRDJBRWdDMEhRQVdvZ0MwSHNBV29RQWcwR0lBdEIwQUZxSUF0QjdBRnFFQUlOQmlBTFFkQUJhaUFMUWV3QmFoQUNEUVpCSHlBSEtBSU1aeUlNYXlFY0lBc29BdFFCSVJFQ1FDQUxLQUxjQVVFRGRDSU9JQXNvQXVBQkloZHJJZ2xCSUU0RVFDQVJLQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVJSUFzb0F0Z0JJZ1pGRFFFZ0NDQUdkQ0FSTFFBRVFRZ2dCbXQyY2lFSURBRUxJQWxCQVVnRVFFRUFJUWdNQVFzZ0VTMEFBQ0FMS0FMWUFTSW5RUmhxSWdaMElRZ2dDU0FuYWtFSWF5SVBRUUZJRFFBRFFDQVJMUUFCSUFaQkNHc2lCblFnQ0hJaENDQVBRUWhLSVNjZ0VVRUJhaUVSSUE5QkNHc2hEeUFuRFFBTEN5QUxJQmNnSEdvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBNUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFpSVJOZ0xVQVNBSUlBeEJBV3AyUVg5R0RRWWdGRVVFUUNBTFFkQUJhaUFMUWV3QmFoQUNEUWNnQ3lnQzFBRWhFU0FMS0FMY0FVRURkQ0VPSUFzb0F1QUJJUVlMUVI4Z0J5Z0NGR2NpREdzaEhBSkFJQTRnQm1zaUNVRWdUZ1JBSUJFb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRZ2dDeWdDMkFFaUNVVU5BU0FJSUFsMElCRXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFSTFFBQUlBc29BdGdCSWc5QkdHb2lKM1FoQ0NBSklBOXFRUWhySWc5QkFVZ05BQU5BSUJFdEFBRWdKMEVJYXlJbmRDQUljaUVJSUE5QkNFb2hDU0FSUVFGcUlSRWdEMEVJYXlFUElBa05BQXNMSUFZZ0hHb2dEa3NOQmlBSUlBeEJBV3AySWdaQmYwWU5CaUFHSUFBb0FxUUtSd1JBSUFBZ0JqWUNwQXBCQVNFS0N5QU5LQUlJUlEwQklBc2dDeWdDR0RZQzRBRWdDeUFMS1FNSU53UFFBU0FMSUJncEF3QTNBOWdCSUF0QjBBRnFJQXRCekFGcUVBSU5CaUFMUWRBQmFpQUxRY3dCYWhBQ0RRWWdDMEhRQVdvZ0MwSE1BV29RQWcwR1FSOGdCeWdDREdjaUoyc2hDQ0FMS0FMVUFTRU5Ba0FnQ3lnQzNBRkJBM1FpRHlBTEtBTGdBU0lPYXlJR1FTQk9CRUFnRFNnQUFDSUdRUmgwSUFaQkNIUkJnSUQ4QjNGeUlBWkJDSFpCZ1A0RGNTQUdRUmgyY25JaERDQUxLQUxZQVNJR1JRMEJJQXdnQm5RZ0RTMEFCRUVJSUFacmRuSWhEQXdCQ3lBR1FRRklCRUJCQUNFTURBRUxJQTB0QUFBZ0N5Z0MyQUVpQ1VFWWFpSVlkQ0VNSUFZZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnRFMwQUFTQVlRUWhySWhoMElBeHlJUXdnQ1VFSVNpRUdJQTFCQVdvaERTQUpRUWhySVFrZ0JnMEFDd3NnQ3lBSUlBNXFJaGcyQXVBQklBc2dHRUVIY1RZQzJBRWdEeUFZU1EwR0lBc2dDeWdDMEFFZ0dFRURkbW9pRFRZQzFBRWdEQ0FuUVFGcWRrRi9SZzBHSUJSRkJFQWdDMEhRQVdvZ0MwSE1BV29RQWcwSElBc29BdHdCUVFOMElROGdDeWdDNEFFaEdDQUxLQUxVQVNFTkMwRWZJQWNvQWhSbklnZHJJUWdDUUNBUElCaHJJZ1pCSUU0RVFDQU5LQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVNSUFzb0F0Z0JJZ1pGRFFFZ0RDQUdkQ0FOTFFBRVFRZ2dCbXQyY2lFTURBRUxJQVpCQVVnRVFFRUFJUXdNQVFzZ0RTMEFBQ0FMS0FMWUFTSUpRUmhxSWc1MElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQU5MUUFCSUE1QkNHc2lEblFnREhJaERDQUpRUWhLSVFZZ0RVRUJhaUVOSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnR0dvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBOUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFqWUMxQUVnRENBSFFRRnFka0YvUmcwR0lBdEJBRFlDN0FFZ0MwSFFBV29nQzBIc0FXb1FBaUVHQWtBZ0N5Z0M3QUVpQjBGL1JnUkFRWUNBZ0lCNElRa2dCa1VOQ0F3QkN5QUdEUWNnQjBFQmFrRUJkaUlHUVFBZ0Jtc2dCMEVCY1JzaENRc2dBQ2dDcUFvZ0NVWU5BU0FBSUFrMkFxZ0tRUUVoQ2d3QkN5QUhLQUlZRFFBZ0RTZ0NDQ0VPSUFzZ0N5Z0NHRFlDNEFFZ0N5QVlLUU1BTndQWUFTQUxJQXNwQXdnM0E5QUJJQXRCMEFGcUlBdEJ6QUZxRUFJTkJTQUxRZEFCYWlBTFFjd0JhaEFDRFFVZ0MwSFFBV29nQzBITUFXb1FBZzBGUVI4Z0J5Z0NER2NpQjJzaEVTQUxLQUxVQVNFSkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSW5heUlHUVNCT0JFQWdDU2dBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloR0NBTEtBTFlBU0lHUlEwQklCZ2dCblFnQ1MwQUJFRUlJQVpyZG5JaEdBd0JDeUFHUVFGSUJFQkJBQ0VZREFFTElBa3RBQUFnQ3lnQzJBRWlERUVZYWlJSWRDRVlJQVlnREdwQkNHc2lERUVCU0EwQUEwQWdDUzBBQVNBSVFRaHJJZ2gwSUJoeUlSZ2dERUVJU2lFR0lBbEJBV29oQ1NBTVFRaHJJUXdnQmcwQUN3c2dDeUFSSUNkcUlnWTJBdUFCSUFzZ0JrRUhjVFlDMkFFZ0JpQVBTdzBGSUFzZ0N5Z0MwQUVnQmtFRGRtbzJBdFFCSUJnZ0IwRUJhblpCZjBZTkJTQVVSUVJBSUF0QjBBRnFJQXRCekFGcUVBSU5CZ3NnQzBFQU5nTHNBU0FMUWRBQmFpQUxRZXdCYWhBQ0lRWUNRQ0FMS0FMc0FTSUhRWDlHQkVCQmdJQ0FnSGdoRENBR1JRMEhEQUVMSUFZTkJpQUhRUUZxUVFGMklnWkJBQ0FHYXlBSFFRRnhHeUVNQ3dKQUlBNUZCRUFnWUNFSkRBRUxJQXRCQURZQzdBRWdDMEhRQVdvZ0MwSHNBV29RQWlFWUlBc29BdXdCSWdaQmYwWUVRRUdBZ0lDQWVDRUpJQmhGRFFjTUFRc2dHQTBHSUFaQkFXcEJBWFlpR0VFQUlCaHJJQVpCQVhFYklRa0xJQXdnQUNnQ3JBcEhCRUFnQUNBTU5nS3NDa0VCSVFvTEFrQWdEU2dDQ0VVTkFDQUFLQUt3Q2lBSlJnMEFJQUFnQ1RZQ3NBcEJBU0VLQ3lBSklXQUxJQUFnR3EwZ0VxMUNJSWFFTndLVUNnd0RDMEVCSVFvTUFnc2dCa1VOQVNBR1FmRC9BMGNOQWd0QkJDRU1RUUFoQ2d3Q0N3SkFJQW9FUUFKQUlBQW9BcUFKUlEwQUlBQW9BaEJGRFFCQkFDRUtJQUFvQXJRYUJFQkJBeUVNREFVTEFrQWdBQ2dDcEFsRkJFQWdBQ0FBS0FMRUNTSUhJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tJQUFvQXV3SklnaEZCRUJCQUNFSkRBSUxJQWhCQTNFaENrRUFJUWxCQUNFR0FrQWdDRUVCYTBFRFNRMEFJQWhCZkhFaERRTkFJQUFvQXNnSklBWkJBblJxSUFjZ0JrRW9iR28yQWdBZ0FDZ0N5QWtnQmtFQmNpSUhRUUowYWlBQUtBTEVDU0FIUVNoc2FqWUNBQ0FBS0FMSUNTQUdRUUp5SWdkQkFuUnFJQUFvQXNRSklBZEJLR3hxTmdJQUlBQW9Bc2dKSUFaQkEzSWlCMEVDZEdvZ0FDZ0N4QWtnQjBFb2JHbzJBZ0FnQmtFRWFpRUdJQTFCQkdzaURVVU5BU0E0S0FJQUlRY01BQXNBQ3lBS1JRMEJBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3dCQ3lBQUtBTGNDaUVKQzBFQUlRZEJBQ0VNUVFBaERRSkFBa0FDUUNBSkRnWUJBQUFBQUFFQUN5QUFLQUs0R2cwQURBRUxJQUJCeUFscUtBSUFJUWdEUUFKL1FRQWdDQ0FIUVFKMGFpZ0NBQ0lHUlEwQUdrRUFJQVlvQWhSQkFra05BQm9nQmlnQ0FBc2hEQ0FIUVE1TERRRWdCMEVCYWlFSElBeEZEUUFMQ3lBcktBSUlJUkVnS3lnQ0JDRU9Ba0FDUUFKQUlBQW9BcGdKSWdoRkJFQkJBQ0VHUVFBaEJ3d0JDeUFBS0FLOENTRUtRUUFoQjBFQUlRWURRQ0FLSUFkQjJBRnNhaWdDeEFFTkFVRUFJQVpCQVdvaUJpQUdJQTVHSWhJYklRWWdEU0FTYWlFTklBZEJBV29pQnlBSVJ3MEFDd3dCQ3lBSElBaEdEUUFnQUNnQ3ZBa2dEU0FPYkVIWUFXeHFJUWdnQmdSQUlBWWhCd05BSUFnZ0IwRUJheUlIUWRnQmJHb2lDaUFySUEwZ0J5QUpJQXdRRFNBS1FRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWNOQUFzTElBNGdCa0VCYWlJSFN3UkFBMEFnQ0NBSFFkZ0JiR29pQmlnQ3hBRkZCRUFnQmlBcklBMGdCeUFKSUF3UURTQUdRUUUyQXNRQklBQWdBQ2dDdEFsQkFXbzJBclFKQ3lBSFFRRnFJZ2NnRGtjTkFBc0xJQTBFUUNBT1JRMENJQTFCQW1zaENrRUFJUkpCQUNBT2F5RVVJQTFCQVdzaUR5QU9iRUhZQVd3aEV3TkFJQUFvQXJ3SklCTnFJQkpCMkFGc2FpSUdJQ3NnRHlBU0lBa2dEQkFOSUFaQkFUWUN4QUVnQUNBQUtBSzBDVUVCYWpZQ3RBa0NRQ0FQUlEwQUlBWWdGRUhZQVd3aUdtb2lDQ0FySUFvZ0VpQUpJQXdRRFNBS0lRY0RRQ0FHSUJwcVFRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWRGRFFFZ0NDSUdJQnBxSWdnZ0t5QUhRUUZySWdjZ0VpQUpJQXdRRFF3QUN3QUxJQkpCQVdvaUVpQU9SdzBBQ3dzZ0RVRUJhaUlHSUJGUERRRWdEa1VOQVFOQUlBQW9BcndKSUFZZ0RteEIyQUZzYWlFS1FRQWhCd05BSUFvZ0IwSFlBV3hxSWdnb0FzUUJSUVJBSUFnZ0t5QUdJQWNnQ1NBTUVBMGdDRUVCTmdMRUFTQUFJQUFvQXJRSlFRRnFOZ0swQ1FzZ0IwRUJhaUlISUE1SERRQUxJQVpCQVdvaUJpQVJSdzBBQ3d3QkN3SkFBa0FDUUFKQUFrQWdDVUVDYXc0R0FBRUJBUUVBQVFzZ0FDZ0N1QnBGRFFFTElBd05BUXNnS3lnQ0FFR0FBU0FPSUJGc1FZQURiQkFER2d3QkN5QXJLQUlBSUF3Z0RpQVJiRUdBQTJ3UUJ4b0xJQUFnQUNnQ21Ba2lDVFlDdEFrZ0NVVU5BQ0FKUVFkeElRWWdBQ2dDdkFraENFRUFJUWNnQ1VFQmEwRUhUd1JBSUFsQmVIRWhEQU5BSUFnZ0IwSFlBV3hxUVFFMkFnZ2dDQ0FIUVFGeVFkZ0JiR3BCQVRZQ0NDQUlJQWRCQW5KQjJBRnNha0VCTmdJSUlBZ2dCMEVEY2tIWUFXeHFRUUUyQWdnZ0NDQUhRUVJ5UWRnQmJHcEJBVFlDQ0NBSUlBZEJCWEpCMkFGc2FrRUJOZ0lJSUFnZ0IwRUdja0hZQVd4cVFRRTJBZ2dnQ0NBSFFRZHlRZGdCYkdwQkFUWUNDQ0FIUVFocUlRY2dERUVJYXlJTURRQUxDeUFHUlEwQUEwQWdDQ0FIUWRnQmJHcEJBVFlDQ0NBSFFRRnFJUWNnQmtFQmF5SUdEUUFMQ3lBQVFRRTJBcEFhUVFBaEJrRUFJVElNQWdzZ0FFRUFOZ0tjQ1NBQVFRQTJBcVFKQzBFQUlRcEJBQ0VNQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJNT0NBSUxDd3NDQ3dBQkN3c2dDMEhvQUdwQkFFSGNBQkFER2lBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWdnZ0N5Z0NHQ0lKYXlJS1FTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdwRkRRRWdCeUFLZENBR0xRQUVRUWdnQ210MmNpRUhEQUVMSUFwQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ3hCR0dvaURYUWhCeUFLSUF4cVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaERDQUdRUUZxSVFZZ0NrRUlheUVLSUF3TkFBc0xJQXNnQ1VFSGNTSU1OZ0lRSUFzZ0NVRUlhaUlHTmdJWUlBWWdDRXNOQnlBTElBZEJHSFkyQW1nZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0NVRUphaUlHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3lBTElBbEJDbW9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3dKQUlBZ2dCbXNpQmtFQmEwRWVTdzBBSUFZZ0IycEJDR3NpQmtFQlNBMEFBMEFnQmtFSVNpRUhJQVpCQ0dzaEJpQUhEUUFMQ3lBTElBbEJDMm9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTERRY2dDeUFPSUFaQkEzWnFOZ0lNQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSGFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0REWUNFQ0FMSUFsQkVHb2lCellDR0NBSElBaExEUWNnQ3lBT0lBZEJBM1pxSWdZMkFnd0NRQ0FJSUFkcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lSSWdCa0VCYWlFR0lBcEJDR3NoQ2lBU0RRQUxDeUFMSUF3MkFoQWdDeUFKUVJocUlnWTJBaGdnQmlBSVN3MEhJQXNnQjBFWWRqWUNiQ0FMSUE0Z0JrRURkbW8yQWd3Z0MwRUlhaUJkRUFJTkJ5QUxLQUp3UVI5TERRY2dDMEVJYWlBTFFld0JhaEFDRFFjZ0N5Z0M3QUVpQmtFTVN3MEhJQXRCQVNBR1FRUnFkRFlDZENBTFFRaHFJQXRCN0FGcUVBSU5CeUFMS0FMc0FTSUdRUUpMRFFjZ0N5QUdOZ0o0QWtBQ1FBSkFJQVlPQWdBQkFnc2dDMEVJYWlBTFFld0JhaEFDRFFrZ0N5Z0M3QUVpQmtFTVN3MEpJQXRCQVNBR1FRUnFkRFlDZkF3QkN5QUxLQUlNSVFZQ1FDQUxLQUlVUVFOMElna2dDeWdDR0NJTWF5SUlRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFMS0FJUUlnaEZEUUVnQnlBSWRDQUdMUUFFUVFnZ0NHdDJjaUVIREFFTElBaEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUxLQUlRSWdwQkdHb2lEWFFoQnlBSUlBcHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdEVUVJYXlJTmRDQUhjaUVISUFwQkNFb2hDQ0FHUVFGcUlRWWdDa0VJYXlFS0lBZ05BQXNMSUFzZ0RFRUJhaUlHTmdJWUlBc2dCa0VIY1RZQ0VDQUdJQWxMRFFnZ0N5QUhRUjkyTmdLQUFTQUxJQXNvQWdnZ0JrRURkbW8yQWd3Z0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCaUFMQW44Z0N5Z0MwQUVpQjBGL1JnUkFRWUNBZ0lCNElBWU5BUm9NQ2dzZ0JnMEpJQWRCQVdwQkFYWWlCa0VBSUFacklBZEJBWEViQ3pZQ2hBRWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQmlBTEFuOGdDeWdDMEFFaUIwRi9SZ1JBUVlDQWdJQjRJQVlOQVJvTUNnc2dCZzBKSUFkQkFXcEJBWFlpQmtFQUlBWnJJQWRCQVhFYkN6WUNpQUVnQzBFSWFpQmNFQUlOQ0NBTEtBS01BU0lHUWY4QlN3MElJQVlFUUNBTElBWkJBblFRQ0NJSE5nS1FBU0FIUlEwSlFRQWhCZ05BSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRZ2dCeUFHUVFKMGFnSi9JQXNvQXRBQklnZEJmMFlFUUVHQWdJQ0FlQ0FJRFFFYURBd0xJQWdOQ3lBSFFRRnFRUUYySWdoQkFDQUlheUFIUVFGeEd3czJBZ0FnQmtFQmFpSUdJQXNvQW93QlR3MENJQXNvQXBBQklRY01BQXNBQ3lBTFFRQTJBcEFCQ3lBTFFRaHFJRnNRQWcwSElBc29BcFFCUVJCTERRY2dDeWdDRENFR0FrQWdDeWdDRkVFRGRDSUpJQXNvQWhnaURHc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJS1FSaHFJZzEwSVFjZ0NDQUtha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBeEJBV29pQmpZQ0dDQUxJQVpCQjNFMkFoQWdCaUFKU3cwSElBc2dCMEVmZGpZQ21BRWdDeUFMS0FJSUlBWkJBM1pxTmdJTUlBdEJDR29nQzBIc0FXb1FBZzBISUFzZ0N5Z0M3QUZCQVdvMkFwd0JJQXRCQ0dvZ0MwSHNBV29RQWcwSElBc2dDeWdDN0FGQkFXb2lHRFlDb0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0VpQ1RZQ0VDQUdJQWhMRFFjZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0IwRi9TZzBIQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSmFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0RFRUNhaUlITmdJWUlBc2dCMEVIY1NJSk5nSVFJQWNnQ0VzTkJ5QUxJQTRnQjBFRGRtb2lCallDREFKQUlBZ2dCMnNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUFoTERRY2dDeUFIUVI5Mk5nS2tBU0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUhRUUJPQkVBZ0N5Z0NuQUVoRFF3QkN5QUxRUWhxSUZvUUFnMElJQXRCQ0dvZ1dSQUNEUWdnQzBFSWFpQllFQUlOQ0NBTFFRaHFJRmNRQWcwSUlBc29BcWdCSUFzb0Fxd0JRWDl6SUFzb0Fwd0JJZzFCQTNScVNnMElJQXNvQXJBQklBc29BclFCUVg5eklBc29BcUFCSWhoQkEzUnFTZzBJQzBIakFDRUtRWUNrQ1NFSFFmLy8vLzhISVFZQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ3lnQ2JFRUthdzRxQ2dBQkFRc0xDd3NMQ3dFQ0F3c0xDd3NMQ3dzREJBVUxDd3NMQ3dzTEJnWUhDd3NMQ3dzTEN3Z0pDd3RCakFNaENrR0FqQlVoQnd3SkMwR01BeUVLUVlEWU55RUhEQWdMUVpnR0lRcEJnTER2QUNFSERBY0xRZFFNSVFwQmdPeTlBU0VIREFZTFFaQWNJUXBCZ1BDbEF5RUhEQVVMUVlBb0lRcEJnSURnQXlFSERBUUxRWURBQUNFS1FZQ0FnQVloQnd3REMwR0F4QUFoQ2tHQWdMQUdJUWNNQWd0QndLd0JJUXBCZ01DYkZDRUhEQUVMUVlDZ0FpRUtRWUNBNENFaEJ3c2dDaUFOSUJoc0lnaEpEUUFnQnlBSVFZQURiRzRpQmtFUUlBWkJFRWtiSVFZTElBc2dDeWdDbEFFaUJ5QUhJQVlnQmlBSFNSc2dCa0gvLy8vL0IwWWJJZ1kyQXV3QklBc2dCallDd0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSklBc29BaGdpREdzaUNFRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSVJRMEJJQWNnQ0hRZ0JpMEFCRUVJSUFocmRuSWhCd3dCQ3lBSVFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ0NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQUpTdzBISUFzZ0IwRWZkallDdUFFZ0N5QUxLQUlJSUFaQkEzWnFOZ0lNQWtBZ0IwRi9TZzBBSUF0QnVBY1FDQ0lHTmdLOEFTQUdSUTBJSUFaQkFFRzRCeEFESVFnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJU0lBc29BaGdpRVdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUJGQkFXb2lEVFlDR0NBTElBMUJCM0VpRERZQ0VDQU5JQkpMRFFnZ0N5QUxLQUlJSWc0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFnQUNRQ0FIUVg5S0RRQUNRQ0FTSUExcklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ1NBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF3MkFoQWdDeUFSUVFscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVZZGlJSE5nSUVJQWRCL3dGSERRQUNRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkIzRWlDVFlDRUNBTElCRkJHV29pRERZQ0dDQU1JQkpMRFFrZ0N5QU9JQXhCQTNacUlnWTJBZ3dnQ0NBSFFSQjJOZ0lJQWtBZ0VpQU1heUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUWR4SWd3MkFoQWdDeUFSUVNscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVRZGpZQ0RBc0NRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkFXb2lDVFlDR0NBTElBbEJCM0VpQ2pZQ0VDQUpJQkpMRFFnZ0N5QU9JQWxCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0lRSUFkQmYwd0VRQUpBSUJJZ0NXc2lERUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ2tVTkFTQUhJQXAwSUFZdEFBUkJDQ0FLYTNaeUlRY01BUXNnREVFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFwQkdISWlDWFFoQnlBS0lBeHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hEQ0FHUVFGcUlRWWdDa0VJYXlFS0lBd05BQXNMSUFzZ0RVRUNhaUlKTmdJWUlBc2dDVUVIY1NJS05nSVFJQWtnRWtzTkNTQUxJQTRnQ1VFRGRtb2lCallDRENBSUlBZEJIM1kyQWhRTEFrQWdFaUFKYXlJTVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUtSUTBCSUFjZ0NuUWdCaTBBQkVFSUlBcHJkbkloQnd3QkN5QU1RUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDa0VZY2lJTmRDRUhJQW9nREdwQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFTUlBWkJBV29oQmlBS1FRaHJJUW9nREEwQUN3c2dDeUFKUVFGcUlnMDJBaGdnQ3lBTlFRZHhJZ28yQWhBZ0RTQVNTdzBJSUFzZ0RpQU5RUU4yYWlJR05nSU1JQWdnQjBFZmRqWUNHQ0FJQW44Q1FDQUhRWDlNQkVBQ1FDQVNJQTFySWd4QklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElBeEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFNYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQkdvaUREWUNHQ0FMSUF4QkIzRWlDallDRUNBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVIxMk5nSWNBa0FnRWlBTWF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBSlFRVnFJZ3cyQWhnZ0N5QU1RUWR4SWdvMkFoQWdEQ0FTU3cwTElBc2dEaUFNUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDSUFKQUlCSWdER3NpREVFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NrVU5BU0FISUFwMElBWXRBQVJCQ0NBS2EzWnlJUWNNQVFzZ0RFRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBcEJHSElpRFhRaEJ5QUtJQXhxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oRENBR1FRRnFJUVlnQ2tFSWF5RUtJQXdOQUFzTElBc2dDVUVHYWlJTk5nSVlJQXNnRFVFSGNTSUtOZ0lRSUEwZ0Vrc05DeUFMSUE0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFpUWdCMEYvU2cwQkFrQWdFaUFOYXlJSFFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaERTQUtSUTBCSUEwZ0NuUWdCaTBBQkVFSUlBcHJkbkloRFF3QkN5QUhRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdDa0VZY2lJTWRDRU5JQWNnQ21wQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBTVFRaHJJZ3gwSUExeUlRMGdCMEVJU2lFUklBWkJBV29oQmlBSFFRaHJJUWNnRVEwQUN3c2dDeUFLTmdJUUlBc2dDVUVPYWlJTU5nSVlJQXdnRWtzTkN5QUxJQTRnREVFRGRtb2lCallDRENBSUlBMUJHSFkyQWlnQ1FDQVNJQXhySWhGQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElCRkJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFSYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVJFZ0JrRUJhaUVHSUFwQkNHc2hDaUFSRFFBTEN5QUxJQXhCQjNFaUNqWUNFQ0FMSUFsQkZtb2lERFlDR0NBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVJoMk5nSXNBa0FnRWlBTWF5SVJRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFSUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0VXcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRVJJQVpCQVdvaEJpQUtRUWhySVFvZ0VRMEFDd3NnQ3lBTVFRZHhJZ28yQWhBZ0N5QUpRUjVxSWcwMkFoZ2dEU0FTU3cwTElBc2dEaUFOUVFOMmFpSUdOZ0lNSUFkQkdIWU1BZ3NnQ0VFRk5nSWNDeUFJUW9LQWdJQWdOd01vUVFJTE5nSXdBa0FnRWlBTmF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSUpkQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBTlFRRnFJZzAyQWhnZ0N5QU5RUWR4TmdJUUlBMGdFa3NOQ0NBTElBNGdEVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBalFnQjBGL1RBUkFJQXRCQ0dvZ0NFRTRhaEFDRFFrZ0NDZ0NPRUVGU3cwSklBdEJDR29nQ0VFOGFoQUNEUWtnQ0NnQ1BFRUZTdzBKSUFzb0FoUkJBM1FoRWlBTEtBSVlJUTBnQ3lnQ0RDRUdDd0pBSUJJZ0RXc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUpSUTBCSUFjZ0NYUWdCaTBBQkVFSUlBbHJkbkloQnd3QkN5QUtRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJTVFSaHFJZ2wwSVFjZ0NpQU1ha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQWxCQ0dzaUNYUWdCM0loQnlBS1FRaEtJUXdnQmtFQmFpRUdJQXBCQ0dzaENpQU1EUUFMQ3lBTElBMUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUdEWUNFQ0FKSUJKTERRZ2dDeUFMS0FJSUlnNGdDVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBa0FnQjBGL1RBUkFBa0FnRWlBSmF5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFZUlEwQklBY2dHSFFnQmkwQUJFRUlJQmhyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnR0VFWWNpSUpkQ0VISUFvZ0dHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBWU5nSVFJQXNnRFVFaGFpSU1OZ0lZSUF3Z0Vrc05DU0FMSUE0Z0RFRURkbW9pQmpZQ0RDQUhSUTBKSUFnZ0J6WUNSQUpBSUJJZ0RHc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnR0VVTkFTQUhJQmgwSUFZdEFBUkJDQ0FZYTNaeUlRY01BUXNnQ2tFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUJoQkdISWlDWFFoQnlBS0lCaHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hFU0FHUVFGcUlRWWdDa0VJYXlFS0lCRU5BQXNMSUFzZ0RFRUhjU0lLTmdJUUlBc2dEVUhCQUdvaUNUWUNHQ0FKSUJKTERRa2dDeUFPSUFsQkEzWnFJZ1kyQWd3Z0IwVU5DU0FJSUFjMkFrZ0NRQ0FTSUFscklneEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXBGRFFFZ0J5QUtkQ0FHTFFBRVFRZ2dDbXQyY2lFSERBRUxJQXhCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FLUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQndnQnFJZ2syQWhnZ0N5QUpRUWR4SWhnMkFoQWdDU0FTU3cwSklBc2dEaUFKUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDVEFzQ1FDQVNJQWxySWdwQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElCaEZEUUVnQnlBWWRDQUdMUUFFUVFnZ0dHdDJjaUVIREFFTElBcEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQVlRUmh5SWcxMElRY2dDaUFZYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQVdvaUREWUNHQ0FMSUF4QkIzRTJBaEFnRENBU1N3MElJQXNnRGlBTVFRTjJhaUlHTmdJTUlBZ2dCMEVmZGpZQ1VBSkFJQWRCZjB3RVFDQUxRUWhxSUFoQjFBQnFFQjROQ2lBTEtBSVVRUU4wSVJJZ0N5Z0NHQ0VNSUFzb0Fnd2hCZ3dCQ3lBSVFwaUFnSUNBQXpjRDZBTWdDRUtZZ0lDQWdBTTNBK0FESUFoQmdaQ3FpUUUyQXVBQklBaEJnWkNxaVFFMkFtQWdDRUVCTmdKVUN3SkFJQklnREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQVNTdzBJSUFzZ0N5Z0NDQ0FHUVFOMmFqWUNEQ0FJSUFkQkgzWTJBdkFEQWtBZ0IwRi9UQVJBSUF0QkNHb2dDRUgwQTJvUUhrVU5BUXdLQ3lBSVFwaUFnSUNBQXpjRGlBY2dDRUtZZ0lDQWdBTTNBNEFISUFoQmdiaTQ4Z0EyQW9BRklBaEJnYmk0OGdBMkFvQUVJQWhCQVRZQzlBTUxBa0FDUUNBSUtBSlFEUUFnQ0NnQzhBTU5BQ0FMS0FJVVFRTjBJUklnQ3lnQ0dDRU1JQXNvQWd3aEJnd0JDeUFMS0FJTUlRWUNRQ0FMS0FJVVFRTjBJaElnQ3lnQ0dDSU1heUlKUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBTEtBSVFJZ2xGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FMS0FJUUlncEJHR29pRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVCYWlJTU5nSVlJQXNnREVFSGNUWUNFQ0FNSUJKTERRa2dDeUFMS0FJSUlBeEJBM1pxSWdZMkFnd2dDQ0FIUVI5Mk5nS1FCd3NDUUNBU0lBeHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUUZxSWdvMkFoZ2dDeUFLUVFkeElnazJBaEFnQ2lBU1N3MElJQXNnQ3lnQ0NDSU9JQXBCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0tVQndKQUlCSWdDbXNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVDYWlJS05nSVlJQXNnQ2tFSGNTSUpOZ0lRSUFvZ0Vrc05DQ0FMSUE0Z0NrRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFwZ0hBa0FnQjBGL1RBUkFBa0FnRWlBS2F5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFKUlEwQklBY2dDWFFnQmkwQUJFRUlJQWxyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ1VFWWNpSU5kQ0VISUFrZ0NtcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRUpJQVpCQVdvaEJpQUtRUWhySVFvZ0NRMEFDd3NnQ3lBTVFRTnFJZ1kyQWhnZ0N5QUdRUWR4TmdJUUlBWWdFa3NOQ2lBTElBNGdCa0VEZG1vMkFnd2dDQ0FIUVI5Mk5nS2NCeUFMUVFocUlBaEJvQWRxRUFJTkNpQUlLQUtnQjBFUVN3MEtJQXRCQ0dvZ0NFR2tCMm9RQWcwS0lBZ29BcVFIUVJCTERRb2dDMEVJYWlBSVFhZ0hhaEFDRFFvZ0NDZ0NxQWRCRUVzTkNpQUxRUWhxSUFoQnJBZHFFQUlOQ2lBSUtBS3NCMEVRU3cwS0lBdEJDR29nQ0VHd0Iyb1FBZzBLSUF0QkNHb2dDRUcwQjJvUUFnMEtEQUVMSUFoQkVEWUN0QWNnQ0VLUWdJQ0FnQUkzQXF3SElBaENnWUNBZ0lBQ053S2tCeUFJUW9HQWdJQWdOd0tjQndzZ0N5Z0N2QUVpQnlnQ21BZEZEUUFnQnlnQ3RBY2lCaUFIS0FLd0Iwa05DQ0FHSUFzb0FwUUJTUTBJSUFZZ0N5Z0N3QUZMRFFnZ0N5QUdRUUVnQmhzMkFzQUJDMEVJSUFzb0FoQWlCbXNoQndKQUlBc29BaFJCQTNRaUNDQUxLQUlZSWdscklncEJBV3RCSGtzTkFDQUdJQXBxUVFocklnWkJBVWdOQUFOQUlBWkJDRW9oQ2lBR1FRaHJJUVlnQ2cwQUN3c2dDeUFISUFscUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUFzb0FnZ2dCa0VEZG1vMkFnd0xBa0FnQUNBTEtBSndJZ1pCQW5ScUlnY29BaFFpQ0VVRVFDQUhRZHdBRUFnaUJqWUNGQ0FHRFFFTUNBc2dBQ2dDQ0NBR1JnUkFBa0FDUUNBTEtBSm9JQUFvQWhBaUJpZ0NBRWNOQUNBTEtBSnNJQVlvQWdSSERRQWdDeWdDZENBR0tBSU1SdzBBSUFzb0FuZ2lDU0FHS0FJUVJ3MEFJQXNvQXBRQklBWW9BaXhIRFFBZ0N5Z0NtQUVnQmlnQ01FY05BQ0FMS0FLY0FTQUdLQUkwUncwQUlBc29BcUFCSUFZb0FqaEhEUUFnQ3lnQ3BBRWlDaUFHS0FJOFJ3MEFJQXNvQXJnQklBWW9BbEJIRFFBQ1FBSkFBa0FnQ1E0Q0FRQUNDeUFMS0FLQUFTQUdLQUlZUncwQ0lBc29Bb1FCSUFZb0FoeEhEUUlnQ3lnQ2lBRWdCaWdDSUVjTkFpQUxLQUtNQVNJSklBWW9BaVJIRFFJZ0NVVU5BU0FHS0FJb0lReEJBQ0VOSUFzb0FwQUJJUTREUUNBT0lBMUJBblFpRW1vb0FnQWdEQ0FTYWlnQ0FFY05BeUFKSUExQkFXb2lEVWNOQUFzTUFRc2dDeWdDZkNBR0tBSVVSdzBCQ3lBS1JRMEJJQXNvQXFnQklBWW9Ba0JIRFFBZ0N5Z0NyQUVnQmlnQ1JFY05BQ0FMS0FLd0FTQUdLQUpJUncwQUlBc29BclFCSUFZb0FreEdEUUVMSUFnb0FpZ1FCQ0FIS0FJVVFRQTJBaWdnQnlnQ0ZDZ0NWQkFFSUFjb0FoUkJBRFlDVkNBQVFRQTJBaEFnQUVHQkFqWUNCQ0FBUWlFM0FnZ01BZ3NnQ3lnQ2tBRVFCRUVBSVFvZ0MwRUFOZ0tRQVNBTEtBSzhBUkFFSUF0QkFEWUN2QUZCQUNFTURBd0xJQWdvQWlnUUJDQUhLQUlVUVFBMkFpZ2dCeWdDRkNnQ1ZCQUVJQWNvQWhSQkFEWUNWQXNnQnlnQ0ZDQUxRZWdBYWtIY0FCQUhHZ3dHQ3lBTFFTQnFJZ1pCQUVISUFCQURHaUFMUVFocUlBWVFBZzBDSUFzb0FpQkIvd0ZMRFFJZ0MwRUlhaUJmRUFJTkFpQUxLQUlrUVI5TERRSWdDeWdDRENFR0FrQWdDeWdDRkVFRGRDSU1JQXNvQWhnaURtc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJSlFSaHFJZzEwSVFjZ0NDQUpha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBNUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUNEWUNFQ0FKSUF4TERRSWdDeUFMS0FJSUloSWdDVUVEZG1vaUJqWUNEQ0FIUVFCSURRSUNRQ0FNSUFscklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWhGRFFFZ0J5QUlkQ0FHTFFBRVFRZ2dDR3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FJUVJoeUlnMTBJUWNnQ0NBSmFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUE1QkFtb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQU1TdzBDSUFzZ0IwRWZkallDS0NBTElCSWdCa0VEZG1vMkFnd2dDMEVJYWlBTFFld0JhaEFDRFFJZ0N5QUxLQUxzQVVFQmFpSUdOZ0lzSUFaQkNFc05BaUFHUVFKSkRRRWdDMEVJYWlCZUVBSU5BaUFMS0FJd0lnWkJCa3NOQWdKQUFrQUNRQUpBSUFZT0J3QUZBUUlDQWdNRkN5QUxJQXNvQWl3aUIwRUNkQkFJSWdnMkFqUWdDRVVOQlVFQUlRWWdCMFVOQkFOQUlBdEJDR29nQzBIc0FXb1FBZzBHSUFnZ0JrRUNkR29nQ3lnQzdBRkJBV28yQWdBZ0JrRUJhaUlHSUFkSERRQUxEQVFMSUFzZ0N5Z0NMQ0lHUVFKMFFRUnJJZ2dRQ0NJSE5nSTRJQXNnQ0JBSUlnZzJBandnQjBVTkJDQUlSUTBFSUFaQkFVWU5BeUFHUVFGcklRbEJBQ0VHQTBBZ0MwRUlhaUFMUWV3QmFoQUNEUVVnQnlBR1FRSjBJZ3BxSUFzb0F1d0JOZ0lBSUF0QkNHb2dDMEhzQVdvUUFnMEZJQWdnQ21vZ0N5Z0M3QUUyQWdBZ0JrRUJhaUlHSUFsSERRQUxEQU1MSUFzb0Fnd2hCZ0pBSUFzb0FoUkJBM1FpQ1NBTEtBSVlJZ3hySWdoQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBc29BaEFpQ0VVTkFTQUhJQWgwSUFZdEFBUkJDQ0FJYTNaeUlRY01BUXNnQ0VFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFzb0FoQWlDa0VZYWlJTmRDRUhJQWdnQ21wQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFSUlBWkJBV29oQmlBS1FRaHJJUW9nQ0EwQUN3c2dDeUFNUVFGcUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NVc05BeUFMSUFkQkgzWTJBa0FnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXRCQ0dvZ0MwSHNBV29RQWcwRElBc2dDeWdDN0FGQkFXbzJBa1FNQWdzZ0MwRUlhaUFMUWV3QmFoQUNEUUlnQ3lBTEtBTHNBU0lPUVFGcUlnWTJBa2dnQ3lBR1FRSjBFQWdpQ0RZQ1RDQUlSUTBDSUFaRkRRRkJJQ0FMS0FJc0loSkJBblJCbkRGcUtBSUFJaEZySVE5QkFDRU1JQXNvQWd3aEJpQUxLQUlJSVJvRFFBSkFJQXNvQWhSQkEzUWlGQ0FMS0FJWUloaHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QVJJQmhxSWdZMkFoZ2dDeUFHUVFkeE5nSVFJQVlnRkVzRVFDQUlJQXhCQW5ScVFYODJBZ0FNQkFzZ0N5QWFJQVpCQTNacUlnWTJBZ3dnQ0NBTVFRSjBhaUFISUE5MklnYzJBZ0FnQnlBU1R3MERJQXdnRGtZaEJ5QU1RUUZxSVF3Z0IwVU5BQXNNQVFzZ0FDZ0NuQWtOQ0NBQVFRRTJBcUFKQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NwQWtOQUNBQVFnQTNBclFKSUFzZ0N5Z0NHRFlDNEFFZ0N5QUxLUU1RTndQWUFTQUxJQXNwQXdnM0E5QUJBa0FnQzBIUUFXb2dDMEhzQVdvUUFnMEFJQXRCMEFGcUlBdEI3QUZxRUFJTkFDQUxRZEFCYWlBTFFld0JhaEFDRFFBZ1BTQUxLQUxzQVNJR0lBWkIvd0ZMR3lFOUMwRUVJUXdnQUNBOVFRSjBhaWdDbEFFaUJrVU5DU0FBSUFZb0FnUWlDRUVDZEdvaUNTZ0NGQ0lIUlEwSklBQW9BZ2doRHdKQUlBWW9BZ3dpRGtFQ1NRMEFJQWNvQWpRaURTQUhLQUk0YkNFSEFrQUNRQUpBQWtBZ0JpZ0NFQ0lSRGdNQkF3QURDeUFPUVFGcklSRWdCaWdDSENFVUlBWW9BaGdoSnd3QkN5QUdLQUlVSVEwRFFDQU5JQXBCQW5ScUtBSUFJQWRMRFEwZ0RpQUtRUUZxSWdwSERRQUxEQUlMQTBBZ0p5QUtRUUowSWc1cUtBSUFJaGdnRGlBVWFpZ0NBQ0lPU3cwTUlBY2dEazBORENBWUlBMXdJQTRnRFhCTERRd2dFU0FLUVFGcUlncEhEUUFMREFFTElCRkJBMnRCQWswRVFDQUdLQUlrSUFkTERRc01BUXNnRVVFR1J3MEFJQVlvQWlnZ0Iwa05DZ3NDUUFKQUlBQW9BZ1FpQjBHQUFrWUVRQ0FBSUFZMkFnd2dBQ0E5TmdJRUlBQWdDRFlDQ0NBQUlBa29BaFFpQmpZQ0VDQUdLQUkwSVFjZ0JpZ0NPQ0VHSUFCQkFUWUN0Qm9nQUNBR05nTEFDaUFBSUFjMkFyd0tJQUFnQmlBSGJEWUNtQWtNQVFzZ0FDZ0N0Qm9FUUNBQVFRQTJBclFhSUFBb0Fyd0pFQVFnQUVFQU5nSzhDU0FBS0FLVUNSQUVJQUFnQUNnQ21Ba2lEa0hZQVd3aUJ4QUlJZ1kyQXJ3SklBQWdEa0VDZEJBSUlnZzJBcFFKUVFVaERDQUdSUTBNSUFoRkRRd2dCa0VBSUFjUUF5RVJJQUFvQWhBaENpQU9CRUJCQVNBS0tBSTBJZ2hySVJRZ0NFRUJheUVZUVFBZ0NHc2hFeUFSUWRnQmF5RWNJQkVnQ0VGL2MwSFlBV3hxSVJkQkFDRUhRUUFoRFVFQUlRa0RRQ0FSSUFsQjJBRnNJZ3BxSWdZZ0NpQWNha0VBSUFjYk5nTElBU0FHQW44Z0RVVUVRQ0FHUWdBM0Fzd0JRUUFNQVFzZ0JpQUdJQk5CMkFGc2FqWUN6QUVnQmlBR0lCUkIyQUZzYWtFQUlBY2dHRWtiTmdMUUFTQUtJQmRxUVFBZ0J4c0xOZ0xVQVVFQUlBZEJBV29pQmlBR0lBaEdJZ1liSVFjZ0JpQU5haUVOSUFsQkFXb2lDU0FPUncwQUN5QUFLQUlRSVFvTFFRRWhHRUVBSVFjQ2YwRUFJQUFvQXNBSkRRQWFRUUFnQ2lnQ0VFRUNSZzBBR2dKQUlBb29BbEJGRFFBZ0NpZ0NWQ0lHS0FLWUIwVU5BRUVBSUFZb0FyQUhSUTBCR2d0QkFDRVlRUUVMSVFrZ0NpZ0NOQ0VuSUFvb0FqZ2hEaUFLS0FJTUlRMGdDaWdDTENFSUlBb29BbGdoRVFKQUlEZ29BZ0FpQmtVTkFFRUFJUW9nQmlFSElBQW9BdUFKUVg5R0RRQURRQ0FISUFwQktHd2lCbW9vQWdRUUJDQUFLQUxFQ1NJSElBWnFRUUEyQWdRZ0NrRUJhaUlLSUFBb0F1QUpRUUZxU1EwQUN3c2dCeEFFSUFCQkFEWUN4QWtnQUNnQ3lBa1FCQ0FBUVFBMkFzZ0pJQUFvQXRBSkVBUWdBRUgvL3dNMkF1Z0pJQUJCQURZQzBBa2dBQ0FZTmdMOENTQUFJQTAyQXVRSklBQWdFU0FJUVFFZ0NFRUJTeHNpQnlBSkd5SUdOZ0xnQ1NBQUlBYzJBdHdKSUFCQkFEWUM5QWtnQUVJQU53THNDU0FBUWFnRkVBZ2lCellDeEFrZ0IwVU5ERUVBSVFvZ0IwRUFRYWdGRUFNaENDQUdRWDlIQkVBZ0RpQW5iRUdBQTJ4QkwzSWhDUU5BSUFnZ0NrRW9iR29pRGlBSkVBZ2lCellDQkNBSFJRME9JQTRnQjBFQUlBZHJRUWh4YWpZQ0FDQUdJQXBISVFjZ0NrRUJhaUVLSUFjTkFBc0xJQUJCeEFBUUNDSUhOZ0xJQ1NBQUlBWkJCSFJCRUdvUUNDSUdOZ0xRQ1NBR1JRME1JQWRGRFF3Z0IwRUFRY1FBRUFNYUlBQkNBRGNDMUFrZ0FDZ0NDQ0VJREFFTElBY2dQVVlOQXlBSUlBOUdEUUVnR2tFRlJ3MExJQUFnQmpZQ0RDQUFJRDAyQWdRZ0FDQUlOZ0lJSUFBZ0NTZ0NGQ0lHTmdJUUlBWW9BalFoQnlBR0tBSTRJUVlnQUVFQk5nSzBHaUFBSUFZMkFzQUtJQUFnQnpZQ3ZBb2dBQ0FHSUFkc05nS1lDUXNnQ0NBUFJnMEJRUUFoQ2lBQUtBSUFJZ1pCSDAwRVFDQUFJQVpCQW5ScUtBSVVJUW9MSUFBb0FoQWhCeUFBUVFFMkFwQWFJQnBCQlVjTkJ5QUFLQUlNSVFnZ0N5QUxLQUlZTmdMZ0FTQUxJQXNwQXhBM0E5Z0JJQXNnQ3lrRENEY0QwQUZCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlFUUVFQklRME1Cd3NnQzBIUUFXb2dDMEhNQVdvUUFnUkFRUUVoRFF3SEN5QUxRZEFCYWlBTFFjd0JhaEFDQkVCQkFTRU5EQWNMUVI4Z0J5Z0NER2NpRG1zaEVTQUxLQUxVQVNFTkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSWFheUlKUVNCT0JFQWdEU2dBQUNJSlFSaDBJQWxCQ0hSQmdJRDhCM0Z5SUFsQkNIWkJnUDREY1NBSlFSaDJjbkloRENBTEtBTFlBU0lKUlEwQklBd2dDWFFnRFMwQUJFRUlJQWxyZG5JaERBd0JDeUFKUVFGSUJFQkJBQ0VNREFFTElBMHRBQUFnQ3lnQzJBRWlGRUVZYWlJU2RDRU1JQWtnRkdwQkNHc2lDVUVCU0EwQUEwQWdEUzBBQVNBU1FRaHJJaEowSUF4eUlRd2dDVUVJU2lFVUlBMUJBV29oRFNBSlFRaHJJUWtnRkEwQUN3c2dDeUFSSUJwcUlnazJBdUFCSUFzZ0NVRUhjVFlDMkFGQkFTRU5JQWtnRDBzTkJpQUxJQXNvQXRBQklBbEJBM1pxTmdMVUFTQU1JQTVCQVdwMlFYOUdEUVlnQzBIUUFXb2dDMEhNQVdvUUFnMEdJQWNvQWhBaUJnMEVRUjhnQnlnQ0ZHY2lEbXNoRVNBTEtBTFVBU0VHQWtBZ0N5Z0MzQUZCQTNRaUR5QUxLQUxnQVNJYWF5SUpRU0JPQkVBZ0JpZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEQ0FMS0FMWUFTSUpSUTBCSUF3Z0NYUWdCaTBBQkVFSUlBbHJkbkloREF3QkN5QUpRUUZJQkVCQkFDRU1EQUVMSUFZdEFBQWdDeWdDMkFFaUZFRVlhaUlTZENFTUlBa2dGR3BCQ0dzaUNVRUJTQTBBQTBBZ0JpMEFBU0FTUVFockloSjBJQXh5SVF3Z0NVRUlTaUVVSUFaQkFXb2hCaUFKUVFocklRa2dGQTBBQ3dzZ0N5QVJJQnBxSWdZMkF1QUJJQXNnQmtFSGNUWUMyQUVnQmlBUFN3UkFRUUVoQmd3SEN5QUxJQXNvQXRBQklBWkJBM1pxTmdMVUFVRUJJUVlnRENBT1FRRnFka0YvUmcwR0lBZ29BZ2hGRFFVZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUWtDUUNBTEtBTHNBVUYvUmdSQUlBbEZEUUVNQlFzZ0NVVU5CQXNNQmdzZ0FDQUdOZ0lNSUFBZ1BUWUNCQXRCQUNFS0lBQW9BclFhUlEwQVFRTWhEQXdSQ3lBQUtBSU1JUWNnQUNnQ0VDRUdJRlZCQUVIY0J4QURJUk1nQmlnQ05DRUlJQVlvQWpnaENTQUxRUWhxSUF0QnpBRnFFQUlORHlBVElBc29Bc3dCSWdvMkFnQWdDaUFJSUFsc0lnMVBEUThnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s0RWdKQUFrQWdDQTRJQUJFQkVSRUFFUUVSQ3lBYVFRVkdEUkFnQmlnQ0xFVU5FQXNnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s4RWlBSUlBY29BZ0JIRFE5Qkh5QUdLQUlNWnlJbmF5RU1JQXNvQWd3aENRSkFJQXNvQWhSQkEzUWlFU0FMS0FJWUlnOXJJZ3BCSUU0RVFDQUpLQUFBSWdoQkdIUWdDRUVJZEVHQWdQd0hjWElnQ0VFSWRrR0EvZ054SUFoQkdIWnljaUVPSUFzb0FoQWlDRVVOQVNBT0lBaDBJQWt0QUFSQkNDQUlhM1p5SVE0TUFRc2dDa0VCU0FSQVFRQWhEZ3dCQ3lBSkxRQUFJQXNvQWhBaUZFRVlhaUlJZENFT0lBb2dGR3BCQ0dzaUdFRUJTQTBBQTBBZ0NTMEFBU0FJUVFocklnaDBJQTV5SVE0Z0dFRUlTaUVLSUFsQkFXb2hDU0FZUVFocklSZ2dDZzBBQ3dzZ0N5QU1JQTlxSWdnMkFoZ2dDeUFJUVFkeE5nSVFJQWdnRVVzTkR5QUxJQXNvQWdnZ0NFRURkbW8yQWd3Z0RpQW5RUUZxZGlJSVFYOUdEUThnR2tFRlJ5SUtRUUVnQ0J0RkRROGdBQ0FJTmdMQUVpQUtSUVJBSUF0QkNHb2dDMEhNQVdvUUFnMFFJQUFnQ3lnQ3pBRWlDRFlDeEJJZ0NFSC8vd05MRFJBTEFrQWdCaWdDRUNJSUJIOGdDQVZCSHlBR0tBSVVaeUlNYXlFUElBc29BZ3doQ1FKQUlBc29BaFJCQTNRaUZDQUxLQUlZSWlkcklnaEJJRTRFUUNBSktBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRU9JQXNvQWhBaUNFVU5BU0FPSUFoMElBa3RBQVJCQ0NBSWEzWnlJUTRNQVFzZ0NFRUJTQVJBUVFBaERnd0JDeUFKTFFBQUlBc29BaEFpR0VFWWFpSVJkQ0VPSUFnZ0dHcEJDR3NpR0VFQlNBMEFBMEFnQ1MwQUFTQVJRUWhySWhGMElBNXlJUTRnR0VFSVNpRUlJQWxCQVdvaENTQVlRUWhySVJnZ0NBMEFDd3NnQ3lBUElDZHFJZ2cyQWhnZ0N5QUlRUWR4TmdJUUlBZ2dGRXNORVNBTElBc29BZ2dnQ0VFRGRtbzJBZ3dnRGlBTVFRRnFkaUlJUVg5R0RSRWdBQ0FJTmdMSUVpQUhLQUlJQkVBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhDQUpBSUFzb0F0QUJJZ2xCZjBZRVFFR0FnSUNBZUNFWUlBaEZEUlFNQVFzZ0NBMFRJQWxCQVdwQkFYWWlDRUVBSUFocklBbEJBWEViSVJnTElBQWdHRFlDekJJTElBcEZCRUFnQUNnQ3lCSWlDQ0FHS0FJVVFRRjJTdzBTSUFoQkFDQUFLQUxNRWlJSlFSOTFJQWx4YTBjTkVnc2dCaWdDRUF0QkFVY05BQ0FHS0FJWURRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQ0FKQUlBc29BdEFCSWdsQmYwWUVRRUdBZ0lDQWVDRVlJQWhGRFJJTUFRc2dDQTBSSUFsQkFXcEJBWFlpQ0VFQUlBaHJJQWxCQVhFYklSZ0xJQUFnR0RZQzBCSWdCeWdDQ0FSQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdDUUNBTEtBTFFBU0lKUVg5R0JFQkJnSUNBZ0hnaEdDQUlSUTBUREFFTElBZ05FaUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3lFWUN5QUFJQmcyQXRRU0N5QUtEUUFnQUNnQzBCSWlDQ0FBS0FMVUVpQUlJQVlvQWlCcWFpSUpJQWdnQ1VnYkRSQUxJQWNvQWtRRVFDQUxRUWhxSUF0QnpBRnFFQUlORUNBQUlBc29Bc3dCSWdnMkF0Z1NJQWhCL3dCTERSQUxBa0FDUUNBQUtBSzRFaUluRGdZQUFRRUJBUUFCQ3lBTEtBSU1JUWtDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lQYXlJSVFTQk9CRUFnQ1NnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERpQUxLQUlRSWdoRkRRRWdEaUFJZENBSkxRQUVRUWdnQ0d0MmNpRU9EQUVMSUFoQkFVZ0VRRUVBSVE0TUFRc2dDUzBBQUNBTEtBSVFJaFJCR0dvaUVYUWhEaUFJSUJScVFRaHJJaGhCQVVnTkFBTkFJQWt0QUFFZ0VVRUlheUlSZENBT2NpRU9JQmhCQ0VvaENDQUpRUUZxSVFrZ0dFRUlheUVZSUFnTkFBc0xJQXNnRDBFQmFpSUlOZ0lZSUFzZ0NFRUhjVFlDRUNBSUlBeExEUkFnQ3lBTEtBSUlJQWhCQTNacU5nSU1JQUFnRGtFZmRqWUMzQklDUUNBT1FYOU1CRUFnQzBFSWFpQUxRY3dCYWhBQ0RSSWdDeWdDekFFaUNFRVBTdzBTSUFoQkFXb2hDU0FBS0FLNEVpRW5EQUVMSUFjb0FqQWlDVUVRU3cwUkN5QUFJQWsyQXVBU0N3SkFBa0FnSnc0R0FBRUJBUUVBQVFzZ0N5Z0NEQ0VKQWtBZ0N5Z0NGRUVEZENJTUlBc29BaGdpRDJzaUNFRWdUZ1JBSUFrb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRNGdDeWdDRUNJSVJRMEJJQTRnQ0hRZ0NTMEFCRUVJSUFocmRuSWhEZ3dCQ3lBSVFRRklCRUJCQUNFT0RBRUxJQWt0QUFBZ0N5Z0NFQ0lVUVJocUloRjBJUTRnQ0NBVWFrRUlheUlZUVFGSURRQURRQ0FKTFFBQklCRkJDR3NpRVhRZ0RuSWhEaUFZUVFoS0lRZ2dDVUVCYWlFSklCaEJDR3NoR0NBSURRQUxDeUFHS0FJTUlSRWdBQ2dDNEJJaEZDQUxJQTlCQVdvaUNEWUNHQ0FMSUFoQkIzRTJBaEFnQ0NBTVN3MFFJQXNnQ3lnQ0NDQUlRUU4yYWpZQ0RDQUFJQTVCSDNZMkF2Z1NJQTVCZjBvTkFFRUFJUWtEUUNBSklCUkxEUkVnQzBFSWFpQUxRZXdCYWhBQ0RSRWdDeWdDN0FFaUNFRURTdzBSSUFBZ0NVRU1iR29pREVIOEVtb2dDRFlDQUNBSVFRRk5CRUFnQzBFSWFpQUxRZEFCYWhBQ0RSSWdDeWdDMEFFaUNDQVJUdzBTSUF4QmdCTnFJQWhCQVdvMkFnQWdDVUVCYWlFSkRBRUxJQWhCQWtZRVFDQUxRUWhxSUF0QjBBRnFFQUlORWlBTVFZUVRhaUFMS0FMUUFUWUNBQ0FKUVFGcUlRa01BUXNMSUFsRkRSQUxBa0FnRWtVTkFDQUxLQUlNSVFnQ1FDQUxLQUlVUVFOMElnOGdDeWdDR0NJbmF5SU1RU0JPQkVBZ0NDZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEaUFMS0FJUUlnbEZEUUVnRGlBSmRDQUlMUUFFUVFnZ0NXdDJjaUVPREFFTElBeEJBVWdFUUVFQUlRNE1BUXNnQ0MwQUFDQUxLQUlRSWhSQkdHb2lFWFFoRGlBSUlRa2dEQ0FVYWtFSWF5SVlRUUZJRFFBRFFDQUpMUUFCSUJGQkNHc2lFWFFnRG5JaERpQVlRUWhLSVF3Z0NVRUJhaUVKSUJoQkNHc2hHQ0FNRFFBTEN5QUdLQUlzSVJRZ0N5QW5RUUZxSWd3MkFoZ2dDeUFNUVFkeElnWTJBaEJCZnlFSklBd2dEMDBFUUNBTElBc29BZ2dnREVFRGRtb2lDRFlDRENBT1FSOTJJUWtMSUFwRkJFQWdDVUYvUmcwUklBQWdDVFlDeUJRQ1FDQVBJQXhySWdwQklFNEVRQ0FJS0FBQUlnbEJHSFFnQ1VFSWRFR0FnUHdIY1hJZ0NVRUlka0dBL2dOeElBbEJHSFp5Y2lFSklBWkZEUUVnQ1NBR2RDQUlMUUFFUVFnZ0JtdDJjaUVKREFFTElBcEJBVWdFUUVFQUlRa01BUXNnQ0MwQUFDQUdRUmh5SWhoMElRa2dCaUFLYWtFSWF5SUtRUUZJRFFBRFFDQUlMUUFCSUJoQkNHc2lHSFFnQ1hJaENTQUtRUWhLSVFZZ0NFRUJhaUVJSUFwQkNHc2hDaUFHRFFBTEN5QUxJQ2RCQW1vaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBUFN3MFJJQXNnQ3lnQ0NDQUdRUU4yYWpZQ0RDQUFJQWxCSDNZMkFzd1VJQlFOQVNBSlFYOU1EUkVNQVFzZ0NVRi9SZzBRSUFBZ0NUWUMwQlFnQ1VVTkFDQVVRUUYwUVFOcUlROUJBQ0VKUVFBaEowRUFJUTVCQUNFSVFRQWhFUU5BSUFrZ0QwWU5FU0FMUVFocUlBdEI3QUZxRUFJTkVTQUxLQUxzQVNJR1FRWkxEUkVnQUNBSlFSUnNhaUlLUWRRVWFpQUdOZ0lBSUFaQmZYRkJBVVlFUUNBTFFRaHFJQXRCMEFGcUVBSU5FaUFLUWRnVWFpQUxLQUxRQVVFQmFqWUNBQXNDUUFKQUFrQUNRQ0FHUVFKckRnVUFBUUlEQVFNTElBdEJDR29nQzBIUUFXb1FBZzBVSUFwQjNCUnFJQXNvQXRBQk5nSUFEQUlMSUF0QkNHb2dDMEhRQVdvUUFnMFRJQXBCNEJScUlBc29BdEFCTmdJQUlBWkJCRWNOQVFzZ0MwRUlhaUFMUWRBQmFoQUNEUklnQ3lnQzBBRWlEQ0FVU3cwU0lBcEI1QlJxSUF4QkFXdEIvLzhESUF3Yk5nSUFJQ2RCQVdvaEp3c2dDVUVCYWlFSklBZ2dCa0VHUm1vaENDQU9JQVpCQlVacUlRNGdFU0FHUVFGclFRTkphaUVSSUFZTkFBc2dKMEVCU3cwUUlBNUJBVXNORUNBSVFRRkxEUkFnRVVVTkFDQU9EUkFMSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRWUNRQ0FMS0FMUUFTSUlRWDlHQkVCQmdJQ0FnSGdoQ1NBR1JRMFJEQUVMSUFZTkVDQUlRUUZxUVFGMklnWkJBQ0FHYXlBSVFRRnhHeUVKQ3lBQUlBazJBdVFTSUFjb0FqUWdDV3BCTTBzTkR3SkFJQWNvQWp4RkRRQWdDMEVJYWlBTFFjd0JhaEFDRFJBZ0FDQUxLQUxNQVNJR05nTG9FaUFHUVFKTERSQWdCa0VCUmcwQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdnQ3lnQzBBRWlCa0YvUmcwUUlBZ05FQ0FHUVFGcVFRRjJJZ2hCQUNBSWF5QUdRUUZ4R3lJR1FRWnFRUXhMRFJBZ0FDQUdRUUYwTmdMc0VpQUxRUUEyQXRBQklBdEJDR29nQzBIUUFXb1FBaUVJSUFzb0F0QUJJZ1pCZjBZTkVDQUlEUkFnQmtFQmFrRUJkaUlJUVFBZ0NHc2dCa0VCY1JzaUJrRUdha0VNU3cwUUlBQWdCa0VCZERZQzhCSUxBa0FnQnlnQ0RFRUNTUTBBSUFjb0FoQkJBMnRCQWtzTkFFRUJRUUlnRFNBTklBY29BaVFpQjI0aUJpQUhiRVliSUFacUlRaEJBQ0VLQTBBZ0NDQUtJZ1pCQVdvaUNuWU5BQXNnQ2lBR0lBaEJmeUFHZEVGL2MzRWJJUWdnQ3lnQ0RDRUtBa0FnQ3lnQ0ZFRURkQ0lPSUFzb0FoZ2lFV3NpQmtFZ1RnUkFJQW9vQUFBaUJrRVlkQ0FHUVFoMFFZQ0EvQWR4Y2lBR1FRaDJRWUQrQTNFZ0JrRVlkbkp5SVF3Z0N5Z0NFQ0lHUlEwQklBd2dCblFnQ2kwQUJFRUlJQVpyZG5JaERBd0JDeUFHUVFGSUJFQkJBQ0VNREFFTElBb3RBQUFnQ3lnQ0VDSUpRUmhxSWhoMElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQUtMUUFCSUJoQkNHc2lHSFFnREhJaERDQUpRUWhLSVFZZ0NrRUJhaUVLSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnRVdvaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBT1N3UkFJQXRCZnpZQ3pBRU1FUXNnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXhCSUNBSWEzWWlCa0YvUmcwUUlBQWdCallDOUJJZ0JpQUhJQTFxUVFGcklBZHVTdzBRQ3lBQUtBS2tDVVVFUUFKQUlCcEJCVVlOQUNBQUtBSVFLQUl3SVFZZ0FFSUFOd0xVQ1NBR1JRMEFBa0FDUUFKQUFrQWdBQ2dDOUFraUNpQUFLQUxBRWlJblJ3UkFJQ2NnQ2tFQmFpQUFLQUxrQ1NJT2NDSUdSd1JBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaWdDQUNFUkEwQUNRQUpBQWtBQ1FDQUFLQUxzQ1NJS0JFQWdDa0VCY1NFSklBQW9Bc1FKSVFkQkFDRU5Ba0FnQ2tFQlJpSVBSUVJBSUFwQmZuRWhEQU5BSUFjZ0RVRW9iR29pQ0NnQ0ZFRUJhMEVCVFFSQUlBZ2dDQ2dDRENJSUlBNUJBQ0FHSUFoSkcyczJBZ2dMSUFjZ0RVRUJja0VvYkdvaUNDZ0NGRUVCYTBFQ1NRUkFJQWdnQ0NnQ0RDSUlJQTVCQUNBR0lBaEpHMnMyQWdnTElBMUJBbW9oRFNBTVFRSnJJZ3dOQUFzZ0NVVU5BUXNnQnlBTlFTaHNhaUlJS0FJVVFRRnJRUUZMRFFBZ0NDQUlLQUlNSWdnZ0RrRUFJQVlnQ0VrYmF6WUNDQXNnQ2lBQUtBTGNDVWtOQkNBUFJRMEJRUUFoR0VGL0lReEJBQ0VJREFJTFFRQWhDaUFBS0FMY0NRMERRUU1oREF3ZEMwRi9JUXhCQUNFTlFRQWhHQ0FLUVg1eElnZ2hEZ05BSUFjZ0RVRW9iR29pRHlnQ0ZFRUJhMEVCVFFSQUlBOG9BZ2dpRHlBWUlBeEJmMFlnRHlBWVNISWlEeHNoR0NBTklBd2dEeHNoREFzZ0J5QU5RUUZ5SWc5QktHeHFJaFFvQWhSQkFXdEJBa2tFUUNBVUtBSUlJaFFnR0NBTVFYOUdJQlFnR0VoeUloUWJJUmdnRHlBTUlCUWJJUXdMSUExQkFtb2hEU0FPUVFKcklnNE5BQXNnQ1VVTkFRc2dCeUFJUVNoc2FpSUpLQUlVUVFGclFRRkxEUUFnQ0NBSUlBd2dERUYvUmhzZ0NTZ0NDQ0FZU0JzaERBc2dERUVBU0EwWklBY2dERUVvYkdvaUIwRUFOZ0lVSUFBZ0NrRUJheUlLTmdMc0NTQUhLQUlZRFFBZ0FDQUFLQUx3Q1VFQmF6WUM4QWtMQWtBZ0FDZ0M4QWtpQ0NBQUtBTGdDU0lIU1FSQUlBQW9Bc1FKSVE4TUFRc2dBQ2dDL0FrTkJDQUFLQUxFQ1NFUEEwQkJBQ0VZUWYvLy8vOEhJUXhCQUNFTkEwQWdEeUFOUVNoc2FpSUpLQUlZQkVBZ0NTQVlJQWtvQWhBaUNTQU1TQ0lPR3lFWUlBa2dEQ0FPR3lFTUN5QU5RUUZxSWcwZ0IwME5BQXNnR0FSQUlBQW9BdEFKSUFBb0F0UUpJZ3hCQkhScUlna2dHQ2dDQURZQ0FDQUpJQmdvQWlRMkFnd2dDU0FZS0FJY05nSUVJQWtnR0NnQ0lEWUNDQ0FBSUF4QkFXbzJBdFFKSUJoQkFEWUNHQ0FJSUJnb0FoUkZheUVJQ3lBSElBaE5EUUFMQ3lBUElBZEJLR3hxSWdrZ0JqWUNEQ0FKUW9DQWdJQVFOd0lRSUFsQkFEWUNHQ0FKSUFZMkFnZ2dBQ0FLUVFGcU5nTHNDU0FBSUFoQkFXbzJBdkFKSUE4Z0IwRUJhaEFkSUFaQkFXb2dBQ2dDNUFraURuQWlCaUFuUncwQUN5QUFLQUxVQ1NJSVJRMERJQUFvQXNRSklna2dBQ2dDNEFraUJrRW9iR29pRENnQ0FDRUhJQUFvQXRBSklRMUJBQ0VLQTBBZ0J5QU5JQXBCQkhScUtBSUFSd1JBSUFnZ0NrRUJhaUlLUncwQkRBVUxDMEVBSVFvZ0JrVU5Bd05BSUJFZ0NTQUtRU2hzYWlJSUtBSUFSd1JBSUFZZ0NrRUJhaUlLUncwQkRBVUxDeUFJSUFjMkFnQWdEQ0FSTmdJQURBTUxJQklOQkF3REMwRUFJUW9nRWtVTkJFRURJUXdNRmdzRFFBd0FDd0FMSUJJTkFTQUFLQUwwQ1NFS0N5QUtJQ2RHRFFFZ0RpQW5ha0VCYXlBT2NDRW5DeUFBSUNjMkF2UUpDeUFBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tDeUJXSUJOQjNBY1FCeUV2SUFCQkFUWUNwQWtnQUNBYXJTQVNyVUlnaG9RM0F0QUtJQUFvQWhBaUJpZ0NPQ0lPSUFZb0FqUWlFbXdoR0NBQUtBS1VDU0VQQWtBZ0FDZ0NEQ0lHS0FJTUlncEJBVVlFUUNBUFFRQWdHRUVDZEJBREdnd0JDMEVBSVEwQ1FBSkFJQVlvQWhBaUIwRURhMEVDVFFSQUlBWW9BaVFnQUNnQ21BdHNJZ2dnR0NBSUlCaEpHeUVhSUFZb0FpQWhDQ0FIUVg1eFFRUkhEUUVnR0NBYWF5QWFJQWdiSVEwTEFrQUNRQUpBQWtBQ1FBSkFJQWNPQmdFQ0F3QUZCQUFMSUJoRkRRY2dHRUVEY1NFSklBWW9BaXdoQjBFQUlRWWdHRUVCYTBFRFR3UkFJQmhCZkhFaERBTkFJQThnQmtFQ2RDSUlhaUFISUFocUtBSUFOZ0lBSUE4Z0NFRUVjaUlLYWlBSElBcHFLQUlBTmdJQUlBOGdDRUVJY2lJS2FpQUhJQXBxS0FJQU5nSUFJQThnQ0VFTWNpSUlhaUFISUFocUtBSUFOZ0lBSUFaQkJHb2hCaUFNUVFScklnd05BQXNMSUFsRkRRY0RRQ0FQSUFaQkFuUWlDR29nQnlBSWFpZ0NBRFlDQUNBR1FRRnFJUVlnQ1VFQmF5SUpEUUFMREFjTElBcEZEUVVnQmlnQ0ZDRUlRUUFoQndOQVFRQWhEU0FISUJoUERRY0RRQUpBSUFnZ0RVRUNkR29pRENnQ0FDSUpSUVJBUVFBaENRd0JDMEVBSVFaQkFDQVlJQWRySWc0Z0RpQVlTeHNpRGtVTkFBTkFJQThnQmlBSGFrRUNkR29nRFRZQ0FDQUdRUUZxSWdZZ0RDZ0NBQ0lKVHcwQklBWWdEa2NOQUFzTElBb2dEVUVCYWlJTlMwRUFJQmdnQnlBSmFpSUhTeHNOQUFzZ0J5QVlTUTBBQ3d3R0N5QVlSUTBGUVFBaEJnTkFJQThnQmtFQ2RHb2dCaUFTYmlJSElBcHNRUUYySUFZZ0J5QVNiR3RxSUFwd05nSUFJQVpCQVdvaUJpQVlSdzBBQ3d3RkN5QUdLQUljSVE0Z0JpZ0NHQ0VSQWtBZ0dFVU5BQ0FLUVFGcklRWWdHRUVIY1NFSlFRQWhEU0FZUVFGclFRZFBCRUFnR0VGNGNTRU1BMEFnRHlBTlFRSjBJZ2RxSUFZMkFnQWdEeUFIUVFSeWFpQUdOZ0lBSUE4Z0IwRUljbW9nQmpZQ0FDQVBJQWRCREhKcUlBWTJBZ0FnRHlBSFFSQnlhaUFHTmdJQUlBOGdCMEVVY21vZ0JqWUNBQ0FQSUFkQkdISnFJQVkyQWdBZ0R5QUhRUnh5YWlBR05nSUFJQTFCQ0dvaERTQU1RUWhySWd3TkFBc0xJQWxGRFFBRFFDQVBJQTFCQW5ScUlBWTJBZ0FnRFVFQmFpRU5JQWxCQVdzaUNRMEFDd3NnQ2tFQ2F5RUdBMEFDUUNBUklBWWlCMEVDZENJR2FpZ0NBQ0lJSUJKdUlnd2dCaUFPYWlnQ0FDSUdJQkp1SWhoTERRQWdDQ0FNSUJKc2F5SUlJQVlnRWlBWWJHc2lDVXNOQUFOQUlBd2dFbXdoQ2lBSUlRWURRQ0FQSUFZZ0NtcEJBblJxSUFjMkFnQWdCa0VCYWlJR0lBbE5EUUFMSUF4QkFXb2lEQ0FZVFEwQUN3c2dCMEVCYXlFR0lBY05BQXNNQkFzZ0VrVU5BeUFPUlEwRFFRRWdCaWdDSUNJWWF5RVJJQTVCZm5FaENpQU9RUUZ4SVJwQkFDRUlRUUFoQ1FOQUlBZ2hCa0VBSVFjZ0NpRU1JQTVCQVVjRVFBTkFJQThnQnlBU2JDQUpha0VDZEdvZ0dDQVJJQVlnRFVrYk5nSUFJQThnQjBFQmNpQVNiQ0FKYWtFQ2RHb2dHQ0FSSUFaQkFXb2dEVWtiTmdJQUlBZEJBbW9oQnlBR1FRSnFJUVlnREVFQ2F5SU1EUUFMQ3lBYUJFQWdEeUFISUJKc0lBbHFRUUowYWlBWUlCRWdCaUFOU1JzMkFnQUxJQWdnRG1vaENDQUpRUUZxSWdrZ0VrY05BQXNNQXdzZ0dFVU5Ba0VCSUFZb0FpQWlCMnNoQ0NBWVFRTnhJUXhCQUNFR0lCaEJBV3RCQTA4RVFDQVlRWHh4SVJJRFFDQVBJQVpCQW5ScUlBY2dDQ0FHSUExSkd6WUNBQ0FQSUFaQkFYSWlDVUVDZEdvZ0J5QUlJQWtnRFVrYk5nSUFJQThnQmtFQ2NpSUpRUUowYWlBSElBZ2dDU0FOU1JzMkFnQWdEeUFHUVFOeUloaEJBblJxSUFjZ0NDQU5JQmhMR3pZQ0FDQUdRUVJxSVFZZ0VrRUVheUlTRFFBTEN5QU1SUTBDQTBBZ0R5QUdRUUowYWlBSElBZ2dCaUFOU1JzMkFnQWdCa0VCYWlFR0lBeEJBV3NpREEwQUN3d0NDd0pBSUJoRkRRQWdHRUVIY1NFTlFRQWhCeUFZUVFGclFRZFBCRUFnR0VGNGNTRUpBMEFnRHlBSFFRSjBJZ1pxUVFFMkFnQWdEeUFHUVFSeWFrRUJOZ0lBSUE4Z0JrRUljbXBCQVRZQ0FDQVBJQVpCREhKcVFRRTJBZ0FnRHlBR1FSQnlha0VCTmdJQUlBOGdCa0VVY21wQkFUWUNBQ0FQSUFaQkdISnFRUUUyQWdBZ0R5QUdRUnh5YWtFQk5nSUFJQWRCQ0dvaEJ5QUpRUWhySWdrTkFBc0xJQTFGRFFBRFFDQVBJQWRCQW5ScVFRRTJBZ0FnQjBFQmFpRUhJQTFCQVdzaURRMEFDd3NnR2tVTkFTQVNRUUZySVJRZ0RrRUJheUVUUVFFZ0NFRUJkQ0lHYXlFS0lBWkJBV3NoRENBSVFRRnJJUWRCQUNFSklBNGdDR3RCQVhZaURpRW5JQklnQ0d0QkFYWWlFU0VOSUE0aEdDQVJJUVlEUUNBUElCSWdHR3dnQm1wQkFuUnFJaHdvQWdBaUYwRUJSZ1JBSUJ4QkFEWUNBQXNnRjBFQlJpRWNBa0FDUUNBSFFYOUhEUUFnQmlBTlJ3MEFRUUFoQnlBTUlRZ2dEVUVCSUExQkFVb2JRUUZySWdZaERRd0JDd0pBSUFkQkFVY05BQ0FHSUJGSERRQkJBQ0VISUFvaENDQVJRUUZxSWdZZ0ZDQUdJQlJJR3lJR0lSRU1BUXNDUUNBSVFYOUhEUUFnR0NBblJ3MEFRUUFoQ0NBS0lRY2dKMEVCSUNkQkFVb2JRUUZySWhnaEp3d0JDd0pBSUFoQkFVY05BQ0FPSUJoSERRQkJBQ0VJSUF3aEJ5QU9RUUZxSWc0Z0V5QU9JQk5JR3lJWUlRNE1BUXNnQ0NBWWFpRVlJQVlnQjJvaEJnc2dDU0FjYWlJSklCcEpEUUFMREFFTElCaEZEUUFEUUF3QUN3QUxBa0FnQUNnQzdBa2lDRVVFUUNBQUtBS0VDeUVTSUFBb0F1UUtJUXdNQVFzZ0NFRURjU0VLUVFBaEJpQUlRUUZyUVFOUEJFQWdDRUY4Y1NFSEEwQWdBQ2dDeUFrZ0JrRUNkR29nQUNnQ3hBa2dCa0VvYkdvMkFnQWdBQ2dDeUFrZ0JrRUJjaUlKUVFKMGFpQUFLQUxFQ1NBSlFTaHNhallDQUNBQUtBTElDU0FHUVFKeUlnbEJBblJxSUFBb0FzUUpJQWxCS0d4cU5nSUFJQUFvQXNnSklBWkJBM0lpQ1VFQ2RHb2dBQ2dDeEFrZ0NVRW9iR28yQWdBZ0JrRUVhaUVHSUFkQkJHc2lCdzBBQ3dzZ0NnUkFBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3NnQUNnQ2hBc2hFaUFBS0FMa0NpRU1JQWhGRFFBZ09DZ0NBQ0VKUVFBaEJnTkFJQWtnQmtFb2JHb2lCeWdDRkVFQmEwRUJUUVJBSUFjZ0RDQUhLQUlNSWdkSkJIOGdCeUFBS0FMa0NXc0ZJQWNMTmdJSUN5QUdRUUZxSWdZZ0NFY05BQXNMQWtBZ0FDZ0NuQXRGRFFCQkFDRVlJQXdoQ0NBQUtBS2dDeUlHUVFKTERRQURRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBWU9Bd0FCQXdFTElBZ2dBQ0FZUVF4c2FrR2tDMm9vQWdCcklnaEJmMG9OQVNBQUtBTGtDU0FJYWlFSURBRUxJQUFnR0VFTWJHcEJwQXRxS0FJQUlBaHFJZ1pCQUNBQUtBTGtDU0lISUFZZ0IwZ2JheUVJQ3lBSUlnNGdERXNFUUNBSUlBQW9BdVFKYXlFT0N5QUFLQUxjQ1NJSlJRMFZJRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUWlEVUVCYTBFQlRRUkFJQW9vQWdnZ0RrWU5Bd3RCQUNFS0lBWkJBV29pQmlBSlJ3MEFDMEVESVF3TUZnc2dBQ2dDM0FraUNVVU5GQ0FBSUJoQkRHeHFRYWdMYWlnQ0FDRU9JRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUkJBMFlFUUNBS0tBSUlJQTVHRFFNTFFRQWhDaUFHUVFGcUlnWWdDVWNOQUF0QkF5RU1EQlVMUVFBaENpQUdRUUJJQkVCQkF5RU1EQlVMSUExQkFVc05BVUVESVF3TUZBdEJBQ0VLSUFaQkFFNE5BRUVESVF3TUV3c2dFaUFZU3dSQUlCSWlDaUFZYTBFRGNTSUhCRUFEUUNBQUtBTElDU0lKSUFwQkFuUnFJQWtnQ2tFQmF5SUtRUUowYWlnQ0FEWUNBQ0FIUVFGcklnY05BQXNMSUJJZ0dFRi9jMnBCQTA4RVFBTkFJQUFvQXNnSklna2dDa0VDZENJSGFpQUpJQWRCQkdzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCQ0dzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCREdzaUIyb29BZ0EyQWdBZ0J5QUFLQUxJQ1NJSmFpQUpJQXBCQkdzaUNrRUNkR29vQWdBMkFnQWdDaUFZU3cwQUN3c2dPQ2dDQUNFSEN5QUFLQUxJQ1NBWVFRSjBhaUFISUFaQktHd2lDV28yQWdBZ0dFRUJhaUlZSVFvZ0VpQVlJZ1pQQkVBRFFDQUFLQUxJQ1NJSElBWkJBblJxS0FJQUlnNGdBQ2dDeEFrZ0NXcEhCRUFnQnlBS1FRSjBhaUFPTmdJQUlBcEJBV29oQ2dzZ0JrRUJhaUlHSUJKTkRRQUxDeUFBSUJoQkRHeHFRYUFMYWlnQ0FDSUdRUU5KRFFBTEN3Si9JQXRCQ0dvaElFRUFJVGxCQUNFMEl3QkI4QU5ySWg4a0FDQXZLQUlBSVNvZ0FDZ0NzQm9oRmlBZlFRQTJBZ3dnQUVHd0NXcEJBRFlDQUNBQUlBQW9BcWdKUVFGcU5nS29DU0FXUVlnUWFpRTJJQlpCeUFwcUlSc2dGa0dJQ21vaE55QVdRY2dKYWlFNklCWkJpQWxxSVQ0Z0ZrSElDR29oUHlBV1FZZ0lhaUZBSUJaQnlBZHFJVUVnRmtHSUIyb2hRaUFXUWNnR2FpRkRJQlpCaUFacUlVUWdGa0hJQldvaFJTQVdRWWdGYWlGR0lCWkJ5QVJxSVVjZ0ZrR0lCR29oU0NBV1FjZ0RhaUZKSUJaQmlBTnFJVW9nRmtISUQyb2hLQ0FXUWNnQ2FpRVVJQlpCbUE5cUlVc2dGa0dJRDJvaFRDQVdRY2dPYWlGTklCWkJER29oVGlBdktBSXdJQUFvQWd3b0FqUnFJUzBnQUNnQ3ZBa2hEaUFXUWN3S2FpRlBJQlpCakF0cUlUc2dGa0dNRUdvaFVDQVdRY3dMYWlGUklCWkJrQkJxSVZJZ0ZrR01ER29oWVNBV1FaUVFhaUZpSUJaQnpBeHFJV01nRmtHWUVHb2haQ0FXUVl3TmFpRmxJQlpCbkJCcUlXWWdGa0hNRFdvaFp5QVdRYUFRYWlGb0lCWkJqQTVxSVdrZ0ZrR2tFR29oYWlBV1FaQUNhaUlqSVdzQ1FBTkFBa0FnTHlnQ0pBMEFJQTRnS2tIWUFXeHFLQUxFQVVVTkFFRUJJUVlNQWdzZ0x5a0NOQ0Z1SUM4b0Fqd2hCeUFBS0FLb0NTRUlJQTRnS2tIWUFXd2lNV29pQmlBQUtBSU1LQUk0TmdJWUlBWWdCellDRUNBR0lHNDNBZ2dnQmlBSU5nSUVBa0FnTHlnQ0JDSUdRUUpHRFFBZ0JrRUhSZzBBSURrTkFFRUJJUVlnSUNBZlFReHFFQUlOQWlBZktBSU1JZ2NnQUNnQ21Ba2dLbXRMRFFJZ0IwVUVRRUVBSVRrTUFRc2dUa0VBUWFRQkVBTWFJQlpCQURZQ0FFRUJJVGtMQWtBZ0h5Z0NEQ0lHQkVBZ0h5QUdRUUZyTmdJTURBRUxJQzhvQWl3aERTQUFLQUs4Q1NFUklDOG9BZ1FoQmlBV1FRQkJxQkFRQXlFS0lDQWdIMEhNQTJvUUFpRUhBa0FDUUFKQUlBWkJBbXNPQmdBQkFRRUJBQUVMUVFFaEJpQWZLQUxNQTBFR2FpSUpRUjlMRFFRZ0IwVU5BUXdFQzBFQklRWWdIeWdDekFOQkFXb2lDVUVmU3cwRElBY05Bd3NnQ2lBSk5nSUFBa0FnQ1VFZlJnUkFJQ0FvQWdnaEV3TkFJQ0FvQWdRaEJpQVRSUVJBUVFBaENpQVVJUWNEUUFKQUlDQW9BZ3hCQTNRaURpQWdLQUlRSWd4cklnbEJJRTRFUUNBR0tBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRUlJQ0FvQWdnaUNVVU5BU0FJSUFsMElBWXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlDQW9BZ2dpRFVFWWFpSWFkQ0VJSUFrZ0RXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQWFRUWhySWhwMElBaHlJUWdnQ1VFSVNpRU5JQVpCQVdvaEJpQUpRUWhySVFrZ0RRMEFDd3NnSUNBTVFRZHhOZ0lJSUNBZ0RFRUlhaUlHTmdJUUlBWWdEa3NFUUVFQklRWU1DQXNnSUNBZ0tBSUFJQVpCQTNacUlnWTJBZ1FnQnlBSVFSaDJOZ0lBSUFkQkJHb2hCeUFLUVFGcUlncEJnQU5IRFFBTERBTUxBa0FnSUNnQ0RFRURkQ0lLSUNBb0FoQWlER3NpQjBFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SUJOMElBWXRBQVJCQ0NBVGEzWnlJUWdNQVFzZ0IwRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlCTkJHR29pR25RaENDQUhJQk5xUVFocklnbEJBVWdOQUFOQUlBWXRBQUVnR2tFSWF5SWFkQ0FJY2lFSUlBbEJDRW9oQnlBR1FRRnFJUVlnQ1VFSWF5RUpJQWNOQUFzTFFRRWhCaUFnSUF4QkFXb2lCellDRUNBZ0lBZEJCM0VpRXpZQ0NDQUhJQXBMRFFVZ0lDQWdLQUlBSUFkQkEzWnFOZ0lFSUFoQmYwb05BQXNNQkF0QkFpQUpRUVpISWc4Z0NVRUdTUnNoRWdKQUFrQUNRQ0FKUVg1eFFRUkdCRUFnSUNBZlFkUURhaEFDQkVCQkFTRUlEQVFMSUI4b0F0UURJZ1pCQTBzRVFFRUJJUWdNQkFzZ0NpQUdOZ0t3QVNBZ0lCOUIxQU5xRUFJRVFFRUJJUWdNQkFzZ0h5Z0MxQU1pQmtFRFN3UkFRUUVoQ0F3RUN5QUtJQVkyQXJRQklDQWdIMEhVQTJvUUFnUkFRUUVoQ0F3RUN5QWZLQUxVQXlJR1FRTkxCRUJCQVNFSURBUUxJQW9nQmpZQ3VBRWdJQ0FmUWRRRGFoQUNCRUJCQVNFSURBUUxJQjhvQXRRRElnWkJBMHNFUUVFQklRZ01CQXNnQ2lBR05nSzhBU0FOUVFKSkRRSWdDVUVGUncwQkRBSUxBa0FDZndKQUFrQUNRQ0FTUVFGckRnSUVBUUFMSUNBb0FnUWhCZ0pBSUNBb0FneEJBM1FnSUNnQ0VHc2lCMEVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWdnSUNnQ0NDSUhSUTBCSUFnZ0IzUWdCaTBBQkVFSUlBZHJkbkloQ0F3QkN5QUhRUUJNQkVCQkFDRUlJQXBCQURZQ0RBd0RDeUFHTFFBQUlDQW9BZ2dpQ1VFWWFpSVRkQ0VJSUFjZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQVRRUWhySWhOMElBaHlJUWdnQ1VFSVNpRUhJQVpCQVdvaEJpQUpRUWhySVFrZ0J3MEFDd3NnQ2lBSVFSOTJOZ0lNSUFoQmYwb05BU0FJUVFGMElRbEJBQXdDQ3lBTlFRSlBCRUJCQXlFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUdDMEVBSVF3RFFDQUdJUWNDUUNBTlFRSk5CRUFnSUNnQ0JDRUdBa0FnSUNnQ0RFRURkQ0lhSUNBb0FoQWlIR3NpQ0VFZ1RnUkFJQVlvQUFBaUNFRVlkQ0FJUVFoMFFZQ0EvQWR4Y2lBSVFRaDJRWUQrQTNFZ0NFRVlkbkp5SVJNZ0lDZ0NDQ0lJUlEwQklCTWdDSFFnQmkwQUJFRUlJQWhyZG5JaEV3d0JDeUFJUVFGSUJFQkJBQ0VUREFFTElBWXRBQUFnSUNnQ0NDSVhRUmhxSWc1MElSTWdDQ0FYYWtFSWF5SUlRUUZJRFFBRFFDQUdMUUFCSUE1QkNHc2lEblFnRTNJaEV5QUlRUWhLSVJjZ0JrRUJhaUVHSUFoQkNHc2hDQ0FYRFFBTEMwRUJJUWdnSUNBY1FRRnFJZ1kyQWhBZ0lDQUdRUWR4TmdJSUlBWWdHa3NOQ1NBZ0lDQW9BZ0FnQmtFRGRtbzJBZ1FnSHlBVFFYOXpRUjkySWdZMkF0UUREQUVMSUNBZ0gwSFVBMm9RQWdSQVFRRWhDQXdKQ3lBZktBTFVBeUVHQ3lBR0lBMVBCRUJCQVNFSURBZ0xJQW9nREVFQ2RHb2dCallDa0FFZ0IwRUJheUVHSUF4QkFXb2hEQ0FIRFFBTEMwRURJUWhCQUNFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUlDd0pBQWtBRFFDQUlJUWNnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQ0FKL0lCOG9BdGdESWdsQmYwWUVRRUdBZ0lDQWVDQUlEUUVhREFRTElBZ05BeUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3dzaENDQUtJQVpCQW5ScUlna2dDRHNCb0FFZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQUpBbjhnSHlnQzJBTWlDVUYvUmdSQVFZQ0FnSUI0SUFnTkFSb01Bd3NnQ0EwQ0lBbEJBV3BCQVhZaUNFRUFJQWhySUFsQkFYRWJDenNCb2dFZ0IwRUJheUVJSUFaQkFXb2hCaUFIRFFBTFFRQWhDQXdIQzBFQklRZ01CZ3RCQVNFSURBVUxJQW9nQ0VFY2RqWUNUQ0FJUVFSMElRbEJBUXNoQmlBS0lBbEJIM1kyQWhBZ0NpQUpRWDlNQkg4Z0NVRUJkQVVnQ2lBSlFSeDJOZ0pRSUFaQkFXb2hCaUFKUVFSMEN5SUhRUjkyTmdJVUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDVkNBR1FRRnFJUVlnQjBFRWRBc2lCMEVmZGpZQ0dDQUtJQWRCQUVnRWZ5QUhRUUYwQlNBS0lBZEJISFkyQWxnZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFod2dDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdKY0lBWkJBV29oQmlBSFFRUjBDeUlIUVI5Mk5nSWdJQW9nQjBFQVNBUi9JQWRCQVhRRklBb2dCMEVjZGpZQ1lDQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNKQ0FLSUFkQkFFZ0VmeUFIUVFGMEJTQUtJQWRCSEhZMkFtUWdCa0VCYWlFR0lBZEJCSFFMSWdkQkgzWTJBaWdnQjBFQVRnUkFJQW9nQjBFY2RqWUNhQ0FHUVFGcUlRWUxJQ0FnSUNnQ0VDQUdRUU5zYWtFSWFpSUpOZ0lRSUNBZ0NVRUhjU0lITmdJSVFRRWhDQ0FnS0FJTVFRTjBJZ3dnQ1VrTkF5QWdJQ0FvQWdBaURTQUpRUU4yYWlJR05nSUVBbjhDUUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUNVRVlkQ0FKUVFoMFFZQ0EvQWR4Y2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SVJNZ0IwVU5BU0FUSUFkMElBWXRBQVJCQ0NBSGEzWnlJUk1NQVFzZ0NVRUFUQVJBUVFBaEV5QUtRUUEyQWl3TUFnc2dCaTBBQUNBSFFSaHlJZzUwSVJNZ0J5QUpha0VJYXlJSlFRRklEUUFEUUNBR0xRQUJJQTVCQ0dzaURuUWdFM0loRXlBSlFRaEtJUWNnQmtFQmFpRUdJQWxCQ0dzaENTQUhEUUFMQ3lBS0lCTkJIM1kyQWl3Z0UwRi9TZzBBSUJOQkFYUWhDVUVBREFFTElBb2dFMEVjZGpZQ2JDQVRRUVIwSVFsQkFRc2hCaUFLSUFsQkgzWTJBakFnQ2lBSlFRQklCSDhnQ1VFQmRBVWdDaUFKUVJ4Mk5nSndJQVpCQVdvaEJpQUpRUVIwQ3lJSFFSOTJOZ0kwSUFvZ0IwRUFTQVIvSUFkQkFYUUZJQW9nQjBFY2RqWUNkQ0FHUVFGcUlRWWdCMEVFZEFzaUIwRWZkallDT0NBS0lBZEJBRWdFZnlBSFFRRjBCU0FLSUFkQkhIWTJBbmdnQmtFQmFpRUdJQWRCQkhRTElnZEJIM1kyQWp3Z0NpQUhRUUJJQkg4Z0IwRUJkQVVnQ2lBSFFSeDJOZ0o4SUFaQkFXb2hCaUFIUVFSMEN5SUhRUjkyTmdKQUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDZ0FFZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFrUWdDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLRUFTQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNTQ0FIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLSUFTQUdRUUZxSVFZZ0IwRUVkQXNoQnlBZ0lDQW9BaEFnQmtFRGJHcEJDR29pQmpZQ0VDQWdJQVpCQjNFMkFnZ2dCaUFnS0FJTVFRTjBTdzBESUNBZ0RTQUdRUU4yYWpZQ0JDQWZJQWMyQXRRREMwRUJJUWdnSUNBZlFkUURhaEFDRFFJZ0h5Z0MxQU1pQmtFRFN3MENJQW9nQmpZQ2pBRkJBQ0VJREFJTElDQWdIMEhVQTJvZ0RVRUNTeUlHRUJFRVFFRUJJUWdNQWdzZ0RTQWZLQUxVQXlJSFRRUkFRUUVoQ0F3Q0N5QUtJQWMyQXNBQklDQWdIMEhVQTJvZ0JoQVJCRUJCQVNFSURBSUxJQTBnSHlnQzFBTWlCMDBFUUVFQklRZ01BZ3NnQ2lBSE5nTEVBU0FnSUI5QjFBTnFJQVlRRVFSQVFRRWhDQXdDQ3lBTklCOG9BdFFESWdkTkJFQkJBU0VJREFJTElBb2dCellDeUFFZ0lDQWZRZFFEYWlBR0VCRUVRRUVCSVFnTUFnc2dEU0FmS0FMVUF5SUdUUVJBUVFFaENBd0NDeUFLSUFZMkFzd0JDeUFmSUFvb0FyQUJJZ2xCQWswRWZ5QUpRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdKQUFrQURRQ0FmUVFBMkF0Z0RJQ0FnSDBIWUEyb1FBaUVIQW44Z0h5Z0MyQU1pQ0VGL1JnUkFRWUNBZ0lCNElBY05BUm9NQkFzZ0J3MERJQWhCQVdwQkFYWWlCMEVBSUFkcklBaEJBWEViQ3lFSElBb2dCa0VDZEdvaUNTQUhPd0hRQVNBZlFRQTJBdGdESUNBZ0gwSFlBMm9RQWlFSUlBa0NmeUFmS0FMWUF5SUpRWDlHQkVCQmdJQ0FnSGdnQ0EwQkdnd0RDeUFJRFFJZ0NVRUJha0VCZGlJSFFRQWdCMnNnQ1VFQmNSc0xJZ2s3QWRJQklCOGdIeWdDMUFNaUIwRUJhellDMUFNZ0JrRUJhaUVHSUFjTkFBc2dIeUFLS0FLMEFTSUdRUU5KQkg4Z0JrRUNkRUh3S21vb0FnQUZRUU1MTmdMVUEwRUFJUVlDUUFOQUlCOUJBRFlDMkFNZ0lDQWZRZGdEYWhBQ0lRY0NRQ0FmS0FMWUF5SUlRWDlHQkVCQmdJQ0FnSGdoQ0NBSFJRMEZEQUVMSUFjTkJDQUlRUUZxUVFGMklnZEJBQ0FIYXlBSVFRRnhHeUVJQ3lBS0lBWkJBblJxSWdrZ0NEc0I0QUVnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQnlBSkFuOGdIeWdDMkFNaUNVRi9SZ1JBUVlDQWdJQjRJQWNOQVJvTUF3c2dCdzBDSUFsQkFXcEJBWFlpQjBFQUlBZHJJQWxCQVhFYkN5SUpPd0hpQVNBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCaUFIRFFBTElCOGdDVFlDMEFNZ0h5QUtLQUs0QVNJR1FRSk5CSDhnQmtFQ2RFSHdLbW9vQWdBRlFRTUxOZ0xVQTBFQUlRWURRQ0FnSUI5QjBBTnFFQkFFUUVFQklRZ01CUXNnQ2lBR1FRSjBhaUlISUI4b0F0QURPd0h3QVNBZ0lCOUIwQU5xRUJBRVFFRUJJUWdNQlFzZ0J5QWZLQUxRQXpzQjhnRWdIeUFmS0FMVUF5SUhRUUZyTmdMVUF5QUdRUUZxSVFZZ0J3MEFDeUFmSUFvb0Fyd0JJZ1pCQWswRWZ5QUdRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdOQUlDQWdIMEhRQTJvUUVBUkFRUUVoQ0F3RkN5QUtJQVpCQW5ScUlnY2dIeWdDMEFNN0FZQUNJQ0FnSDBIUUEyb1FFQVJBUVFFaENBd0ZDeUFISUI4b0F0QURPd0dDQWlBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCa0VBSVFnZ0J3MEFDd3dEQ3lBZklBZzJBdEFEUVFFaENBd0NDeUFmSUFjMkF0QURRUUVoQ0F3QkN5QWZJQWsyQXRBRFFRRWhDQXRCQVNFR0lBZ05Bd0pBSUJKQkFVY0VRQ0FnSUI5QjJBTnFFQUlOQlNBZktBTFlBeUlIUVRCUERRVWdDa0hRUDBHZ1B5QVBHeUFIYWkwQUFDSUhOZ0lFSUFkRkRRSU1BUXNnQ2lBS0tBSUFJZ2RCQjJzaUNFRUNkRUZ3Y1NJSlFUQnJJQWtnQ0VFTFN4dEJEMEVBSUFkQkVrc2JjallDQkFzZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQWZLQUxZQXlJSFFYOUdEUU1nQ0EwRElBZEJBV3BCQVhZaUNFRUFJQWhySUFkQkFYRWJJZ2RCWmtnTkF5QUhRUmxLRFFNZ0VTQXhhaUVNSUFvZ0J6WUNDQ0FLS0FJRUlRZ0NRQUpBSUFvb0FnQkJCMGtFUUVFQUlRbEJBeUVHQTBBZ0JpRUhJQWhCQVhFRVFDQWpJQWxCQW5ScVFiZ05haUFnSUNNZ0NVRUdkR3BCT0dvZ0RDQUpJQ01RQ2tFUUVBWWlCa0VRZGpZQ0FDQUdRUTl4RFFRZ0l5QUpRUUYwYWlBR1FRUjJRZjhCY1RzQkFDQWpJQWxCQVhJaURrRUNkR3BCdUExcUlDQWdJeUFPUVFaMGFrRTRhaUFNSUE0Z0l4QUtRUkFRQmlJR1FSQjJOZ0lBSUFaQkQzRU5CQ0FqSUE1QkFYUnFJQVpCQkhaQi93RnhPd0VBSUNNZ0NVRUNjaUlPUVFKMGFrRzREV29nSUNBaklBNUJCblJxUVRocUlBd2dEaUFqRUFwQkVCQUdJZ1pCRUhZMkFnQWdCa0VQY1EwRUlDTWdEa0VCZEdvZ0JrRUVka0gvQVhFN0FRQWdJeUFKUVFOeUlnNUJBblJxUWJnTmFpQWdJQ01nRGtFR2RHcEJPR29nRENBT0lDTVFDa0VRRUFZaUJrRVFkallDQUNBR1FROXhEUVFnQ2lBT1FRRjBhaUFHUVFSMlFmOEJjVHNCa0FJTElBaEJBWFloQ0NBSFFRRnJJUVlnQ1VFRWFpRUpJQWNOQUFzTUFRc2dJQ0JOSUF4QkFDQWpFQXBCRUJBR0lnWkJEM0VOQVNBS0lBWkJCSFpCL3dGeE93SEFBa0VBSVFsQkF5RUdBMEFnQmlFSElBaEJBWEVFUUNBaklBbEJBblJxUWJnTmFpQWdJQ01nQ1VFR2RHcEJQR29nRENBSklDTVFDa0VQRUFZaUJrRVBkallDQUNBR1FROXhEUU1nSXlBSlFRRjBhaUFHUVFSMlFmOEJjVHNCQUNBaklBbEJBWElpRGtFQ2RHcEJ1QTFxSUNBZ0l5QU9RUVowYWtFOGFpQU1JQTRnSXhBS1FROFFCaUlHUVE5Mk5nSUFJQVpCRDNFTkF5QWpJQTVCQVhScUlBWkJCSFpCL3dGeE93RUFJQ01nQ1VFQ2NpSU9RUUowYWtHNERXb2dJQ0FqSUE1QkJuUnFRVHhxSUF3Z0RpQWpFQXBCRHhBR0lnWkJEM1kyQWdBZ0JrRVBjUTBESUNNZ0RrRUJkR29nQmtFRWRrSC9BWEU3QVFBZ0l5QUpRUU55SWc1QkFuUnFRYmdOYWlBZ0lDTWdEa0VHZEdwQlBHb2dEQ0FPSUNNUUNrRVBFQVlpQmtFUGRqWUNBQ0FHUVE5eERRTWdDaUFPUVFGMGFpQUdRUVIyUWY4QmNUc0JrQUlMSUFoQkFYWWhDQ0FIUVFGcklRWWdDVUVFYWlFSklBY05BQXNMSUFoQkEzRUVRQ0FnSUV4QmYwRUVFQVlpQmtFUGNRMEJJQW9nQmtFRWRrSC9BWEU3QWNJQ0lDQWdTMEYvUVFRUUJpSUdRUTl4RFFFZ0NpQUdRUVIyUWY4QmNUc0J4QUlMUVFBaEJpQUlRUUp4UlEwQUlDQWdUeUFNUVJBZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJQXBCaUJCcUlBZEJEM1kyQWdBZ0ZpQUhRUVIyUWY4QmNUc0JzQUlnSUNBN0lBeEJFU0FqRUFwQkR4QUdJZ2RCRDNFRVFDQUhJUVlNQVFzZ1VDQUhRUTkyTmdJQUlCWWdCMEVFZGtIL0FYRTdBYklDSUNBZ1VTQU1RUklnSXhBS1FROFFCaUlIUVE5eEJFQWdCeUVHREFFTElGSWdCMEVQZGpZQ0FDQVdJQWRCQkhaQi93RnhPd0cwQWlBZ0lHRWdERUVUSUNNUUNrRVBFQVlpQjBFUGNRUkFJQWNoQmd3QkN5QmlJQWRCRDNZMkFnQWdGaUFIUVFSMlFmOEJjVHNCdGdJZ0lDQmpJQXhCRkNBakVBcEJEeEFHSWdkQkQzRUVRQ0FISVFZTUFRc2daQ0FIUVE5Mk5nSUFJQllnQjBFRWRrSC9BWEU3QWJnQ0lDQWdaU0FNUVJVZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJR1lnQjBFUGRqWUNBQ0FXSUFkQkJIWkIvd0Z4T3dHNkFpQWdJR2NnREVFV0lDTVFDa0VQRUFZaUIwRVBjUVJBSUFjaEJnd0JDeUJvSUFkQkQzWTJBZ0FnRmlBSFFRUjJRZjhCY1RzQnZBSWdJQ0JwSUF4QkZ5QWpFQXBCRHhBR0lnZEJEM0VFUUNBSElRWU1BUXNnYWlBSFFROTJOZ0lBSUJZZ0IwRUVka0gvQVhFN0FiNENDeUFnSUNBb0FnZ2dJQ2dDQkNBZ0tBSUFhMEVEZEdvMkFoQWdCZzBEQzBFQUlUa0xJQUFvQWd3b0FrQWhKQ0FBS0FLOENTSXBJREZxSWc0Z0ZpZ0NBQ0lNTmdJQUlBNGdEaWdDeEFGQkFXb2lCellDeEFFZ0t5QXJLQUlBSWdnZ0tpQXJLQUlFSWdsd0lnWkJCSFJxSUNvZ0Jtc2lDa0VJZEdvMkFnd2dLeUFJSUFrZ0t5Z0NDR3dpQ1VFSWRHb2dDa0VHZEdvZ0JrRURkR29pQmpZQ0VDQXJJQVlnQ1VFR2RHbzJBaFFDUUFKQUFrQUNRQUpBQW44Q1FBSkFBbjhDUUFKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUlBd0VRQ0FNUVI5R0JFQWdLU0F4YWlJR1FRQTJBaFFnQmtFY2FpRUlJQWRCQWs4TkFrRVhJUm9nSDBFUWFpRUdJQlFoQ1FOQUlBaEJFRHNCQUNBR0lBa29BZ0E2QUFBZ0JpQUpLQUlFT2dBQklBWWdDU2dDQ0RvQUFpQUdJQWtvQWd3NkFBTWdCaUFKS0FJUU9nQUVJQVlnQ1NnQ0ZEb0FCU0FHSUFrb0FoZzZBQVlnQmlBSktBSWNPZ0FISUFZZ0NTZ0NJRG9BQ0NBR0lBa29BaVE2QUFrZ0JpQUpLQUlvT2dBS0lBWWdDU2dDTERvQUN5QUdJQWtvQWpBNkFBd2dCaUFKS0FJME9nQU5JQVlnQ1NnQ09Eb0FEaUFHSUFrb0FqdzZBQThnR2lJSFFRRnJJUm9nQ0VFQ2FpRUlJQVpCRUdvaEJpQUpRVUJySVFrZ0J3MEFDeUFySUI5QkVHb1FEd3dWQ3lBcElERnFJaGNnSXlrQ0FEY0NIQ0FYSUNNcEFTNDNBVW9nRnlCcktRSW9Od0pFSUJjZ0l5a0NJRGNDUENBWElDTXBBaGczQWpRZ0Z5QWpLUUlRTndJc0lCY2dJeWtDQ0RjQ0pBSkFJQllvQWdnaUJrVU5BQUpBSUFZZ0xXb2lMVUVBU0FSQVFUUWhCZ3dCQzBGTUlRWWdMVUUwU0EwQkN5QUdJQzFxSVMwTElCZEJIR29oQnlBWElDMDJBaFFDUUFKQUlBeEJCazBFUUNBSEx3RUFSUTBCSUJRZ0xVRUFJQ2dvQWdBUUJVVU5Ba0VCSVFZTUdRdEJzQ29oR2tFUElRWWdGeThCVEFSQUlCWW9Bb0FQSWdnZ0ZpZ0M3QTRpQ1dvaUNpQVdLQUtFRHlJU0lCWW9BdkFPSWhGcUlnOXJJUTBnQ1NBSWF5SUlJQkVnRW1zaUNXc2hFaUFJSUFscUlSRWdDaUFQYWlFUElCWW9BdlFPSWdnZ0ZpZ0MxQTRpQ1dvaUNpQVdLQUw4RGlJY0lCWW9BdWdPSWhWcUloQnJJUk1nQ1NBSWF5SUlJQlVnSEdzaUNXc2hIQ0FJSUFscUlSVWdDaUFRYWlFUUlCWW9BdVFPSWdnZ0ZpZ0MwQTRpQ1dvaUNpQVdLQUw0RGlJZUlCWW9BdGdPSWlGcUlpSnJJUmtnQ1NBSWF5SUlJQ0VnSG1zaUNXc2hIaUFJSUFscUlTRWdDaUFpYWlFaUlCWW9BdHdPSWdnZ0ZpZ0N5QTRpQ1dvaUNpQVdLQUxnRGlJbElCWW9Bc3dPSWl4cUlpNXJJUjBnQ1NBSWF5SUlJQ3dnSldzaUNXc2hKU0FJSUFscUlTd2dDaUF1YWlFdUlDMUJnRHhxTFFBQUlRb2dMVUdRUFdvdEFBQkJER3hCd0R4cUtBSUFJUWdnRmdKL0lDMUJERThFUUNBV0lBZ2dDa0VDYTNRaUNDQVFJQzVxSWdrZ0R5QWlhaUlLYTJ3MkF2Z09JQllnTGlBUWF5SVFJQ0lnRDJzaUQyc2dDR3cyQXVnT0lCWWdEeUFRYWlBSWJEWUMyQTRnRmlBSklBcHFJQWhzTmdMSURpQVdJQlVnTEdvaUNTQVJJQ0ZxSWdwcklBaHNOZ0w4RGlBV0lDd2dGV3NpRHlBaElCRnJJaEZySUFoc05nTHNEaUFXSUE4Z0VXb2dDR3cyQXR3T0lCWWdDU0FLYWlBSWJEWUN6QTRnRmlBY0lDVnFJZ2tnRWlBZWFpSUtheUFJYkRZQ2dBOGdGaUFsSUJ4ckloRWdIaUFTYXlJU2F5QUliRFlDOEE0Z0ZpQVJJQkpxSUFoc05nTGdEaUFXSUFrZ0Ntb2dDR3cyQXRBT0lCWWdIU0FUYXlJSklCa2dEV3NpQ21zZ0NHdzJBdlFPSUJZZ0NTQUthaUFJYkRZQzVBNGdGaUFOSUJscUlna2dFeUFkYWlJS2FpQUliRFlDMUE0Z0NpQUpheUFJYkF3QkN5QVdRUUZCQWlBdFFRWnJRUVpKR3lJSklCQWdMbW9pSmlBUElDSnFJak5ySUFoc2FrRUNJQXBySWdwMU5nTDREaUFXSUM0Z0VHc2lFQ0FpSUE5cklnOXJJQWhzSUFscUlBcDFOZ0xvRGlBV0lBOGdFR29nQ0d3Z0NXb2dDblUyQXRnT0lCWWdKaUF6YWlBSWJDQUphaUFLZFRZQ3lBNGdGaUFWSUN4cUlnOGdFU0FoYWlJUWF5QUliQ0FKYWlBS2RUWUMvQTRnRmlBc0lCVnJJaFVnSVNBUmF5SVJheUFJYkNBSmFpQUtkVFlDN0E0Z0ZpQVJJQlZxSUFoc0lBbHFJQXAxTmdMY0RpQVdJQThnRUdvZ0NHd2dDV29nQ25VMkFzd09JQllnSENBbGFpSVJJQklnSG1vaUQyc2dDR3dnQ1dvZ0NuVTJBb0FQSUJZZ0pTQWNheUljSUI0Z0Vtc2lFbXNnQ0d3Z0NXb2dDblUyQXZBT0lCWWdFaUFjYWlBSWJDQUphaUFLZFRZQzRBNGdGaUFQSUJGcUlBaHNJQWxxSUFwMU5nTFFEaUFXSUIwZ0Uyc2lFaUFaSUExckloRnJJQWhzSUFscUlBcDFOZ0wwRGlBV0lCRWdFbW9nQ0d3Z0NXb2dDblUyQXVRT0lCWWdEU0FaYWlJTklCTWdIV29pRW1vZ0NHd2dDV29nQ25VMkF0UU9JQklnRFdzZ0NHd2dDV29nQ25VTE5nS0VEd3NnRkNFSklDZ2hDQU5BSUFZaENpQUpJQllnR2lnQ0FFRUNkR3BCeUE1cUtBSUFJZ1kyQWdBQ1FBSkFJQVpGQkVBZ0J5OEJBRVVOQVF0QkFTRUdJQWtnRnlnQ0ZFRUJJQWdvQWdBUUJVVU5BUXdiQ3lBSlFmLy8vd2MyQWdBTElCcEJCR29oR2lBS1FRRnJJUVlnQ0VFRWFpRUlJQWRCQW1vaEJ5QUpRVUJySVFrZ0NnMEFDd3dFQ3lBVVFmLy8vd2MyQWdBTEFrQWdGeThCSGdSQUlFb2dGeWdDRkVFQUlCWW9Bc3dQRUFWRkRRRkJBU0VHREJnTElFcEIvLy8vQnpZQ0FBc0NRQ0FYTHdFZ0JFQWdTU0FYS0FJVVFRQWdGaWdDMEE4UUJVVU5BVUVCSVFZTUdBc2dTVUgvLy84SE5nSUFDd0pBSUJjdkFTSUVRQ0JJSUJjb0FoUkJBQ0FXS0FMVUR4QUZSUTBCUVFFaEJnd1lDeUJJUWYvLy93YzJBZ0FMQWtBZ0Z5OEJKQVJBSUVjZ0Z5Z0NGRUVBSUJZb0F0Z1BFQVZGRFFGQkFTRUdEQmdMSUVkQi8vLy9CellDQUFzQ1FDQVhMd0VtQkVBZ1JpQVhLQUlVUVFBZ0ZpZ0MzQThRQlVVTkFVRUJJUVlNR0FzZ1JrSC8vLzhITmdJQUN3SkFJQmN2QVNnRVFDQkZJQmNvQWhSQkFDQVdLQUxnRHhBRlJRMEJRUUVoQmd3WUN5QkZRZi8vL3djMkFnQUxBa0FnRnk4QktnUkFJRVFnRnlnQ0ZFRUFJQllvQXVRUEVBVkZEUUZCQVNFR0RCZ0xJRVJCLy8vL0J6WUNBQXNDUUNBWEx3RXNCRUFnUXlBWEtBSVVRUUFnRmlnQzZBOFFCVVVOQVVFQklRWU1HQXNnUTBILy8vOEhOZ0lBQ3dKQUlCY3ZBUzRFUUNCQ0lCY29BaFJCQUNBV0tBTHNEeEFGUlEwQlFRRWhCZ3dZQ3lCQ1FmLy8vd2MyQWdBTEFrQWdGeThCTUFSQUlFRWdGeWdDRkVFQUlCWW9BdkFQRUFWRkRRRkJBU0VHREJnTElFRkIvLy8vQnpZQ0FBc0NRQ0FYTHdFeUJFQWdRQ0FYS0FJVVFRQWdGaWdDOUE4UUJVVU5BVUVCSVFZTUdBc2dRRUgvLy84SE5nSUFDd0pBSUJjdkFUUUVRQ0EvSUJjb0FoUkJBQ0FXS0FMNER4QUZSUTBCUVFFaEJnd1lDeUEvUWYvLy93YzJBZ0FMQWtBZ0Z5OEJOZ1JBSUQ0Z0Z5Z0NGRUVBSUJZb0F2d1BFQVZGRFFGQkFTRUdEQmdMSUQ1Qi8vLy9CellDQUFzQ1FDQVhMd0U0QkVBZ09pQVhLQUlVUVFBZ0ZpZ0NnQkFRQlVVTkFVRUJJUVlNR0FzZ09rSC8vLzhITmdJQUN5QVhMd0U2QkVBZ05pRUlJQnNoQ1NBM0lCY29BaFJCQUNBV0tBS0VFQkFGUlEwRFFRRWhCZ3dYQ3lBM1FmLy8vd2MyQWdBZ05pRUlJQnNoQ1F3Q0N5QXBJREZxSWdaQ0FEY0NIQ0FHSUMwMkFoUWdCa0lBTndGS0lBWkNBRGNDUkNBR1FnQTNBandnQmtJQU53STBJQVpDQURjQ0xDQUdRZ0EzQWlRZ0h5QXJLQUlFSWdZMkF0d0RJQjhnS3lnQ0NEWUM0QU1nS2lBR2JpSUhRUVIwSVJrZ0tpQUdJQWRzYTBFRWRDRWVRUUFoSEF3Q0N5QUlRUkE3QVFBZ0JrRVFPd0ZLSUFaQmtJREFBRFlCUmlBR1FwQ0F3SUNBZ29BSU53RStJQVpDa0lEQWdJQ0NnQWczQVRZZ0JrS1FnTUNBZ0lLQUNEY0JMaUFHUXBDQXdJQ0Fnb0FJTndFbUlBWkNrSURBZ0lDQ2dBZzNBUjRNRWdzZ0Z5Z0NHQ0FYS0FJVWFpSUdRVE1nQmtFelNCc2lCa0VBSUFaQkFFb2JJZ2RCQW5SQjBEMXFLQUlBSVFvQ1FBSkFJQmN2QVU0TkFDQVhMd0ZRRFFBZ1RDZ0NBQ0VIREFFTElBcEJrRDFxTFFBQVFReHNRY0E4YWlnQ0FDRUdRUUVoRXlBSFFRWnJRUzFOQkVCQkFDRVRJQVlnQ2tHQVBHb3RBQUJCQVd0MElRWUxJQllnRmlnQ2lBOGlCeUFXS0FLUUR5SU5heUlTSUJZb0Fvd1BJaEVnRmlnQ2xBOGlEMnNpR21zZ0Jtd2dFM1UyQXBRUElCWWdFaUFhYWlBR2JDQVRkVFlDa0E4Z0ZpQUhJQTFxSWdjZ0R5QVJhaUlOYXlBR2JDQVRkVFlDakE4Z0ZpQUhJQTFxSUFac0lCTjFJZ2MyQW9nUElCWWdGaWdDcEE4aURTQVdLQUtjRHlJU2FpSVJJQllvQXFBUElnOGdGaWdDbUE4aUdtb2lIR29nQm13Z0UzVTJBcGdQSUJZZ0VpQU5heUlOSUJvZ0Qyc2lFbW9nQm13Z0UzVTJBcUFQSUJZZ0hDQVJheUFHYkNBVGRUWUNuQThnRmlBU0lBMXJJQVpzSUJOMU5nS2tEd3NnQ1NBSE5nSUFBa0FDUUNBSFJRUkFJQmN2QVR4RkRRRUxRUUVoQmlBSklBcEJBU0FJS0FJQUVBVkZEUUVNRlFzZ0NVSC8vLzhITmdJQUN5QUpJQllvQW93UElnWTJBa0FnQ1VGQWF5RUhBa0FDUUNBR1JRUkFJQmN2QVQ1RkRRRUxRUUVoQmlBSElBcEJBU0FJS0FJRUVBVkZEUUVNRlFzZ0IwSC8vLzhITmdJQUN5QUpJQllvQXBBUElnWTJBb0FCSUFsQmdBRnFJUWNDUUFKQUlBWkZCRUFnRjBGQWF5OEJBRVVOQVF0QkFTRUdJQWNnQ2tFQklBZ29BZ2dRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUFrZ0ZpZ0NsQThpQmpZQ3dBRWdDVUhBQVdvaEJ3SkFBa0FnQmtVRVFDQVhMd0ZDUlEwQkMwRUJJUVlnQnlBS1FRRWdDQ2dDREJBRlJRMEJEQlVMSUFkQi8vLy9CellDQUFzZ0NTQkxLQUlBSWdZMkFvQUNJQWxCZ0FKcUlRY0NRQUpBSUFaRkJFQWdGeThCUkVVTkFRdEJBU0VHSUFjZ0NrRUJJQWdvQWhBUUJVVU5BUXdWQ3lBSFFmLy8vd2MyQWdBTElBa2dGaWdDbkE4aUJqWUN3QUlnQ1VIQUFtb2hCd0pBQWtBZ0JrVUVRQ0FYTHdGR1JRMEJDMEVCSVFZZ0J5QUtRUUVnQ0NnQ0ZCQUZSUTBCREJVTElBZEIvLy8vQnpZQ0FBc2dDU0FXS0FLZ0R5SUdOZ0tBQXlBSlFZQURhaUVIQWtBQ1FDQUdSUVJBSUJjdkFVaEZEUUVMUVFFaEJpQUhJQXBCQVNBSUtBSVlFQVZGRFFFTUZRc2dCMEgvLy84SE5nSUFDeUFKSUJZb0FxUVBJZ1kyQXNBRElBbEJ3QU5xSVFjQ1FBSkFJQVpGQkVBZ0Z5OEJTa1VOQVF0QkFTRUdJQWNnQ2tFQklBZ29BaHdRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUF4QkJrOEVRQ0FPSVFrZ0gwRVFhaUVaUVFBaEUwRUFJUThqQUVIUUFHc2lFQ1FBQWtBZ0trVU5BQ0FyS0FJQUlnMGdLaUFyS0FJRUlncHVJaEVnQ213aUJrRUlkR29nS2lBR2F5SU1RUVIwYWlFSUlBcEJCSFFoQnlBcktBSUlJUTRnRUVFZ2FpRVNJQW9nS2tzaUdrVUVRQ0FRSUFnZ0IwRi9jMm9pQmkwQUFEb0FJQ0FRSUFnZ0Iyc3RBQUE2QUNFZ0VDQUdMUUFDT2dBaUlCQWdCaTBBQXpvQUl5QVFJQVl0QUFRNkFDUWdFQ0FHTFFBRk9nQWxJQkFnQmkwQUJqb0FKaUFRSUFZdEFBYzZBQ2NnRUNBR0xRQUlPZ0FvSUJBZ0JpMEFDVG9BS1NBUUlBWXRBQW82QUNvZ0VDQUdMUUFMT2dBcklCQWdCaTBBRERvQUxDQVFJQVl0QUEwNkFDMGdFQ0FHTFFBT09nQXVJQkFnQmkwQUR6b0FMeUFRSUFZdEFCQTZBREFnRUNBR0xRQVJPZ0F4SUJBZ0JpMEFFam9BTWlBUUlBWXRBQk02QURNZ0VDQUdMUUFVT2dBMElCQkJOV29oRWdzZ0NpQU9iQ0VPSUF3RWZ5QVFJQWhCQVdzaUJpMEFBRG9BQUNBUUlBWWdCMm9pQmkwQUFEb0FBU0FRSUFZZ0Iyb2lCaTBBQURvQUFpQVFJQVlnQjJvaUJpMEFBRG9BQXlBUUlBWWdCMm9pQmkwQUFEb0FCQ0FRSUFZZ0Iyb2lCaTBBQURvQUJTQVFJQVlnQjJvaUJpMEFBRG9BQmlBUUlBWWdCMm9pQmkwQUFEb0FCeUFRSUFZZ0Iyb2lCaTBBQURvQUNDQVFJQVlnQjJvaUJpMEFBRG9BQ1NBUUlBWWdCMm9pQmkwQUFEb0FDaUFRSUFZZ0Iyb2lCaTBBQURvQUN5QVFJQVlnQjJvaUJpMEFBRG9BRENBUUlBWWdCMm9pQmkwQUFEb0FEU0FRSUFZZ0Iyb2lCaTBBQURvQURpQVFJQVlnQjJvdEFBQTZBQThnRUVFUWFnVWdFQXNoQmlBTklBNUJDSFJxSUJFZ0NrRURkQ0lIYkVFRGRHb2dERUVEZEdvaERTQUhRZmovLy84SGNTRUhJQnBGQkVBZ0VpQU5JQWRCZjNOcUlnZ3RBQUE2QUFBZ0VpQU5JQWRyTFFBQU9nQUJJQklnQ0MwQUFqb0FBaUFTSUFndEFBTTZBQU1nRWlBSUxRQUVPZ0FFSUJJZ0NDMEFCVG9BQlNBU0lBZ3RBQVk2QUFZZ0VpQUlMUUFIT2dBSElCSWdDRUVJYWlJSUxRQUFPZ0FJSUJJZ0RrRUdkQ0FJYWlJSVFRaHJMUUFBT2dBSklCSWdDRUVIYXkwQUFEb0FDaUFTSUFoQkJtc3RBQUE2QUFzZ0VpQUlRUVZyTFFBQU9nQU1JQklnQ0VFRWF5MEFBRG9BRFNBU0lBaEJBMnN0QUFBNkFBNGdFaUFJUVFKckxRQUFPZ0FQSUJJZ0NFRUJheTBBQURvQUVDQVNJQWd0QUFBNkFCRUxJQXhGRFFBZ0JpQU5RUUZySWdndEFBQTZBQUFnQmlBSElBaHFJZ2d0QUFBNkFBRWdCaUFISUFocUlnZ3RBQUE2QUFJZ0JpQUhJQWhxSWdndEFBQTZBQU1nQmlBSElBaHFJZ2d0QUFBNkFBUWdCaUFISUFocUlnZ3RBQUE2QUFVZ0JpQUhJQWhxSWdndEFBQTZBQVlnQmlBSElBaHFJZ2d0QUFBNkFBY2dCaUFISUFocUlBNGdDbXRCQm5ScUlnZ3RBQUE2QUFnZ0JpQUhJQWhxSWdndEFBQTZBQWtnQmlBSElBaHFJZ2d0QUFBNkFBb2dCaUFISUFocUlnZ3RBQUE2QUFzZ0JpQUhJQWhxSWdndEFBQTZBQXdnQmlBSElBaHFJZ2d0QUFBNkFBMGdCaUFISUFocUlnZ3RBQUE2QUE0Z0JpQUhJQWhxTFFBQU9nQVBDd0pBQWtBZ0NTZ0NBQ0lLUVFkUEJFQUNRQ0FKS0FMSUFTSUdSUVJBUVFBaENDQWtRUUJISVJJTUFRc2dKRUVBUnlFU0lBa29BZ1FpQnlBR0tBSUVJZ3hHSVFnZ0J5QU1SdzBBSUNSRkRRQkJBQ0FJSUFZb0FnQkJCa2tiSVFoQkFTRVNDMEVBSVJFQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRVNBU2NVVU5BRUVBSUJFZ0JpZ0NBRUVHU1JzaEVRc0NRQ0FKS0FMVUFTSUdSUTBBSUFrb0FnUWdCaWdDQkVZaUR5QVNjVVVOQUNBR0tBSUFRUVZMSVE4TFFRRWhCd0pBQWtBQ1FBSkFBa0FnQ2tFQmFrRURjUTREQUFFQ0F3c2dFVVVOQmtFQUlSRWdFQzBBTUNFR0lCQXRBQzhoQnlBUUxRQXVJUWdnRUMwQUxTRUtJQkF0QUN3aERDQVFMUUFySVE0Z0VDMEFLaUVOSUJBdEFDa2hFaUFRTFFBb0lROGdFQzBBSnlFYUlCQXRBQ1loSENBUUxRQWxJUmNnRUMwQUpDRVZJQkF0QUNNaEhpQVFMUUFpSVNFZ0VDMEFJU0VpSUJraEV3TkFJQk1nQmpvQUR5QVRJQWM2QUE0Z0V5QUlPZ0FOSUJNZ0Nqb0FEQ0FUSUF3NkFBc2dFeUFPT2dBS0lCTWdEVG9BQ1NBVElCSTZBQWdnRXlBUE9nQUhJQk1nR2pvQUJpQVRJQnc2QUFVZ0V5QVhPZ0FFSUJNZ0ZUb0FBeUFUSUI0NkFBSWdFeUFoT2dBQklCTWdJam9BQUNBVFFSQnFJUk1nRVVFQmFpSVJRUkJIRFFBTERBTUxJQWhGRFFVZ0dTQVFNUUFBUW9HQ2hJaVFvTUNBQVg0aWJqY0FDQ0FaSUc0M0FBQWdHU0FRTVFBQlFvR0NoSWlRb01DQUFYNGliamNBR0NBWklHNDNBQkFnR1NBUU1RQUNRb0dDaElpUW9NQ0FBWDRpYmpjQUtDQVpJRzQzQUNBZ0dTQVFNUUFEUW9HQ2hJaVFvTUNBQVg0aWJqY0FPQ0FaSUc0M0FEQWdHU0FRTVFBRVFvR0NoSWlRb01DQUFYNGliamNBU0NBWklHNDNBRUFnR1NBUU1RQUZRb0dDaElpUW9NQ0FBWDRpYmpjQVdDQVpJRzQzQUZBZ0dTQVFNUUFHUW9HQ2hJaVFvTUNBQVg0aWJqY0FhQ0FaSUc0M0FHQWdHU0FRTVFBSFFvR0NoSWlRb01DQUFYNGliamNBZUNBWklHNDNBSEFnR1NBUU1RQUlRb0dDaElpUW9NQ0FBWDRpYmpjQWlBRWdHU0J1TndDQUFTQVpJQkF4QUFsQ2dZS0VpSkNnd0lBQmZpSnVOd0NZQVNBWklHNDNBSkFCSUJrZ0VERUFDa0tCZ29TSWtLREFnQUYrSW00M0FLZ0JJQmtnYmpjQW9BRWdHU0FRTVFBTFFvR0NoSWlRb01DQUFYNGliamNBdUFFZ0dTQnVOd0N3QVNBWklCQXhBQXhDZ1lLRWlKQ2d3SUFCZmlKdU53RElBU0FaSUc0M0FNQUJJQmtnRURFQURVS0Jnb1NJa0tEQWdBRitJbTQzQU5nQklCa2diamNBMEFFZ0dTQVFNUUFPUW9HQ2hJaVFvTUNBQVg0aWJqY0E2QUVnR1NCdU53RGdBU0FaSUJBeEFBOUNnWUtFaUpDZ3dJQUJmaUp1TndENEFTQVpJRzQzQVBBQkRBSUxJQmtDZndKQUlBaEZEUUFnRVVVTkFDQVFMUUFQSUJBdEFEQWdFQzBBRGlBUUxRQXZJQkF0QUEwZ0VDMEFMaUFRTFFBTUlCQXRBQzBnRUMwQUN5QVFMUUFzSUJBdEFBb2dFQzBBS3lBUUxRQUpJQkF0QUNvZ0VDMEFDQ0FRTFFBcElCQXRBQWNnRUMwQUtDQVFMUUFHSUJBdEFDY2dFQzBBQlNBUUxRQW1JQkF0QUFRZ0VDMEFKU0FRTFFBRElCQXRBQ1FnRUMwQUFpQVFMUUFqSUJBdEFBRWdFQzBBSWlBUUxRQWhJQkF0QUFCcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFRUkJxUVFWMkRBRUxJQWdFUUNBUUxRQVBJQkF0QUE0Z0VDMEFEU0FRTFFBTUlCQXRBQXNnRUMwQUNpQVFMUUFKSUJBdEFBZ2dFQzBBQnlBUUxRQUdJQkF0QUFVZ0VDMEFCQ0FRTFFBRElCQXRBQUlnRUMwQUFDQVFMUUFCYW1wcWFtcHFhbXBxYW1wcWFtcHFRUWhxUVFSMkRBRUxRWUFCSUJGRkRRQWFJQkF0QURBZ0VDMEFMeUFRTFFBdUlCQXRBQzBnRUMwQUxDQVFMUUFySUJBdEFDb2dFQzBBS1NBUUxRQW9JQkF0QUNjZ0VDMEFKaUFRTFFBbElCQXRBQ1FnRUMwQUl5QVFMUUFoSUJBdEFDSnFhbXBxYW1wcWFtcHFhbXBxYW1wQkNHcEJCSFlMUVlBQ0VBTWFEQUVMSUFoQkFFY2dFVUVBUjNFZ0QzRkZEUU1nRUMwQUNDQVFMUUFHYXlBUUxRQVBJZ1lnRUMwQUlDSUhhMEVEZEdvZ0VDMEFDU0FRTFFBRmEwRUJkR29nRUMwQUNpQVFMUUFFYTBFRGJHb2dFQzBBQ3lBUUxRQURhMEVDZEdvZ0VDMEFEQ0FRTFFBQ2EwRUZiR29nRUMwQURTQVFMUUFCYTBFR2JHb2dFQzBBRGlBUUxRQUFhMEVIYkdwQkJXeEJJR3BCQm5VaENpQVFMUUFwSUJBdEFDZHJJQkF0QUNvZ0VDMEFKbXRCQVhScUlCQXRBQ3NnRUMwQUpXdEJBMnhxSUJBdEFDd2dFQzBBSkd0QkFuUnFJQkF0QUMwZ0VDMEFJMnRCQld4cUlCQXRBQzRnRUMwQUltdEJCbXhxSUJBdEFDOGdFQzBBSVd0QkIyeHFJQkF0QURBaURDQUhhMEVEZEdwQkJXeEJJR3BCQm5VaUNFRURkQ0VPSUFoQkIyd2hEU0FJUVFac0lSRWdDRUVGYkNFUElBaEJBMndoR2lBSVFYMXNJUk1nQ0VGN2JDRWNJQWhCZW13aEZ5QUlRWGxzSVJWQkFDQUlRUUYwSWg1cklTRkJBQ0FJUVFKMElpSnJJU2tnQmlBTWFrRUVkRUVRYWlFTVFRQWhFZ05BSUJrZ0VrRUVkR29pQmlBTUlCSkJCMnNnQ214cUlnZEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUhJQVlnQnlBWGFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBRWdCaUFISUJWcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUFDQUdJQWNnSEdwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBQ0lBWWdCeUFwYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUFNZ0JpQUhJQk5xUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BQkNBR0lBY2dJV3BCQlhVaUhVSC9BU0FkUWY4QlNCc2lIVUVBSUIxQkFFb2JPZ0FGSUFZZ0J5QUlhMEVGZFNJZFFmOEJJQjFCL3dGSUd5SWRRUUFnSFVFQVNoczZBQVlnQmlBSElBaHFRUVYxSWgxQi93RWdIVUgvQVVnYkloMUJBQ0FkUVFCS0d6b0FDQ0FHSUFjZ0htcEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUpJQVlnQnlBYWFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBb2dCaUFISUNKcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUN5QUdJQWNnRDJwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBTUlBWWdCeUFSYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUEwZ0JpQUhJQTFxUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BRGlBR0lBY2dEbXBCQlhVaUJrSC9BU0FHUWY4QlNCc2lCa0VBSUFaQkFFb2JPZ0FQSUJKQkFXb2lFa0VRUncwQUN3c2dHU0FXUWNnQ2FrRUFFQXNnR1NBV1FZZ0Rha0VCRUFzZ0dTQVdRY2dEYWtFQ0VBc2dHU0FXUVlnRWFrRURFQXNnR1NBV1FjZ0Vha0VFRUFzZ0dTQVdRWWdGYWtFRkVBc2dHU0FXUWNnRmFrRUdFQXNnR1NBV1FZZ0dha0VIRUFzZ0dTQVdRY2dHYWtFSUVBc2dHU0FXUVlnSGFrRUpFQXNnR1NBV1FjZ0hha0VLRUFzZ0dTQVdRWWdJYWtFTEVBc2dHU0FXUWNnSWFrRU1FQXNnR1NBV1FZZ0pha0VORUFzZ0dTQVdRY2dKYWtFT0VBc2dHU0FXUVlnS2FrRVBFQXNNQVFzZ0NVSElBV29oQ2lBSlFjd0JhaUVNSUFsQjBBRnFJUTRnQ1VIVUFXb2hEUU5BSUFvaEJ5QUpJUWhCQUNFR1FRQWhFUUpBQWtBQ1FBSkFBa0FDUUNBVFFRTjBJaEpCb0N0cUtRTUFJbTZuRGdVREFBRUNCQVVMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQUF3QkN5QUpLQUlFSWdZZ0NDZ0NCQ0lIUmlFUkFrQWdCaUFIUncwQUlDUkZEUUJCQUNBUklBZ29BZ0JCQmtrYklSRUxJQWdoQmdzZ0NpRUhJQWtoQ0FKQUFrQUNRQUpBQWtBQ1FBSkFJQkpCNEN4cUtRTUFJbStuRGdVREFBRUNCUVFMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQVF0QkFDRWhJQkZCQUVjaEYwRUNJUWRCQUNFcERBRUxJQWtvQWdRaUJ5QUlLQUlFSWc5R0lSd0NRQ0FISUE5SERRQWdKRVVOQUVFQUlCd2dDQ2dDQUVFR1NSc2hIQXRCQUNFaElCeEJBRWNoS1NBUlFRQkhJUmRCQWlFSElCRkZEUUFnSEVVTkFFRUNJUkVDZnlBR0tBSUFRUVpHQkVBZ0JpQnVRaUNJcDBIL0FYRnFMUUJTSVFjTElBY0xBbjhnQ0NnQ0FFRUdSZ1JBSUFnZ2IwSWdpS2RCL3dGeGFpMEFVaUVSQ3lBUkN5QUhJQkZKR3lFSFFRRWhJVUVCSVNsQkFTRVhDeUFXSUJOQkFuUWlFV29pQmlnQ0RFVUVRQ0FHS0FKTUlnWWdCaUFIVDJvaEJ3c2dDU0FUYWlBSE9nQlNRUUFoRlNBS0lRWWdDU0VJUVFBaEhnSkFBa0FDUUFKQUFrQUNRQ0FTUWFBdWFpZ0NBQTRGQXdBQkFnUUZDeUFNSVFZTUFnc2dEaUVHREFFTElBMGhCZ3NnQmlnQ0FDSUlSUTBCQ3lBSktBSUVJZ1lnQ0NnQ0JDSVBSaUVlSUFZZ0QwY05BQ0FrUlEwQVFRQWdIaUFJS0FJQVFRWkpHeUVlQ3lBS0lRWWdDU0VJQWtBQ1FBSkFBa0FDUUFKQUlCSkI0QzlxS0FJQURnVURBQUVDQkFVTElBd2hCZ3dDQ3lBT0lRWU1BUXNnRFNFR0N5QUdLQUlBSWdoRkRRRUxJQWtvQWdRaUJpQUlLQUlFSWhKR0lSVWdCaUFTUncwQUlDUkZEUUJCQUNBVklBZ29BZ0JCQmtrYklSVUxJQkZCOENscUtBSUFJU1lnRVVHd0tXb29BZ0FoTXdKQVFZVUtJQk4yUVFGeElpNEVRQ0FRSUNacUloRkJBMm9oRWlBUlFRSnFJUWdnRVVFQmFpRUdEQUVMSUNaQkJIUWdNMm9nR1dvaUVVRXZhaUVTSUJGQkgyb2hDQ0FSUVE5cUlRWWdFVUVCYXlFUkN5QUlMUUFBSVIwZ0VpMEFBQ0VJSUFZdEFBQWhKU0FSTFFBQUlTd0NRRUV6SUJOMlFRRnhCRUFnRUVFZ2FpQXphaUlSTFFBSUlROGdFUzBBQnlFd0lCRXRBQVloSWlBUkxRQUZJVFVnRVMwQUJDRVNJQkV0QUFNaEhDQVJMUUFDSVJvZ0VTMEFBU0VHREFFTElCa2dKa0VCYXlKVFFRUjBJRE5xYWlJUkxRQUFJUVlnRVMwQUJ5RVBJQkV0QUFZaE1DQVJMUUFGSVNJZ0VTMEFCQ0UxSUJFdEFBTWhFaUFSTFFBQ0lSd2dFUzBBQVNFYUlDNEVRQ0FRSUZOcUlSRU1BUXNnRVVFQmF5RVJDeUFSTFFBQUlTNENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FIRGdnQUFRSURCQVVHQndnTElDbEZCRUJCQVNFSERBd0xJQVpCL3dGeElCcEIvd0Z4UVFoMGNpQWNRZjhCY1VFUWRISWdFa0VZZEhJaEtTQUdJZ2NoSGlBYUloY2hJU0FjSWhFaENDQVNJaFVoRHd3SUN5QVhSUVJBUVFFaEJ3d0xDeUFJUVlHQ2hBaHNJU2tnSFVHQmdvUUliQ0llUVJoMklROGdIa0VRZGlFSUlCNUJDSFloSVNBbFFZR0NoQWhzSWdaQkdIWWhGU0FHUVJCMklSRWdCa0VJZGlFWElDeEJnWUtFQ0d3aUIwRVlkaUVTSUFkQkVIWWhIQ0FIUVFoMklSb01Cd3NDZnlBbElDeHFJQWhxSUIxcUlCSkIvd0Z4YWlBY1FmOEJjV29nR2tIL0FYRnFJQVpCL3dGeGFrRUVha0g0L3dOeFFRTjJJQ0VOQUJvZ0pTQXNhaUFJYWlBZGFrRUNha0VDZGlBWERRQWFRWUFCSUNsRkRRQWFJQkpCL3dGeElCeEIvd0Z4YWlBYVFmOEJjV29nQmtIL0FYRnFRUUpxUVFKMkN5SUhRZjhCY1VHQmdvUUliQ0VwSUFjaUdpSWNJaElpQmlFWElBWWlFU0lWSWg0aUlTSUlJUThNQmdzZ0tVVUVRRUVCSVFjTUNRc2dIa1VFUUNBU0lnOGlNQ0lpSVRVTElDSkIvd0Z4SWdjZ0QwSC9BWEVpRVdvZ01FSC9BWEVpRDBFQmRHcEJBbW9pRjBFT2RFR0FnUHdIY1NBU1FmOEJjU0llUVFKcUlpRWdCMm9nTlVIL0FYRWlDRUVCZEdwQkFuWWlFaUFQUVFKcUlnOGdDR29nQjBFQmRHcEJBbllpRlVFSWRISkIvLzhEY1hJZ0R5QVJRUU5zYWtFV2RFR0FnSUI0Y1hJaEtTQVhRUUoySVE4Z0hFSC9BWEVpRVVFQ2FpSWNJQVpCL3dGeGFpQWFRZjhCY1NJR1FRRjBha0VDZGlFSElBWWdJV29nRVVFQmRHcEJBbllpR2lFR0lCd2dIa0VCZEdvZ0NHcEJBbllpSENFWElCd2hIaUFTSWhFaElTQVZJUWdNQlF0QkFTRUhJQ0VnRlVFQVIzRkZEUWNnTENBbFFRRjBhaUFkYWtFQ2FpSVJRUVowUVlEK0EzRWdCa0gvQVhFaUQwRUNhaUlYSUN4cUlDNUJBWFJxUVFKMklnZEJHSFFnSlVFQ2FpSUdJQ3hCQVhScUlDNXFRUUoySWlGQkVIUnljaUFHSUFocUlCMUJBWFJxUVFKMmNpRXBJQnBCL3dGeElnaEJBbW9pR2lBU1FmOEJjV29nSEVIL0FYRWlIRUVCZEdwQkFuWWhFaUFSUVFKMklSNGdJU0VHSUJvZ0QwRUJkR29nTG1wQkFuWWlHaUVSSUFoQkFYUWdIR29nRjJwQkFuWWlIQ0VWSUFjaUZ5RUlJQm9oRHd3RUMwRUJJUWNnSVNBVlFRQkhjVVVOQmlBYVFmOEJjU0lQUVFKcUlnY2dCa0gvQVhFaUNFRUJkR29nTG1wQkFuWWlGMEVRZENBSVFRSnFJZ1lnTEdvZ0xrRUJkR29pR2tFR2RFR0EvZ054Y2lBR0lCeEIvd0Z4SWdZZ0QwRUJkR3BxUVFKMkloRkJHSFJ5SUN3Z0pVRUJkR29nSFdwQkFtcEJBblp5SVNrZ0JrRUJhaUljSUJKQi93RnhJaFZxUVFGMklSSWdKU0FzUVFGMGFpQXVha0VDYWtFQ2RpRWVJQWNnRldvZ0JrRUJkR3BCQW5ZaEZTQWFRUUoySVFZZ0NDQXVha0VCYWtFQmRpSUhJU0VnQ0NBUGFrRUJha0VCZGlJYUlRZ2dEeUFjYWtFQmRpSWNJUThNQXd0QkFTRUhJQ0VnRlVFQVIzRkZEUVVnSlVFQ2FpSVBJQWhxSUIxQkFYUnFRUVowUVlEK0EzRWdMRUVDYWlJSElDVkJBWFJxSUIxcVFRSjJJaUZCR0hRZ0hTQWxha0VCYWtFQmRpSWVRUkIwY25JZ0NDQWRha0VCYWtFQmRuSWhLU0FHUWY4QmNTSUdJQnhCL3dGeGFpQWFRZjhCY1NJSVFRRjBha0VDYWtFQ2RpRVNJQWdnQmtFQmRHb2dMbXBCQW1wQkFuWWhIQ0FHSUFkcUlDNUJBWFJxUVFKMkloVWhHaUFzUVFGcUlnWWdMbXBCQVhZaUJ5RVJJQVlnSldwQkFYWWlCaUVJSUE4Z0xFRUJkR29nTG1wQkFuWWlGeUVQREFJTElDbEZCRUJCQVNFSERBVUxJQkpCL3dGeElpRkJBbW9pRVNBaUlCSWdIaHRCL3dGeElnZHFJRFVnRWlBZUcwSC9BWEVpQ0VFQmRHb2lGVUVPZEVHQWdQd0hjU0FSSUJwQi93RnhJaHBxSUJ4Qi93RnhJaHhCQVhScVFRSjJJaGNnSEVFQ2FpSWlJQWhxSUNGQkFYUnFRUUoySWhGQkNIUnlRZi8vQTNGeUlBZ2dNQ0FTSUI0YlFmOEJjV29nQjBFQmRHcEJGblJCZ0lDQUJHcEJnSUNBZUhGeUlTa2dCeUFJYWtFQmFrRUJkaUVQSUJWQkFuWWhGU0FhSUFaQi93RnhJZ1pxUVFGcVFRRjJJUWNnQmlBaWFpQWFRUUYwYWtFQ2RpRUdJQm9nSEdwQkFXcEJBWFlpR2lFZUlDRkJBV29pRWlBY2FrRUJkaUljSVNFZ0NDQVNha0VCZGlJU0lRZ01BUXNnRjBVRVFFRUJJUWNNQkFzZ0NFRUlkQ0FJY2lBSVFSQjBjaUFJUVJoMGNpRXBJQjFCQW1vaUR5QXNhaUFsUVFGMGFrRUNkaUVhSUNWQkFXb2lCaUFzYWtFQmRpRUhJQVlnSFdwQkFYWWlIQ0VHSUFnZ0pXb2dIVUVCZEdwQkFtcEJBbllpRWlFWElBZ2dIV3BCQVdwQkFYWWlFU0VlSUE4Z0NFRURiR3BCQW5ZaUZTRWhJQWdoRHdzZ0dTQW1RUVIwSUROcWFpSWlJQ2syQWpBZ0lpQWVRZjhCY1NBUFFSaDBJQWhCL3dGeFFSQjBjaUFoUWY4QmNVRUlkSEp5TmdJZ0lDSWdCa0gvQVhFZ0ZVRVlkQ0FSUWY4QmNVRVFkSElnRjBIL0FYRkJDSFJ5Y2pZQ0VDQWlJQWRCL3dGeElCSkJHSFFnSEVIL0FYRkJFSFJ5SUJwQi93RnhRUWgwY25JMkFnQWdHU0FXSUJOQkJuUnFRY2dDYWlBVEVBc2dFMEVCYWlJVFFSQkhEUUFMQ3dKQUlBa29Bc2dCSWdaRkJFQkJBQ0VPSUNSQkFFY2hFUXdCQ3lBa1FRQkhJUkVnQ1NnQ0JDSUhJQVlvQWdRaUNFWWhEaUFISUFoSERRQWdKRVVOQUVFQUlBNGdCaWdDQUVFR1NSc2hEa0VCSVJFTFFRQWhFMEVBSVJjQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRnlBUmNVVU5BRUVBSUJjZ0JpZ0NBRUVHU1JzaEZ3c2dGaWdDakFFaEdnSkFJQWtvQXRRQklnWkZEUUFnQ1NnQ0JDQUdLQUlFUmlJVElCRnhSUTBBSUFZb0FnQkJCVXNoRXdzZ0ZrSElDbW9oSENBWlFZQUNhaUVHSUJCQkVHb2hIaUFRUVRWcUlTSkJBQ0VLSUE1QkFFY2dGMEVBUjNFaUZTQVRjU0VoUVJBaEVnTkFBa0FDUUFKQUFrQUNRQ0FhRGdNQUFRSURDeUFHQW44Z0ZRUkFJQjR0QUFNZ0hpMEFBaUFlTFFBQklCNHRBQUFnSWkwQUJDQWlMUUFESUNJdEFBRWdJaTBBQW1wcWFtcHFhbXBCQkdwQkEzWWhFU0FpTFFBSUlDSXRBQWNnSWkwQUJTQWlMUUFHYW1wcVFRSnFRUUoyREFFTElCY0VRQ0FpTFFBRUlDSXRBQU1nSWkwQUFTQWlMUUFDYW1wcVFRSnFRUUoySVJFZ0lpMEFDQ0FpTFFBSElDSXRBQVVnSWkwQUJtcHFha0VDYWtFQ2Rnd0JDeUFPUlFSQVFZQUJJUkZCZ0FFTUFRc2dIaTBBQXlBZUxRQUNJQjR0QUFBZ0hpMEFBV3BxYWtFQ2FrRUNkaUlSQzBIL0FYRkJnWUtFQ0d3aUJ6WUFIQ0FHSUJGQi93RnhRWUdDaEFoc0lnZzJBQmdnQmlBSE5nQVVJQVlnQ0RZQUVDQUdJQWMyQUF3Z0JpQUlOZ0FJSUFZZ0J6WUFCQ0FHSUFnMkFBQWdCZ0ovSUE0RVFDQWVMUUFISUI0dEFBWWdIaTBBQlNBZUxRQUVhbXBxSWdkQkFtcEJBbllpRVNBWFJRMEJHaUFpTFFBSUlDSXRBQWNnSWkwQUJpQUhJQ0l0QUFWcWFtcHFRUVJxUVFOMkRBRUxJQmRGQkVCQmdBRWhFVUdBQVF3QkN5QWlMUUFFSUNJdEFBTWdJaTBBQVNBaUxRQUNhbXBxUVFKcVFRSjJJUkVnSWkwQUNDQWlMUUFISUNJdEFBVWdJaTBBQm1wcWFrRUNha0VDZGd0Qi93RnhRWUdDaEFoc0lnYzJBRHdnQmlBUlFmOEJjVUdCZ29RSWJDSUlOZ0E0SUFZZ0J6WUFOQ0FHSUFnMkFEQWdCaUFITmdBc0lBWWdDRFlBS0NBR0lBYzJBQ1FnQmlBSU5nQWdRUUFoQ0F3REN5QU9SUVJBUVFFaEJ3d0ZDeUFHSUI0eEFBQkNnWUtFaUpDZ3dJQUJmamNBQUNBR0lCNHhBQUZDZ1lLRWlKQ2d3SUFCZmpjQUNDQUdJQjR4QUFKQ2dZS0VpSkNnd0lBQmZqY0FFQ0FHSUI0eEFBTkNnWUtFaUpDZ3dJQUJmamNBR0NBR0lCNHhBQVJDZ1lLRWlKQ2d3SUFCZmpjQUlDQUdJQjR4QUFWQ2dZS0VpSkNnd0lBQmZqY0FLQ0FHSUI0eEFBWkNnWUtFaUpDZ3dJQUJmamNBTUNBR0lCNHhBQWRDZ1lLRWlKQ2d3SUFCZmpjQU9FRUFJUWdNQWdzZ0YwVUVRRUVCSVFjTUJBc2dCaUFpTFFBQklnYzZBRGdnQmlBSE9nQXdJQVlnQnpvQUtDQUdJQWM2QUNBZ0JpQUhPZ0FZSUFZZ0J6b0FFQ0FHSUFjNkFBZ2dCaUFIT2dBQUlBWWdJaTBBQWlJSE9nQTVJQVlnQnpvQU1TQUdJQWM2QUNrZ0JpQUhPZ0FoSUFZZ0J6b0FHU0FHSUFjNkFCRWdCaUFIT2dBSklBWWdCem9BQVNBR0lDSXRBQU1pQnpvQU9pQUdJQWM2QURJZ0JpQUhPZ0FxSUFZZ0J6b0FJaUFHSUFjNkFCb2dCaUFIT2dBU0lBWWdCem9BQ2lBR0lBYzZBQUlnQmlBaUxRQUVJZ2M2QURzZ0JpQUhPZ0F6SUFZZ0J6b0FLeUFHSUFjNkFDTWdCaUFIT2dBYklBWWdCem9BRXlBR0lBYzZBQXNnQmlBSE9nQURJQVlnSWkwQUJTSUhPZ0E4SUFZZ0J6b0FOQ0FHSUFjNkFDd2dCaUFIT2dBa0lBWWdCem9BSENBR0lBYzZBQlFnQmlBSE9nQU1JQVlnQnpvQUJDQUdJQ0l0QUFZaUJ6b0FQU0FHSUFjNkFEVWdCaUFIT2dBdElBWWdCem9BSlNBR0lBYzZBQjBnQmlBSE9nQVZJQVlnQnpvQURTQUdJQWM2QUFVZ0JpQWlMUUFISWdjNkFENGdCaUFIT2dBMklBWWdCem9BTGlBR0lBYzZBQ1lnQmlBSE9nQWVJQVlnQnpvQUZpQUdJQWM2QUE0Z0JpQUhPZ0FHSUFZZ0lpMEFDQ0lIT2dBL0lBWWdCem9BTnlBR0lBYzZBQzhnQmlBSE9nQW5JQVlnQnpvQUh5QUdJQWM2QUJjZ0JpQUhPZ0FQSUFZZ0J6b0FCMEVBSVFnTUFRc2dJVVVFUUVFQklRY01Bd3NnSWkwQUJTQWlMUUFEYXlBaUxRQUdJQ0l0QUFKclFRRjBhaUFpTFFBSElDSXRBQUZyUVFOc2FpQWlMUUFJSWdjZ0lpMEFBQ0lJYTBFQ2RHcEJFV3hCRUdwQkJYVWlERUY5YkNFTklBY2dIaTBBQnlJUmFrRUVkQ0FlTFFBRUlCNHRBQUpySUJFZ0NHdEJBblJxSUI0dEFBVWdIaTBBQVd0QkFYUnFJQjR0QUFZZ0hpMEFBR3RCQTJ4cVFSRnNRUkJxUVFWMUloRkJmV3hxUVJCcUlROUJDQ0VISUFZaEV3TkFJQk1nRFNBUGFpSUlRUVYxUWNBMWFpMEFBRG9BQUNBVElBZ2dER29pQ0VFRmRVSEFOV290QUFBNkFBRWdFeUFJSUF4cUlnaEJCWFZCd0RWcUxRQUFPZ0FDSUJNZ0NDQU1haUlJUVFWMVFjQTFhaTBBQURvQUF5QVRJQWdnREdvaUNFRUZkVUhBTldvdEFBQTZBQVFnRXlBSUlBeHFJZ2hCQlhWQndEVnFMUUFBT2dBRklCTWdDQ0FNYWlJSVFRVjFRY0ExYWkwQUFEb0FCaUFUSUFnZ0RHcEJCWFZCd0RWcUxRQUFPZ0FISUE4Z0VXb2hEeUFUUVFocUlSTkJBQ0VJSUFkQkFXc2lCdzBBQ3dzRFFDQWNJQWhCQm5ScUlnY29BZ0FpRVVILy8vOEhSd1JBSUFjb0FnUWhEeUFHSUJJZ0VrRURjU0FTUVJCSklnd2JRUUowSWhOQjhDbHFLQUlBUVJCQkNDQU1HeUlOYkdvZ0UwR3dLV29vQWdCcUlnd2dFU0FNTFFBQWFrSEFOV290QUFBNkFBQWdCeWdDQ0NFUklBd2dEeUFNTFFBQmFrSEFOV290QUFBNkFBRWdCeWdDRENFUElBd2dFU0FNTFFBQ2FrSEFOV290QUFBNkFBSWdEQ0FQSUF3dEFBTnFRY0ExYWkwQUFEb0FBeUFIS0FJVUlSRWdEQ0FOYWlJTUlBY29BaEFnREMwQUFHcEJ3RFZxTFFBQU9nQUFJQWNvQWhnaER5QU1JQkVnREMwQUFXcEJ3RFZxTFFBQU9nQUJJQWNvQWh3aEVTQU1JQThnREMwQUFtcEJ3RFZxTFFBQU9nQUNJQXdnRVNBTUxRQURha0hBTldvdEFBQTZBQU1nQnlnQ0pDRVJJQXdnRFdvaURDQUhLQUlnSUF3dEFBQnFRY0ExYWkwQUFEb0FBQ0FIS0FJb0lROGdEQ0FSSUF3dEFBRnFRY0ExYWkwQUFEb0FBU0FIS0FJc0lSRWdEQ0FQSUF3dEFBSnFRY0ExYWkwQUFEb0FBaUFNSUJFZ0RDMEFBMnBCd0RWcUxRQUFPZ0FESUFjb0FqUWhFU0FNSUExcUlnd2dCeWdDTUNBTUxRQUFha0hBTldvdEFBQTZBQUFnQnlnQ09DRU5JQXdnRVNBTUxRQUJha0hBTldvdEFBQTZBQUVnQnlnQ1BDRUhJQXdnRFNBTUxRQUNha0hBTldvdEFBQTZBQUlnRENBSElBd3RBQU5xUWNBMWFpMEFBRG9BQXdzZ0VrRUJhaUVTSUFoQkFXb2lDRUVFUncwQUN5QWNRWUFDYWlFY0lCNUJDR29oSGlBaVFRbHFJU0lnQmtGQWF5RUdJQW9oQjBFQklRb2dCMFVOQUF0QkFDRUhJQWtvQXNRQlFRRkxEUUFnS3lBWkVBOExJQkJCMEFCcUpBQWdCeUlHUlEwU0RCUUxJQTRvQWdBaEhDQWZJQ3NvQWdRaUJqWUMzQU1nSHlBcktBSUlOZ0xnQXlBcUlBWnVJZ2RCQkhRaEdTQXFJQVlnQjJ4clFRUjBJUjRnSEE0RUFBQUJBZ01MSUNrZ01Xb2lEU2dDQkNFR0lCWW9BcEFCSVJKQkFTRUtRWDhoRUVFQUlRbEJBQ0VhUVFBaENFRUJJUWNDZjBGL0lBMG9Bc2dCSWd4RkRRQWFRWDhnRENnQ0JDQUdSdzBBR2tFQUlRZEJmeUFNS0FJQVFRVkxEUUFhSUF3b0FwZ0JJZ2hCRUhZaEdpQU1LQUpvQ3lFUkFrQWdEU2dDekFFaURFVUVRRUVBSVJVTUFRc2dCaUFNS0FJRVJ3UkFRUUFoRlF3QkMwRUFJUW9nRENnQ0FFRUZTd1JBUVFBaEZRd0JDeUFNS0FLc0FTSVZRUkIySVFrZ0RDZ0NiQ0VRQ3lBY1JRUkFRUUFoSENBSElBcHlCRUJCQUNFTURBOExJQkVnQ0VILy93TnhJQnBCRUhSeWNrVUVRRUVBSVF3TUR3dEJBQ0VNSUJBZ0ZVSC8vd054SUFsQkVIUnlja1VORGdzZ0ZpOEJvZ0VoRHlBV0x3R2dBU0VUQW44Q1FBSkFJQTBvQXRBQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVTBOQVF3TkN3SkFJQTBvQXRRQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVXNORFNBTVFjQUJhaUVjSUF4QjhBQnFEQUlMSUFjZ0NrRUJjM0lOREF3T0N5QU1RYXdCYWlFY0lBeEI3QUJxQ3lnQ0FDRUhJQndvQWdBTUN3c2dGeWdDQkNFU0lCWW9BcEFCSVExQmZ5RUlBa0FDUUFKQUlCY29Bc3dCSWdaRkJFQkJBQ0VhREFFTFFRQWhHaUFHS0FJRUlCSkdEUUVMUVFBaERFRUFJUWtNQVF0QkFTRUpJQVlvQWdCQkJVc0VRRUVBSVF3TUFRc2dCaWdDckFFaURFRVFkaUVhSUFZb0Ftd2hDQXNnRmk4Qm9nRWhFU0FXTHdHZ0FTRVBJQWdnRFVZRVFDQWFJUVlnRENFSURBa0xRUUVoRUVGL0lSVkJBQ0VHQWtBZ0Z5Z0N5QUVpQjBVRVFFRUFJUWdNQVFzZ0VpQUhLQUlFUndSQVFRQWhDQXdCQzBFQUlSQWdCeWdDQUVFRlN3UkFRUUFoQ0F3QkN5QUhLQUtZQVNJSVFSQjJJUVlnQnlnQ2FDRVZDd0ovQWtBQ1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVk5EUUVNQ1FzQ1FDQVhLQUxVQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVkxEUWtnQjBIQUFXb2hFQ0FIUWZBQWFnd0NDeUFKSUJCeURRZ01DZ3NnQjBHc0FXb2hFQ0FIUWV3QWFnc29BZ0FoQ2lBUUtBSUFEQWNMSUJjb0FnUWhEU0FXS0FLUUFTRUpRUUVoQ2tGL0lRaEJBQ0VUQWtBZ0Z5Z0N5QUVpQmtVRVFFRUFJUXdNQVFzZ0RTQUdLQUlFUndSQVFRQWhEQXdCQzBFQUlRb2dCaWdDQUVFRlN3UkFRUUFoREF3QkN5QUdLQUtZQVNJTVFSQjJJUk1nQmlnQ2FDRUlDeUFXTHdHaUFTRVNJQll2QWFBQklSRWdDQ0FKUmcwREFuOENRQUpBSUJjb0Fzd0JJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlUwTkFRd0VDd0pBSUJjb0F0UUJJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlVzTkJDQUhRY0FCYWlFUVFRQWhCa0YvSVJWQkFBd0NDeUFLUlEwRkRBTUxJQWRCdkFGcUlSQWdCeWdDYkNFVklBY29BcXdCSWdaQkVIWUxJUWdnQnlnQ2NDRUtJQkFvQWdBTUFnc2dGMEhJQVdvaERTQVhRY3dCYWlFU0lCZEIwQUZxSVJFZ0YwSFVBV29oRDBFQUlTRURRRUVFSVNJZ0ZpQWhRUUowSWlScUlpVWlNeWdDc0FFaUJrRUNUUVJBSUFaQkFuUkJqQ3RxS0FJQUlTSUxJQmNnSkdvaUJ5QWxLQUxBQVRZQ1pBSkFBa0FnSlNnQ3dBRWlIRUVRU3cwQUlBQW9Bc2dKSUJ4QkFuUnFLQUlBSWdaRkRRQWdCaWdDRkVFQlN3MEJDeUFwSUNwQjJBRnNhaUFoUVFKMGFrRUFOZ0owREEwTElBY2dCaWdDQUNJR05nSjBJQVpGRFF3Q1FDQWlSUTBBSUJjZ0lVRUVkQ0l3YWlJZElUVWdKRUVEY2lGVFFRQWhHZ05BSUJZZ01Hb2dHa0VDZEdvaExFRUJJUzVCZnlFbUlBMGhDaUFPSVFaQkFDRUlRUUFoQ1VGL0lSVUNRQUpBQWtBQ1FBSkFBa0FnSVVFSGRDQXpLQUt3QVNKc1FRVjBhaUFhUVFOMGFpSVRRYkFaYWlnQ0FBNEZBd0FCQWdRRkN5QVNJUW9NQWdzZ0VTRUtEQUVMSUE4aENnc2dDaWdDQUNFR0N3SkFJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEJRUUFoTGlBR0tBSUFRUVZMRFFBZ0JpQVRRYlFaYWkwQUFDSUhRUUowYWlnQ2hBRWlDVUVRZGlFSUlBWWdCMEg4QVhGcUtBSmtJUlVMQzBFQUlRd2dEU0VISUE0aEJrRUFJUXBCQUNFUUFrQUNRQUpBQWtBQ1FBSkFJQk5Cc0IxcUtBSUFEZ1VEQUFFQ0JBVUxJQkloQnd3Q0N5QVJJUWNNQVFzZ0R5RUhDeUFIS0FJQUlRWUxJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEFRUUVoRUNBR0tBSUFRUVZMRFFBZ0JpQVRRYlFkYWkwQUFDSUhRUUowYWlnQ2hBRWlDa0VRZGlFTUlBWWdCMEg4QVhGcUtBSmtJU1lMSUN3dkFkSUJJVzBnTEM4QjBBRWhMQ0FOSVFjZ0RpRUdBa0FDZndKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBVFFiQWhhaWdDQUE0RkF3QUJBZ1FGQ3lBU0lRY01BZ3NnRVNFSERBRUxJQThoQndzZ0J5Z0NBQ0VHQ3lBR1JRMEFJQVlvQWdRZ0Z5Z0NCRWNOQUNBR0tBSUFRUVZORFFFTUF3c2dEU0VISUE0aEJnSkFBa0FDUUFKQUFrQUNRQ0FUUWJBbGFpZ0NBQTRGQXdBQkFnUUZDeUFTSVFjTUFnc2dFU0VIREFFTElBOGhCd3NnQnlnQ0FDRUdDeUFHUlEwQUlBWW9BZ1FnRnlnQ0JFY05BQ0FHS0FJQVFRVkxEUU1nQmlBVFFiUWxhaTBBQUNJVFFRSjBha0dFQVdvTUFnc2dFQ0F1Y2cwQ0RBUUxJQVlnRTBHMElXb3RBQUFpRTBFQ2RHcEJoQUZxQ3lFSElBWWdFMEg4QVhGcUtBSmtJUkFnQnlnQ0FBd0JDMEYvSVJCQkFBc2hCaUFjSUNaR0loTWdGU0FjUmlJSGFpQVFJQnhHYWtFQlJ3UkFJQXdnQ0NBTVFSQjBRUkIxSWd3Z0NFRVFkRUVRZFNJSFNpSUlHeUlUSUFjZ0RDQUhJQWNnREVvYklBZ2JJZ2dnQmtFUWRTSUhJQWNnQ0VnYklCTkJFSFJCRUhVZ0IwZ2JJUWdnQ2lBSklBcEJFSFJCRUhVaUNpQUpRUkIwUVJCMUlnZEtJZ2tiSWd4Qi8vOERjU0FISUFvZ0J5QUhJQXBLR3lBSkd5SUhJQVpCRUhSQkVIVWlCaUFHSUFkSUd5QU1RUkIwUVJCMUlBWklHeUVKREFFTElBa2dDaUFIR3lFSklBZ2dEQ0FIR3lFSUlBY05BQ0FURFFBZ0JrRVFkaUVJSUFZaENRc2dDU0FzYWlJR1FSQjBRUkIxUVlCQWEwSC8vd0JMRFE0Z0NDQnRhaUlIUVJCMFFSQjFRWUFRYWtIL0gwc05EZ0pBSUJjQ2Z3SkFBa0FDUUFKQUlHd09CQUFCQWdNRkN5QWRJQVk3QVlRQklCMGdCenNCaGdFZ0hTQUdPd0dJQVNBZElBYzdBWW9CSUIwZ0Jqc0JqQUVnTlNBSE93R09BU0JUREFNTElCY2dHa0VCZENBa2FpSUlRUUowYWlJSklBYzdBWVlCSUFrZ0Jqc0JoQUVnQ0VFQmNnd0NDeUFYSUJvZ0pHb2lDRUVDZEdvaUNTQUhPd0dHQVNBSklBWTdBWVFCSUFoQkFtb01BUXNnR2lBa2FndEJBblJxSWdnZ0J6c0JoZ0VnQ0NBR093R0VBUXNnR2tFQmFpSWFJQ0pHRFFFZ0pTZ0N3QUVoSEF3QUN3QUxJQ0ZCQVdvaUlVRUVSdzBBQzBFQUlRWURRQ0FmSUJjZ0JrRUNkQ0lKYWlnQ2REWUMyQU1nQmtFQlMwRURkQ0VISUFaQkEzUkJDSEVoQ0FKQUFrQUNRQUpBQWtBZ0NTQVdhaWdDc0FFT0F3QUJBZ01MSUI5QkVHb2dGeUFHUVFSMGFrR0VBV29nSDBIWUEyb2dIaUFaSUFnZ0IwRUlRUWdRREF3REN5QWZRUkJxSWdrZ0Z5QUdRUVIwYWlJS1FZUUJhaUFmUWRnRGFpSU1JQjRnR1NBSUlBZEJDRUVFRUF3Z0NTQUtRWXdCYWlBTUlCNGdHU0FJSUFkQkJISkJDRUVFRUF3TUFnc2dIMEVRYWlJSklCY2dCa0VFZEdvaUNrR0VBV29nSDBIWUEyb2lEQ0FlSUJrZ0NDQUhRUVJCQ0JBTUlBa2dDa0dJQVdvZ0RDQWVJQmtnQ0VFRWNpQUhRUVJCQ0JBTURBRUxJQjlCRUdvaUNTQVhJQVpCQkhScUlncEJoQUZxSUI5QjJBTnFJZ3dnSGlBWklBZ2dCMEVFUVFRUURDQUpJQXBCaUFGcUlBd2dIaUFaSUFoQkJISWlEU0FIUVFSQkJCQU1JQWtnQ2tHTUFXb2dEQ0FlSUJrZ0NDQUhRUVJ5SWdkQkJFRUVFQXdnQ1NBS1FaQUJhaUFNSUI0Z0dTQU5JQWRCQkVFRUVBd0xJQVpCQVdvaUJrRUVSdzBBQ3d3TUMwRi9JUXBCZnlFVlFRQWhCa0VBSVFoQkFBc2hCeUFKSUJWR0lnOGdDU0FLUm1wQkFVY0VRQ0FJSUJNZ0NFRVFkRUVRZFNJS0lCTkJFSFJCRUhVaUNFb2lEeHNpR2lBSUlBb2dDQ0FJSUFwS0d5QVBHeUlLSUFkQkVIVWlDQ0FJSUFwSUd5QWFRUkIwUVJCMUlBaElHeUVJSUFZZ0RDQUdRUkIwUVJCMUlnb2dERUVRZEVFUWRTSUdTaUlNR3lJUFFmLy9BM0VnQmlBS0lBWWdCaUFLU2hzZ0RCc2lDaUFIUVJCMFFSQjFJZ1lnQmlBS1NCc2dEMEVRZEVFUWRTQUdTQnNoQmd3Q0N5QVBEUUVnQjBFUWRpRUlJQWNoQmd3QkN5QVRJUWdnRENFR0N5QUdJQkZxSWdkQkVIUkJFSFZCZ0VCclFmLy9BRXNOQnlBSUlCSnFJZ2hCRUhSQkVIVkJnQkJxUWY4ZlN3MEhJQWxCRUVzTkJ5QUFLQUxJQ1NBSlFRSjBhaWdDQUNJR1JRMEhJQVlvQWhSQkFra05CeUFHS0FJQUloSkZEUWNnRnlBSU93R3lBU0FYSUFjN0FiQUJJQmNnRWpZQ2RDQVhJQWsyQW1RZ0Z5QVNOZ0o4SUJjZ0NUWUNiQ0FYSUJjb0FyQUJJZ1kyQXF3QklCY2dCallDcUFFZ0Z5QUdOZ0trQVNBWElBWTJBcEFCSUJjZ0JqWUNqQUVnRnlBR05nS0lBU0FYSUFZMkFvUUJJQllvQXBRQklRZ0NRQUovQW44Q1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0RVY05BQ0FIS0FJQVFRVkxCRUJCQUNFY1FYOE1Bd3NnQjBHc0FXb01BUXRCQVNFVlFYOGhERUVBSVJ3Z0Z5Z0N6QUVpQjBVTkFpQUhLQUlFSUExSERRSkJBQ0VWSUFjb0FnQkJCVXNOQWlBSFFiQUJhZ3NvQWdBaEhDQUhLQUpzQ3lFTVFRQWhGUXNnRmk4QnBnRWhFU0FXTHdHa0FTRVBBa0FDUUNBSUlBeEdEUUFnQmtFUWRpRUhBbjhDUUFKQUlCY29Bc3dCSWdwRkRRQWdDaWdDQkNBTlJ3MEFJQW9vQWdCQkJVc05BU0FLS0FLOEFTSVZRUkIySVJvZ0NpZ0NjQXdDQ3lBVkRRTUxRUUFoRlVFQUlScEJmd3NoQ2lBSUlBbEdJZ2tnQ0NBS1JtcEJBVWNFUUNBYUlBY2dHa0VRZEVFUWRTSUpJQWRCRUhSQkVIVktJZ29iSWd3Z0JrRVFkU0lISUFrZ0J5QUhJQWxLR3lBS0d5SUpJQnhCRUhVaUJ5QUhJQWxJR3lBTVFSQjBRUkIxSUFkSUd5RUhJQlVnQmlBVlFSQjBRUkIxSWdrZ0JrRVFkRUVRZFNJR1NpSUtHeUlNUWYvL0EzRWdCaUFKSUFZZ0JpQUpTaHNnQ2hzaUNTQWNRUkIwUVJCMUlnWWdCaUFKU0JzZ0RFRVFkRUVRZFNBR1NCc2hCZ3dDQ3lBSkRRRWdDQ0FLUncwQUlCVkIvLzhEY1NBYVFSQjBjaUVHSUJvaEJ3d0JDeUFjUVJCMklRY2dIQ0VHQ3lBR0lBOXFJZ2xCRUhSQkVIVkJnRUJyUWYvL0FFc05CeUFISUJGcUlnZEJFSFJCRUhWQmdCQnFRZjhmU3cwSElBaEJFRXNOQnlBQUtBTElDU0FJUVFKMGFpZ0NBQ0lHUlEwSElBWW9BaFJCQWtrTkJ5QUdLQUlBSWdaRkRRY2dGeUFIT3dIQ0FTQVhJQWs3QWNBQklCY2dCallDZ0FFZ0Z5QUdOZ0o0SUJjZ0NEWUNjQ0FYSUFnMkFtZ2dGeUFYS0FMQUFTSUdOZ0s4QVNBWElBWTJBcmdCSUJjZ0JqWUN0QUVnRnlBR05nS2dBU0FYSUFZMkFwd0JJQmNnQmpZQ21BRWdGMEdVQVdvaUJ5QUdOZ0lBSUI4Z0VqWUMyQU1nSDBFUWFpSUdJQmRCaEFGcUlCOUIyQU5xSWdnZ0hpQVpRUUJCQUVFSVFSQVFEQ0FmSUJjb0FuZzJBdGdESUFZZ0J5QUlJQjRnR1VFSVFRQkJDRUVRRUF3TUNBdEJmeUVLUVFBTElRY2dEU0FWUmlJSklBb2dEVVpxUVFGSEJFQWdHaUFHSUJwQkVIUkJFSFVpQ1NBR1FSQjBRUkIxSWdaS0lnb2JJaG9nQmlBSklBWWdCaUFKU2hzZ0Noc2lDU0FIUVJCMUlnWWdCaUFKU0JzZ0drRVFkRUVRZFNBR1NCc2hCaUFNSUFnZ0RFRVFkRUVRZFNJSklBaEJFSFJCRUhVaUNFb2lDaHNpREVILy93TnhJQWdnQ1NBSUlBZ2dDVW9iSUFvYklnZ2dCMEVRZEVFUWRTSUhJQWNnQ0VnYklBeEJFSFJCRUhVZ0IwZ2JJUWdNQVFzZ0NRMEFJQWRCRUhZaEJpQUhJUWdMSUFnZ0Qyb2lCMEVRZEVFUWRVR0FRR3RCLy84QVN3MEVJQVlnRVdvaUNFRVFkRUVRZFVHQUVHcEIveDlMRFFRZ0RVRVFTdzBFSUFBb0FzZ0pJQTFCQW5ScUtBSUFJZ1pGRFFRZ0JpZ0NGRUVDU1EwRUlBWW9BZ0FpQ1VVTkJDQVhJQWc3QWFJQklCY2dCenNCb0FFZ0Z5QUpOZ0owSUJjZ0RUWUNaQ0FYSUFrMkFuZ2dGeUFOTmdKb0lCY2dGeWdDb0FFaUJqWUNuQUVnRnlBR05nS1lBU0FYSUFZMkFwUUJJQmNnQmpZQ2tBRWdGeUFHTmdLTUFTQVhJQVkyQW9nQklCY2dCallDaEFFZ0ZpZ0NsQUVoQ0NBV0x3R21BU0VSSUJZdkFhUUJJUThDZndKQUFrQUNRQ0FYS0FMSUFTSUhCRUFnRWlBSEtBSUVSZ1JBSUFjb0FnQkJCVTBFUUNBSEtBSzRBU0lLUVJCMklSTWdCeWdDY0NBSVJ3MEVJQW9oREF3REMwRi9JUlZCQUNFTVFRQWhFMEVBSVFwQkFDRUhJQWhCZjBZTkFnd0VDMEYvSVJWQkFDRU1RUUFoRTBFQUlRcEJBQ0VISUFoQmYwWU5BUXdEQzBGL0lSVkJBQ0VNUVFBaEUwRUFJUXBCQUNFSElBaEJmMGNOQWdzZ0RFSC8vd054SUJOQkVIUnlEQUlMSUFjb0FtZ2hGU0FIS0FLZ0FTRUhJQk1oREFzZ0JrRVFkaUVTSUFnZ0RVWWlEU0FJSUJWR2FrRUJSd1JBSUJJZ0RDQU1RUkIwUVJCMUlnd2dFa0VRZEVFUWRVZ2lEUnNpRWlBTUlBWkJFSFVpR2lBTUlBd2dHa29iSUEwYklnMGdCMEVRZFNJTUlBd2dEVWdiSUJKQkVIUkJFSFVnREVnYklSTWdCaUFLSUFwQkVIUkJFSFVpQ2lBR1FSQjBRUkIxSWdaSUlnd2JJZzFCLy84RGNTQUtJQVlnQ2lBR0lBcElHeUFNR3lJS0lBZEJFSFJCRUhVaUJpQUdJQXBJR3lBTlFSQjBRUkIxSUFaSUd3d0JDeUFTSUFkQkVIWWdEUnNoRXlBR0lBY2dEUnNMSUE5cUlnZEJFSFJCRUhWQmdFQnJRZi8vQUVzTkJDQVJJQk5xSWdwQkVIUkJFSFZCZ0JCcVFmOGZTdzBFSUFoQkVFc05CQ0FBS0FMSUNTQUlRUUowYWlnQ0FDSUdSUTBFSUFZb0FoUkJBa2tOQkNBR0tBSUFJZ1pGRFFRZ0Z5QUtPd0hDQVNBWElBYzdBY0FCSUJjZ0JqWUNnQUVnRnlBR05nSjhJQmNnQ0RZQ2NDQVhJQWcyQW13Z0Z5QVhLQUxBQVNJR05nSzhBU0FYSUFZMkFyZ0JJQmNnQmpZQ3RBRWdGeUFHTmdLd0FTQVhJQVkyQXF3QklCY2dCallDcUFFZ0YwR2tBV29pQnlBR05nSUFJQjhnQ1RZQzJBTWdIMEVRYWlJR0lCZEJoQUZxSUI5QjJBTnFJZ2dnSGlBWlFRQkJBRUVRUVFnUURDQWZJQmNvQW53MkF0Z0RJQVlnQnlBSUlCNGdHVUVBUVFoQkVFRUlFQXdNQlF0QmZ5RUhRUUFMSVFZZ0VDQVNSaUlNSUJFZ0VrWWlDbW9nQnlBU1JtcEJBVWNFUUNBSklCb2dDVUVRZEVFUWRTSUpJQnBCRUhSQkVIVWlCMG9pQ2hzaURDQUhJQWtnQnlBSElBbEtHeUFLR3lJSklBWkJFSFVpQnlBSElBbElHeUFNUVJCMFFSQjFJQWRJR3lFYUlCVWdDQ0FWUVJCMFFSQjFJZ2tnQ0VFUWRFRVFkU0lIU2lJSUd5SUtRZi8vQTNFZ0J5QUpJQWNnQnlBSlNoc2dDQnNpQnlBR1FSQjBRUkIxSWdZZ0JpQUhTQnNnQ2tFUWRFRVFkU0FHU0JzaENBd0JDeUFJSUJVZ0Noc2hDQ0FhSUFrZ0Noc2hHaUFLRFFBZ0RBMEFJQVpCRUhZaEdpQUdJUWdMSUFnZ0Uyb2lIRUVRZEVFUWRVR0FRR3RCLy84QVN3MEJJQThnR21vaURFRVFkRUVRZFVHQUVHcEIveDlMRFFFTElCSkJFRXNOQUNBQUtBTElDU0FTUVFKMGFpZ0NBQ0lHUlEwQUlBWW9BaFJCQWtrTkFDQUdLQUlBSWdkRkRRQWdEU0FNT3dIQ0FTQU5JQnc3QWNBQklBMGdCellDZENBTklCSTJBbVFnRFNBSE5nS0FBU0FOSUFjMkFud2dEU0FITmdKNElBMGdFallDY0NBTklCSTJBbXdnRFNBU05nSm9JQTBnRFNnQ3dBRWlCallDdkFFZ0RTQUdOZ0s0QVNBTklBWTJBclFCSUEwZ0JqWUNzQUVnRFNBR05nS3NBU0FOSUFZMkFxZ0JJQTBnQmpZQ3BBRWdEU0FHTmdLZ0FTQU5JQVkyQXB3QklBMGdCallDbUFFZ0RTQUdOZ0tVQVNBTklBWTJBcEFCSUEwZ0JqWUNqQUVnRFNBR05nS0lBU0FOSUFZMkFvUUJJQjhnQnpZQzJBTWdIMEVRYWlBTlFZUUJhaUFmUWRnRGFpQWVJQmxCQUVFQVFSQkJFQkFNREFFTFFRRWhCZ3dEQ3lBT0tBTEVBVUVCU3cwQUlBNG9BZ0FFUUNBcktBSUFJZ3dnS2lBcUlDc29BZ1FpQ1hBaUJtc2lCMEVJZEdvZ0JrRUVkR29oRGlBSlFRUjBJUW9nQ1VFQ2RFSDgvLy8vQTNFaERTQUdRUU4wSVJJZ0t5Z0NDQ0FKYkNJUlFRaDBJUThnQjBFR2RDRVRRUUFoR2dOQUlBNGdHa0VDZENJR1FmQXBhaWdDQUNJSElBcHNhaUFHUWJBcGFpZ0NBQ0lHYWlFSUlCOUJFR29nQjBFRWRHb2dCbW9oQmdKQUlCWWdHa0VHZEdvaUJ5Z0N5QUlpSEVILy8vOEhSd1JBSUFjb0Fzd0NJUmNnQmkwQUFTRVZJQWdnSENBR0xRQUFha0hBTldvdEFBQTZBQUFnQnlnQzBBSWhIQ0FHTFFBQ0lSQWdDQ0FWSUJkcVFjQTFhaTBBQURvQUFTQUhLQUxVQWlFWElBWXRBQU1oRlNBSUlCQWdIR3BCd0RWcUxRQUFPZ0FDSUFnZ0ZTQVhha0hBTldvdEFBQTZBQU1nQnlnQzNBSWhIQ0FHTFFBUklSY2dDQ0FLYWlJSUlBY29BdGdDSUFZdEFCQnFRY0ExYWkwQUFEb0FBQ0FIS0FMZ0FpRVZJQVl0QUJJaEVDQUlJQmNnSEdwQndEVnFMUUFBT2dBQklBY29BdVFDSVJ3Z0JpMEFFeUVYSUFnZ0VDQVZha0hBTldvdEFBQTZBQUlnQ0NBWElCeHFRY0ExYWkwQUFEb0FBeUFIS0FMc0FpRWNJQVl0QUNFaEZ5QUlJQXBxSWdnZ0J5Z0M2QUlnQmkwQUlHcEJ3RFZxTFFBQU9nQUFJQWNvQXZBQ0lSVWdCaTBBSWlFUUlBZ2dGeUFjYWtIQU5Xb3RBQUE2QUFFZ0J5Z0M5QUloSENBR0xRQWpJUmNnQ0NBUUlCVnFRY0ExYWkwQUFEb0FBaUFJSUJjZ0hHcEJ3RFZxTFFBQU9nQURJQWNvQXZ3Q0lSd2dCaTBBTVNFWElBZ2dDbW9pQ0NBSEtBTDRBaUFHTFFBd2FrSEFOV290QUFBNkFBQWdCeWdDZ0FNaEZTQUdMUUF5SVJBZ0NDQVhJQnhxUWNBMWFpMEFBRG9BQVNBSEtBS0VBeUVISUFZdEFETWhCaUFJSUJBZ0ZXcEJ3RFZxTFFBQU9nQUNJQWdnQmlBSGFrSEFOV290QUFBNkFBTU1BUXNnQmlnQ0VDRWNJQWdnQmlnQ0FEWUNBQ0FJSUExQkFuUWlCMm9pQ0NBY05nSUFJQVlvQWpBaEhDQUhJQWhxSWdnZ0JpZ0NJRFlDQUNBSElBaHFJQncyQWdBTElCcEJBV29pR2tFUVJ3MEFDeUFSUVFaMElRNGdDVUVEZEVINC8vLy9CM0VpQ2tFQ2RpRU5JQXdnRDJvZ0Uyb2dFbW9oREVFUUlRZ0RRQ0FNSUE1QkFDQUlRUk5MSWdZYmFpQUlRUUowUVF4eElnZEI4Q2xxS0FJQUloSWdDbXdnQjBHd0tXb29BZ0FpQjJwcUlRa2dIMEVRYWtIQUFrR0FBaUFHRzJvZ0VrRURkQ0FIYW1vaEJnSkFJQllnQ0VFR2RHb2lCeWdDeUFJaUVrSC8vLzhIUndSQUlBY29Bc3dDSVJFZ0JpMEFBU0VQSUFrZ0VpQUdMUUFBYWtIQU5Xb3RBQUE2QUFBZ0J5Z0MwQUloRWlBR0xRQUNJUm9nQ1NBUElCRnFRY0ExYWkwQUFEb0FBU0FIS0FMVUFpRVJJQVl0QUFNaER5QUpJQklnR21wQndEVnFMUUFBT2dBQ0lBa2dEeUFSYWtIQU5Xb3RBQUE2QUFNZ0J5Z0MzQUloRWlBR0xRQUpJUkVnQ1NBS2FpSUpJQWNvQXRnQ0lBWXRBQWhxUWNBMWFpMEFBRG9BQUNBSEtBTGdBaUVQSUFZdEFBb2hHaUFKSUJFZ0VtcEJ3RFZxTFFBQU9nQUJJQWNvQXVRQ0lSSWdCaTBBQ3lFUklBa2dEeUFhYWtIQU5Xb3RBQUE2QUFJZ0NTQVJJQkpxUWNBMWFpMEFBRG9BQXlBSEtBTHNBaUVTSUFZdEFCRWhFU0FKSUFwcUlna2dCeWdDNkFJZ0JpMEFFR3BCd0RWcUxRQUFPZ0FBSUFjb0F2QUNJUThnQmkwQUVpRWFJQWtnRVNBU2FrSEFOV290QUFBNkFBRWdCeWdDOUFJaEVpQUdMUUFUSVJFZ0NTQVBJQnBxUWNBMWFpMEFBRG9BQWlBSklCRWdFbXBCd0RWcUxRQUFPZ0FESUFjb0F2d0NJUklnQmkwQUdTRVJJQWtnQ21vaUNTQUhLQUw0QWlBR0xRQVlha0hBTldvdEFBQTZBQUFnQnlnQ2dBTWhEeUFHTFFBYUlSb2dDU0FSSUJKcVFjQTFhaTBBQURvQUFTQUhLQUtFQXlFSElBWXRBQnNoQmlBSklBOGdHbXBCd0RWcUxRQUFPZ0FDSUFrZ0JpQUhha0hBTldvdEFBQTZBQU1NQVFzZ0JpZ0NDQ0VTSUFrZ0JpZ0NBRFlDQUNBSklBMUJBblFpQjJvaUNTQVNOZ0lBSUFZb0FoZ2hFaUFISUFscUlna2dCaWdDRURZQ0FDQUhJQWxxSUJJMkFnQUxJQWhCQVdvaUNFRVlSdzBBQ3d3QkN5QXJJQjlCRUdvUUR3c2dBQ2dDdkFraURpQXhhaWdDeEFGQkFVWWhDZ0ovUVFBZ0lDZ0NERUVEZENBZ0tBSVFheUlIUlEwQUdrRUJJQWRCQ0VzTkFCb2dJQ2dDQkNJR0xRQUFJQ0FvQWdnaUNVRVlhaUlhZENFSUlBY2dDV3BCQ0dzaUNVRUJUZ1JBQTBBZ0JpMEFBU0FhUVFocklocDBJQWh5SVFnZ0NVRUlTaUVNSUFaQkFXb2hCaUFKUVFocklRa2dEQTBBQ3d0QkFTQUhRUUZyZENBSVFTQWdCMnQyUndzZ0h5Z0NESEloQmdKQUFrQWdMeWdDQkVFQ2F3NEdBQUVCQVFFQUFRc2dBQ0FxTmdLd0NRc2dDaUEwYWlFMElBWkJBRWNoQ0NBQUtBS1lDU0lISUNwQkFXb2lCaUFHSUFkSkd5RUdJQUFvQXBRSklna2dLa0VDZEdvb0FnQWhDZ05BQWtBZ0J5QXFRUUZxSWlwTkJFQWdCaUVxREFFTElBa2dLa0VDZEdvb0FnQWdDa2NOQVFzTFFRRWhCa0VBSUFoQkFDQXFJQWNnS2tZYklpb2JEUUVnQ0EwQUN5QUhJQUJCckFscUtBSUFJRFJxSWdoSkRRQWdBQ0FJTmdLc0NVRUFJUVlMSUI5QjhBTnFKQUFnQmdzRVFDQUFLQUtvQ1NFSklBQW9BdGdLSVFZQ1FDQUFLQUt3Q1NJSFJRMEFJQVlnQjBFQmF5SUtUd1JBSUFvaEJnd0JDeUFBS0FLOENTRUhRUUFoRFFOQUFrQWdCeUFLUWRnQmJHb29BZ1FnQ1VjTkFDQU5RUUZxSWcwZ0FDZ0NFQ2dDTkNJSVFRb2dDRUVLU3h0SkRRQWdDaUVHREFJTElBcEJBV3NpQ2lBR1N3MEFDd3NnQUNnQ3ZBa2hEQU5BUVFBaENpQUpJQXdnQmtIWUFXeHFJZ2NvQWdSSEJFQkJBeUVNREJNTElBY29Bc1FCSWdoRkJFQkJBeUVNREJNTElBY2dDRUVCYXpZQ3hBRWdBQ2dDbUFraUNDQUdRUUZxSWdjZ0J5QUlTUnNoQnlBQUtBS1VDU0lPSUFaQkFuUnFLQUlBSVEwRFFBSkFJQWdnQmtFQmFpSUdUUVJBSUFjaEJnd0JDeUFPSUFaQkFuUnFLQUlBSUExSERRRUxDMEVBSUFZZ0JpQUlSaHNpQmcwQUMwRURJUXdNRVFzZ0FDZ0MvQW9FUUVFQUlRcEJBQ0VOQWtBZ0FDZ0NtQWtpR0VVTkFDQVlRUU54SVF3Z0FDZ0N2QWtoQjBFQUlRa2dHRUVCYTBFRFR3UkFRUUFoQmlBWVFYeHhJZ2toRWdOQUlBMGdCeUFHUWRnQmJHb29Bc1FCUVFCSGFpQUhJQVpCQVhKQjJBRnNhaWdDeEFGQkFFZHFJQWNnQmtFQ2NrSFlBV3hxS0FMRUFVRUFSMm9nQnlBR1FRTnlRZGdCYkdvb0FzUUJRUUJIYWlFTklBWkJCR29oQmlBU1FRUnJJaElOQUFzTElBeEZEUUFEUUNBTklBY2dDVUhZQVd4cUtBTEVBVUVBUjJvaERTQUpRUUZxSVFrZ0RFRUJheUlNRFFBTEMwRUJJUVlnRFNBWVJnMFBRUUFoREF3UkMwRUFJUXBCQVNFR0lBQW9BcXdKSUFBb0FwZ0pSZzBPUVFBaERBd1FDeUFIS0FJUUlRWUxJQVpCQVVjTkFDQUhLQUlZRFFBZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUVlDUUFKQUlBc29BdXdCUVg5R0JFQWdCa1VOQVF3Q0N5QUdSUTBCQzBFQklRWU1BZ3NnQ0NnQ0NFVU5BQ0FMUVFBMkF1d0JJQXRCMEFGcUlBdEI3QUZxRUFJaEJnSkFJQXNvQXV3QlFYOUdCRUFnQmcwQ0RBRUxJQVpGRFFFTFFRRWhCZ3dCQ3lBSUtBSkVCRUJCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlOQVFzZ0N5Z0MxQUVoQmdKQUlBc29BdHdCUVFOMElnd2dDeWdDNEFFaURtc2lDRUVnVGdSQUlBWW9BQUFpQ0VFWWRDQUlRUWgwUVlDQS9BZHhjaUFJUVFoMlFZRCtBM0VnQ0VFWWRuSnlJUWtnQ3lnQzJBRWlDRVVOQVNBSklBaDBJQVl0QUFSQkNDQUlhM1p5SVFrTUFRc2dDRUVCU0FSQVFRQWhDUXdCQ3lBR0xRQUFJQXNvQXRnQklnMUJHR29pTW5RaENTQUlJQTFxUVFocklnMUJBVWdOQUFOQUlBWXRBQUVnTWtFSWF5SXlkQ0FKY2lFSklBMUJDRW9oQ0NBR1FRRnFJUVlnRFVFSWF5RU5JQWdOQUFzTElBc2dEa0VCYWlJSU5nTGdBVUYvSVFZZ0NDQU1UUVJBSUFzZ0N5Z0MwQUVnQ0VFRGRtbzJBdFFCSUFsQkgzWWhCZ3NnQmtGL1JpRU5DeUFHSUExeURRQWdBQ2dDL0FrTkFDQUtSUTBBSUFvb0FqUWdCeWdDTkVjTkFDQUtLQUk0SUFjb0FqaEhEUUFnQ2lnQ1dDQUhLQUpZUmcwQkN5QUFRUUEyQW9BS0RBRUxJQUFvQXNRSklnbEZEUUFnQUVFQk5nS0FDaUFBS0FMZ0NTRU1BMEJCQUNFR1FmLy8vLzhISVFkQkFDRUtBMEFnQ1NBS1FTaHNhaUlJS0FJWUJFQWdDQ0FHSUFnb0FoQWlDQ0FIU0NJT0d5RUdJQWdnQnlBT0d5RUhDeUFLUVFGcUlnb2dERTBOQUNBR1JRMENJQUFvQXRBSklBQW9BdFFKSWdoQkJIUnFJZ2NnQmlnQ0FEWUNBQ0FISUFZb0FpUTJBZ3dnQnlBR0tBSWNOZ0lFSUFjZ0JpZ0NJRFlDQ0NBQUlBaEJBV28yQXRRSlFRQWhDaUFHUVFBMkFoZ2dCaWdDRkNFSVFRQWhCa0gvLy8vL0J5RUhJQWdOQUFzZ0FDQUFLQUx3Q1VFQmF6WUM4QWtNQUFzQUN5QUFJQUFvQWdnMkFnQkJBaUVNUVFBaE1rRUFJUW9NQ1FzZ0FFS0Fnb0NBZ0FRM0FnUkJBQ0VLSUFCQkFEWUN0Qm9nQUVJQU53SU1EQWdMSUF0QkNHb2dDMEhzQVdvUUFnMEFJQXNvQXV3QklnWkJIMHNOQUNBTElBWkJBV28yQWxBZ0MwRUlhaUFMUWV3QmFoQUNEUUFnQ3lnQzdBRkJIMHNOQUNBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lPYXlJSVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdoRkRRRWdCeUFJZENBR0xRQUVRUWdnQ0d0MmNpRUhEQUVMSUFoQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ2xCR0dvaURYUWhCeUFJSUFscVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaENDQUdRUUZxSVFZZ0NrRUlheUVLSUFnTkFBc0xJQXNnRGtFQmFpSUpOZ0lZSUFzZ0NVRUhjU0lJTmdJUUlBa2dERXNOQUNBTElBc29BZ2dpRWlBSlFRTjJhaUlHTmdJTUlBZEJBRWdOQUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NFVU5BU0FISUFoMElBWXRBQVJCQ0NBSWEzWnlJUWNNQVFzZ0NVRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBaEJHSElpRFhRaEJ5QUlJQWxxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ0NBR1FRRnFJUVlnQ2tFSWF5RUtJQWdOQUFzTElBc2dEa0VEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUF4TERRQWdDeUFTSUFaQkEzWnFOZ0lNSUFkQi8vLy8vM3RMRFFBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCeUFMS0FMUUFTSUdRWDlHRFFBZ0J3MEFJQVpCQVdwQkFYWWlCMEVBSUFkcklBWkJBWEViUVJwcUlnWkJNMHNOQUNBTElBWTJBbFFnQzBFQU5nTFFBU0FMUVFocUlBdEIwQUZxRUFJaEJ5QUxLQUxRQVNJR1FYOUdEUUFnQncwQUlBWkJBV3BCQVhZaUIwRUFJQWRySUFaQkFYRWJRUnBxUVROTERRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQnlBTEtBTFFBU0lHUVg5R0RRQWdCdzBBSUFaQkFXcEJBWFlpQjBFQUlBZHJJQVpCQVhFYklnWkJER3BCR0VzTkFDQUxJQVkyQWxnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKY0lBc2dDeWdDQ0NJT0lBcEJBM1pxSWdZMkFnd0NRQ0FJSUFwcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWxGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FKUVJoeUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFtb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKZ0lBc2dEaUFLUVFOMmFpSUdOZ0lNQWtBZ0NDQUtheUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUU5xSWdZMkFoZ2dDeUFHUVFkeElnazJBaEFnQmlBSVN3MEFJQXNnQjBFZmRqWUNaQ0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUlJQVpySWdaQkFXdEJIa3NOQUNBR0lBbHFRUWhySWdaQkFVZ05BQU5BSUFaQkNFb2hCeUFHUVFocklRWWdCdzBBQ3dzZ0N5QU1JQWxyUVF0cUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUE0Z0JrRURkbW8yQWd3TElBQWdDeWdDSUNJSFFRSjBhaUlHS0FLVUFTSUlEUUVnQmtISUFCQUlJZ28yQXBRQklBcEZEUU1NQWdzZ0N5Z0NOQkFFUVFBaENpQUxRUUEyQWpRZ0N5Z0NPQkFFSUF0QkFEWUNPQ0FMS0FJOEVBUWdDMEVBTmdJOElBc29Ba3dRQkVFRElRd01CZ3NDUUNBSElBQW9BZ1JIRFFBZ0N5Z0NKQ0FBS0FJSVJnMEFJQUJCZ1FJMkFnUUxJQWdvQWhRUUJDQUdLQUtVQVVFQU5nSVVJQVlvQXBRQktBSVlFQVFnQmlnQ2xBRkJBRFlDR0NBR0tBS1VBU2dDSEJBRUlBWW9BcFFCUVFBMkFod2dCaWdDbEFFb0Fpd1FCQ0FHS0FLVUFVRUFOZ0lzSUFZb0FwUUJJUW9MSUFvZ0MwRWdha0hJQUJBSEdndEJBQ0VLUVFBaERBd0RDeUFMS0FLUUFSQUVRUUFoQ2lBTFFRQTJBcEFCSUFzb0Fyd0JFQVJCQXlFTURBSUxJQUFnQmpZQ25Ba2dBQ2dDdkFraERrRUFJU0pCQUNFNUl3QkJzQUZySWcwa0FDQXJLQUlJSWhFRVFDQXJLQUlFSWg5QkJuUWhTeUFmUVRCc0lVd2dIMEVGZENFZ0lCOUJVR3doTENBUklCOXNJZ1pCQm5RaFRTQUdRUWgwSVU1QkFDQWZRUU4wSWhwckloZEJBWFFoS2tFQUlCOUJCSFFpTm1zaUkwRUNkQ0ZQSUNOQkFYUWhMZ05BQWtBZ0RpZ0NDQ0lHUVFGR0RRQUNRQUpBQWtBQ1FDQU9LQUxJQVNJVVJRUkFRUUVoQnd3QkMwRUZJUWNnQmtFQ1J3MEFRUVZCQVNBT0tBSUVJaElnRkNnQ0JFWWJJUWNnRGlnQ3pBRWlDQTBCUVFBaENBd0RDeUFPS0FMTUFTSUlSUVJBUVFBaENBd0RDeUFHUVFKSERRRWdEaWdDQkNFU0N5QVNJQWdvQWdSSERRRUxJQWRCQW5JaEJ3c0Nmd0pBQW44Z0IwRUNjU0kvQkVBQ1FDQU9LQUlBUVFWTkJFQWdDQ2dDQUVFR1NRMEJDeUFOUVFRMkFrQWdEVUVFTmdKSUlBMUJCRFlDT0NBTlFRUTJBakFNQXd0QkFpRU1RUUloRWdKQUlBNHZBUndOQUNBSUx3RXdEUUJCQVNFU0lBNG9BblFnQ0NnQ2ZFY05BQ0FPTGdHRUFTQUlMZ0dzQVdzaUJpQUdRUjkxSWdacUlBWnpRUU5MRFFBZ0RpNEJoZ0VnQ0M0QnJnRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RVNDeUFOSUJJMkFqQUNRQ0FPTHdFZURRQWdDQzhCTWcwQVFRRWhEQ0FPS0FKMElBZ29BbnhIRFFBZ0RpNEJpQUVnQ0M0QnNBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVlvQklBZ3VBYklCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoREFzZ0RTQU1OZ0k0UVFJaEUwRUNJUndDUUNBT0x3RWtEUUFnQ0M4Qk9BMEFRUUVoSENBT0tBSjRJQWdvQW9BQlJ3MEFJQTR1QVpRQklBZ3VBYndCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0xnR1dBU0FJTGdHK0FXc2lCaUFHUVI5MUlnWnFJQVp6UVFOTElSd0xJQTBnSERZQ1FBSkFJQTR2QVNZTkFDQUlMd0U2RFFCQkFTRVRJQTRvQW5nZ0NDZ0NnQUZIRFFBZ0RpNEJtQUVnQ0M0QndBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVpvQklBZ3VBY0lCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoRXdzZ0RTQVROZ0pJSUF3Z0VuSU5BaUFUSUJ4eURRSkJBQXdCQ3lBTlFRQTJBa0FnRFVFQU5nSklJQTFCQURZQ09DQU5RUUEyQWpCQkFBc2hFa0VCREFFTFFRRWhFa0VBQ3lFSkFrQUNRQUpBSUFkQkJIRWlRQVJBQWtBZ0RpZ0NBQ0lIUVFWTkJFQWdGQ2dDQUVFR1NRMEJDeUFOUVFRMkFuUWdEVUVFTmdLVUFTQU5RUVEyQWxRZ0RVRUVOZ0kwUVFFaEVnd0NDMEVDSVFaQkFpRWNBa0FnRGk4QkhBMEFJQlF2QVNZTkFFRUJJUndnRGlnQ2RDQVVLQUo0UncwQUlBNHVBWVFCSUJRdUFaZ0JheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPTGdHR0FTQVVMZ0dhQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MSVJ3TElBMGdIRFlDTkFKQUlBNHZBU0FOQUNBVUx3RXFEUUJCQVNFR0lBNG9BblFnRkNnQ2VFY05BQ0FPTGdHTUFTQVVMZ0dnQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJqZ0VnRkM0Qm9nRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RUdDeUFOSUFZMkFsUkJBaUVQUVFJaEV3SkFJQTR2QVN3TkFDQVVMd0UyRFFCQkFTRVRJQTRvQW53Z0ZDZ0NnQUZIRFFBZ0RpNEJwQUVnRkM0QnVBRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3MEFJQTR1QWFZQklCUXVBYm9CYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNoRXdzZ0RTQVROZ0owQWtBZ0RpOEJNQTBBSUJRdkFUb05BRUVCSVE4Z0RpZ0NmQ0FVS0FLQUFVY05BQ0FPTGdHc0FTQVVMZ0hBQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJyZ0VnRkM0QndnRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN5RVBDeUFOSUE4MkFwUUJRUUVoRWlBSlJRMENJQVlnSEhJTkFpQVBJQk55RFFKQkFDRVNEQUlMSUExQkFEWUNkQ0FOUVFBMkFwUUJJQTFCQURZQ1ZDQU5RUUEyQWpRZ0RpZ0NBQ0VIQ3lBSFFRWkpEUUFnRFVFRE5nS2dBU0FOUW9PQWdJQXdOd0trQVNBTlFRTTJBcEFCSUExQkF6WUNjQ0FOUVFNMkFxd0JJQTFDZzRDQWdEQTNBNWdCSUExQ2c0Q0FnREEzQTRnQklBMUNnNENBZ0RBM0E0QUJJQTFDZzRDQWdEQTNBM2dnRFVLRGdJQ0FNRGNEYUNBTlFvT0FnSUF3TndOZ0lBMUNnNENBZ0RBM0ExZ2dEVUtEZ0lDQU1EY0NUQ0FOUVFNMkFrUWdEVUVETmdJOERBRUxBa0FnQjBFQlRRUkFJQTBDZndKQUlBNHZBU0FpTkEwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlsRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JZ2tOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lKZzBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1oQkFpRVBJQTFCQWlBMFFRQkhRUUYwSUE0dkFTd2lNUnNpRmpZQ2NDQU5RUUlnSlVFQVIwRUJkQ0FPTHdFdUloMGJJaGsyQW5nZ0RVRUNJQWxCQUVkQkFYUWdEaThCTkNJVkd5SWVOZ0tBQVNBTlFRSWdKa0VBUjBFQmRDQU9Md0UySWk4YklpUTJBb2dCSUEwZ0RpOEJNQ0l6SURGeVFRQkhRUUYwSWdvMkFwQUJJQTBnRGk4Qk1pSWhJQjF5UVFCSFFRRjBJaTAyQXBnQklBMGdEaThCT0NJb0lCVnlRUUJIUVFGMEloczJBcUFCSUEwZ0RpOEJPaUlRSUM5eVFRQkhRUUYwSWlrMkFxZ0JRUUloQmlBT0x3RWVSUVJBUVFBaER5QU9Md0VjUVFCSFFRRjBJUVlMSUEwZ0JqWUNQQ0FOUVFJZ0R5QU9Md0VrSWpBYklnODJBa1FnRGk4QkppRTFJQTBnRUNBb2NrRUFSMEVCZENJUU5nS3NBU0FOSUNFZ0tISkJBRWRCQVhRaUtEWUNwQUVnRFNBaElETnlRUUJIUVFGMElpRTJBcHdCSUEwZ0ZTQXZja0VBUjBFQmRDSXZOZ0tNQVNBTklCVWdIWEpCQUVkQkFYUWlGVFlDaEFFZ0RTQWRJREZ5UVFCSFFRRjBJakUyQW53Z0RTQUpJQ1p5UVFCSFFRRjBJaDAyQW13Z0RTQUpJQ1Z5UVFCSFFRRjBJZ2syQW1RZ0RTQWxJRFJ5UVFCSFFRRjBJaVUyQWx3Z0RTQXdJRFZ5UVFCSFFRRjBJalEyQWt3TUFRc0Nmd0pBSUEwQ2Z3SkFBa0FDUUFKQUFrQWdCMEVDYXc0Q0FBRUNDeUFOQW44Q1FDQU9Md0VnSWlVTkFDQU9Md0VjRFFCQkFBd0JDMEVDQ3lJSE5nSlFJQTBDZndKQUlBNHZBU0lpRlEwQUlBNHZBUjROQUVFQURBRUxRUUlMSWd3MkFsZ2dEUUovQWtBZ0RpOEJLQ0lKRFFBZ0RpOEJKQTBBUVFBTUFRdEJBZ3NpSERZQ1lDQU5BbjhDUUNBT0x3RXFJaDBOQUNBT0x3RW1EUUJCQUF3QkMwRUNDeUlUTmdKb0lBMENmd0pBSUE0dkFUQWlMdzBBSUE0dkFTd05BRUVBREFFTFFRSUxJZ28yQXBBQklBMENmd0pBSUE0dkFUSWlJUTBBSUE0dkFTNE5BRUVBREFFTFFRSUxJaTAyQXBnQklBMENmd0pBSUE0dkFUZ2lLQTBBSUE0dkFUUU5BRUVBREFFTFFRSUxJaHMyQXFBQklBMENmd0pBSUE0dkFUb2lKZzBBSUE0dkFUWU5BRUVBREFFTFFRSUxJaWsyQXFnQlFRSWhHVUVDSVJZQ1FDQWxJQTR2QVN3aU0zSU5BRUVCSVJZZ0RpNEJwQUVnRGk0QmpBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QWFZQklBNHVBWTRCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0tBSjhJQTRvQW5SSElSWUxJQTBnRmpZQ2NBSkFJQlVnRGk4QkxpSTBjZzBBUVFFaEdTQU9MZ0dvQVNBT0xnR1FBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGk0QnFnRWdEaTRCa2dGcklnWWdCa0VmZFNJR2FpQUdjMEVEU3cwQUlBNG9BbndnRGlnQ2RFY2hHUXNnRFNBWk5nSjRRUUloSkVFQ0lSNENRQ0FKSUE0dkFUUWlNWElOQUVFQklSNGdEaTRCdEFFZ0RpNEJuQUZySWdZZ0JrRWZkU0lHYWlBR2MwRURTdzBBSUE0dUFiWUJJQTR1QVo0QmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjRSeUVlQ3lBTklCNDJBb0FCQWtBZ0hTQU9Md0UySWpCeURRQkJBU0VrSUE0dUFiZ0JJQTR1QWFBQmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9MZ0c2QVNBT0xnR2lBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEpBc2dEU0FrTmdLSUFTQU9Md0VlRFFJZ0RpOEJIQVJBUVFJaEJpQU5RUUkyQWp3Z0RpOEJKQ0lRRFFaQkFDRVBRUUFNQnd0QkFDRUdJQTFCQURZQ1BFRUFJUTlCQUNBT0x3RWtJaEJGRFFZYURBVUxJQTBDZndKQUlBNHZBU0FpRHcwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlWRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JaWdOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lIUTBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1nZ0RTQU9Md0VzSWdrZ0QzSkJBRWRCQVhRaUZqWUNjQ0FOSUE0dkFTNGlKaUFWY2tFQVIwRUJkQ0laTmdKNElBMGdEaThCTkNJeklDaHlRUUJIUVFGMEloNDJBb0FCSUEwZ0RpOEJOaUlsSUIxeVFRQkhRUUYwSWlRMkFvZ0JJQTFCQWlBSlFRQkhRUUYwSUE0dkFUQWlJUnNpQ2pZQ2tBRWdEVUVDSUNaQkFFZEJBWFFnRGk4Qk1pSTFHeUl0TmdLWUFTQU5RUUlnTTBFQVIwRUJkQ0FPTHdFNElqY2JJaHMyQXFBQklBMUJBaUFsUVFCSFFRRjBJQTR2QVRvaUVCc2lLVFlDcUFFZ0RRSi9Ba0FnRGk4QkhpSTZEUUFnRGk4QkhBMEFRUUFNQVF0QkFnc2lCallDUENBT0x3RW1CRUFnRGk4QkpDRXdEQU1MSUE0dkFTUWlNQTBDUVFBaE1FRUFEQU1MSUE0dUFZWUJJUVlnRGk0QmpnRWhDVUVDSVF3Z0RRSi9RUUlnRGk4QklDSkJJQTR2QVJ3aU8zSU5BQnBCQVNBT0xnR01BU0FPTGdHRUFXc2lCeUFIUVI5MUlnZHFJQWR6UVFOTERRQWFJQWtnQm1zaUJ5QUhRUjkxSWdkcUlBZHpRUU5MQ3lJSE5nSlFJQTR1QVlvQklSMGdEaTRCa2dFaEZRSkFJQTR2QVNJaUx5QU9Md0VlSWlWeURRQkJBU0VNSUE0dUFaQUJJQTR1QVlnQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFDQVZJQjFySWdvZ0NrRWZkU0lLYWlBS2MwRURTeUVNQ3lBTklBdzJBbGdnRGk0QmxnRWhOQ0FPTGdHZUFTRVFRUUloRXlBTkFuOUJBaUFPTHdFb0lqRWdEaThCSkNKQ2NnMEFHa0VCSUE0dUFad0JJQTR1QVpRQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFCb2dFQ0EwYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNMSWh3MkFtQWdEaTRCbWdFaFF5QU9MZ0dpQVNFbUFrQWdEaThCS2lKRUlBNHZBU1lpVUhJTkFFRUJJUk1nRGk0Qm9BRWdEaTRCbUFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDWWdRMnNpQ2lBS1FSOTFJZ3BxSUFwelFRTkxJUk1MSUEwZ0V6WUNhQ0FPTGdHbUFTRXpRUUloR1VFQ0lSWUNRQ0JCSUE0dkFTd2lSWElOQUVFQklSWWdEaTRCcEFFZ0RpNEJqQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBSURNZ0NXc2lDaUFLUVI5MUlncHFJQXB6UVFOTERRQWdEaWdDZkNBT0tBSjBSeUVXQ3lBTklCWTJBbkFnRGk0QnFnRWhJUUpBSUM4Z0RpOEJMaUl3Y2cwQVFRRWhHU0FPTGdHb0FTQU9MZ0dRQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0lTQVZheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPS0FKOElBNG9BblJISVJrTElBMGdHVFlDZUNBT0xnRzJBU0VvUVFJaEpFRUNJUjRDUUNBeElBNHZBVFFpTlhJTkFFRUJJUjRnRGk0QnRBRWdEaTRCbkFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDZ2dFR3NpQ2lBS1FSOTFJZ3BxSUFwelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEhnc2dEU0FlTmdLQUFTQU9MZ0c2QVNFM0FrQWdSQ0FPTHdFMklrWnlEUUJCQVNFa0lBNHVBYmdCSUE0dUFhQUJheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0EzSUNacklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlBNG9Bb0FCSUE0b0FuaEhJU1FMSUEwZ0pEWUNpQUVnRGk0QnJnRWhSMEVDSVMwZ0RRSi9RUUlnUlNBT0x3RXdJbEZ5RFFBYVFRRWdEaTRCckFFZ0RpNEJwQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBR2lCSElETnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3c2lDallDa0FFZ0RpNEJzZ0VoT2dKQUlEQWdEaThCTWlKSWNnMEFRUUVoTFNBT0xnR3dBU0FPTGdHb0FXc2lEeUFQUVI5MUlnOXFJQTl6UVFOTERRQWdPaUFoYXlJUElBOUJIM1VpRDJvZ0QzTkJBMHNoTFFzZ0RTQXROZ0tZQVNBT0xnRytBU0UrUVFJaEtTQU5BbjlCQWlBMUlBNHZBVGdpU1hJTkFCcEJBU0FPTGdHOEFTQU9MZ0cwQVdzaUR5QVBRUjkxSWc5cUlBOXpRUU5MRFFBYUlENGdLR3NpRHlBUFFSOTFJZzlxSUE5elFRTkxDeUliTmdLZ0FTQU9MZ0hDQVNGS0FrQWdSaUFPTHdFNklsSnlEUUJCQVNFcElBNHVBY0FCSUE0dUFiZ0JheUlQSUE5QkgzVWlEMm9nRDNOQkEwc05BQ0JLSURkcklnOGdEMEVmZFNJUGFpQVBjMEVEU3lFcEN5QU5JQ2syQXFnQlFRSWhEeUFOQW45QkFpQWxJRHR5RFFBYVFRRWdEaTRCaUFFZ0RpNEJoQUZySWpzZ08wRWZkU0k3YWlBN2MwRURTdzBBR2lBZElBWnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3c2lCallDUEFKQUlDVWdRbklOQUVFQklROGdEaTRCbEFFZ0RpNEJpQUZySWlVZ0pVRWZkU0lsYWlBbGMwRURTdzBBSURRZ0hXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdEaWdDZUNBT0tBSjBSeUVQQ3lBTklBODJBa1JCQWlFbElBMENmMEVDSUVJZ1VISU5BQnBCQVNBT0xnR1lBU0FPTGdHVUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWFJRU1nTkdzaUhTQWRRUjkxSWgxcUlCMXpRUU5MQ3lJME5nSk1Ba0FnTHlCQmNnMEFRUUVoSlNBT0xnR1FBU0FPTGdHTUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdGU0FKYXlJSklBbEJIM1VpQ1dvZ0NYTkJBMHNoSlFzZ0RTQWxOZ0pjUVFJaEhVRUNJUWtDUUNBdklERnlEUUJCQVNFSklBNHVBWndCSUE0dUFaQUJheUl2SUM5QkgzVWlMMm9nTDNOQkEwc05BQ0FRSUJWckloVWdGVUVmZFNJVmFpQVZjMEVEU3cwQUlBNG9BbmdnRGlnQ2RFY2hDUXNnRFNBSk5nSmtBa0FnTVNCRWNnMEFRUUVoSFNBT0xnR2dBU0FPTGdHY0FXc2lGU0FWUVI5MUloVnFJQlZ6UVFOTERRQWdKaUFRYXlJVklCVkJIM1VpRldvZ0ZYTkJBMHNoSFFzZ0RTQWROZ0pzUVFJaEZTQU5BbjlCQWlBd0lFVnlEUUFhUVFFZ0RpNEJxQUVnRGk0QnBBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFHaUFoSUROckloQWdFRUVmZFNJUWFpQVFjMEVEU3dzaU1UWUNmQUpBSURBZ05YSU5BRUVCSVJVZ0RpNEJ0QUVnRGk0QnFBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFJQ2dnSVdzaUVDQVFRUjkxSWhCcUlCQnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBVUVDSVNFZ0RRSi9RUUlnTlNCR2NnMEFHa0VCSUE0dUFiZ0JJQTR1QWJRQmF5SVFJQkJCSDNVaUVHb2dFSE5CQTBzTkFCb2dOeUFvYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNMSWk4MkFvd0JBa0FnU0NCUmNnMEFRUUVoSVNBT0xnR3dBU0FPTGdHc0FXc2lFQ0FRUVI5MUloQnFJQkJ6UVFOTERRQWdPaUJIYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNoSVFzZ0RTQWhOZ0tjQVVFQ0lSQkJBaUVvQWtBZ1NDQkpjZzBBUVFFaEtDQU9MZ0c4QVNBT0xnR3dBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnUGlBNmF5SW1JQ1pCSDNVaUptb2dKbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjhSeUVvQ3lBTklDZzJBcVFCQWtBZ1NTQlNjZzBBUVFFaEVDQU9MZ0hBQVNBT0xnRzhBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnU2lBK2F5SVFJQkJCSDNVaUVHb2dFSE5CQTBzaEVBc2dEU0FRTmdLc0FRd0ZDMEVDSVFZZ0RVRUNOZ0k4SUE0dkFTUWhFQXdDQzBFQ0N5STBOZ0pNSUEwZ0VDQTNja0VBUjBFQmRDSVFOZ0tzQVNBTklDRWdOWEpCQUVkQkFYUWlJVFlDbkFFZ0RTQWxJRE55UVFCSFFRRjBJaTgyQW93QklBMGdDU0FtY2tFQVIwRUJkQ0l4TmdKOFFRSWhDU0FOUVFJZ0tFRUFSMEVCZENBZEd5SWROZ0pzSUExQkFpQVBRUUJIUVFGMElCVWJJaVUyQWx4QkFpRVBBa0FnTUNBNmNnMEFRUUVoRHlBT0xnR1VBU0FPTGdHSUFXc2lNQ0F3UVI5MUlqQnFJREJ6UVFOTERRQWdEaTRCbGdFZ0RpNEJpZ0ZySWpBZ01FRWZkU0l3YWlBd2MwRURTdzBBSUE0b0FuZ2dEaWdDZEVjaER3c2dEU0FQTmdKRUFrQWdGU0FvY2cwQVFRRWhDU0FPTGdHY0FTQU9MZ0dRQVdzaUZTQVZRUjkxSWhWcUlCVnpRUU5MRFFBZ0RpNEJuZ0VnRGk0QmtnRnJJaFVnRlVFZmRTSVZhaUFWYzBFRFN3MEFJQTRvQW5nZ0RpZ0NkRWNoQ1FzZ0RTQUpOZ0prUVFJaEtFRUNJUlVDUUNBbUlETnlEUUJCQVNFVklBNHVBYlFCSUE0dUFhZ0JheUltSUNaQkgzVWlKbW9nSm5OQkEwc05BQ0FPTGdHMkFTQU9MZ0dxQVdzaUppQW1RUjkxSWlacUlDWnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBUUpBSURVZ04zSU5BRUVCSVNnZ0RpNEJ2QUVnRGk0QnNBRnJJaVlnSmtFZmRTSW1haUFtYzBFRFN3MEFJQTR1QWI0QklBNHVBYklCYXlJbUlDWkJIM1VpSm1vZ0puTkJBMHNOQUNBT0tBS0FBU0FPS0FKOFJ5RW9DeUFOSUNnMkFxUUJEQUlMUVFJaER5QVFDeUUxSUEwZ0R6WUNSQ0FPTHdFbUlUY2dEU0FtSUNoeVFRQkhRUUYwSWhBMkFxd0JJQTBnSVNBb2NrRUFSMEVCZENJb05nS2tBU0FOUVFJZ0wwRUFSMEVCZENBaEd5SWhOZ0tjQVNBTlFRSWdDVUVBUjBFQmRDQWRHeUlkTmdKc0lBMUJBaUFWUVFCSFFRRjBJQWtiSWdrMkFtUWdEVUVDSUNWQkFFZEJBWFFnRlJzaUpUWUNYQ0FOSURBZ01YSkJBRWRCQVhRaUx6WUNqQUVnRFNBeElEUnlRUUJIUVFGMEloVTJBb1FCSUEwZ015QTBja0VBUjBFQmRDSXhOZ0o4SUEwZ055QTFRZi8vQTNGeVFRQkhRUUYwSWpRMkFrd0xJQklOQUNBSERRQWdEQTBBSUJ3TkFDQVREUUFnRmcwQUlCa05BQ0FlRFFBZ0pBMEFJQW9OQUNBdERRQWdHdzBBSUNrTkFDQUdEUUFnRHcwQUlEUU5BQ0FsRFFBZ0NRMEFJQjBOQUNBeERRQWdGUTBBSUM4TkFDQWhEUUFnS0EwQUlCQkZEUUVMSUE0b0Fnd2hCeUFOSUE0b0FoQWlDU0FPS0FJVUlnWnFJZ3BCTXlBS1FUTklHeUlLUVFBZ0NrRUFTaHRCMEJkcUxRQUFJZ28yQWlBZ0RTQUdJQWRxSWd4Qk15QU1RVE5JR3lJTVFRQWdERUVBU2hzaUVrR1FGMm90QUFBaUREWUNIQ0FOSUJKQkEyeEJrQmhxSWhFMkFoZ2dQd1JBSUEwQ2Z5QUdJQWdvQWhRaUNFY0VRQ0FOSUFZZ0NHcEJBV3BCQVhZaUNDQUphaUlTUVRNZ0VrRXpTQnNpRWtFQUlCSkJBRW9iUWRBWGFpMEFBRFlDQ0NBTklBY2dDR29pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLR3lJSVFaQVhhaTBBQURZQ0JDQUlRUU5zUVpBWWFnd0JDeUFOSUFvMkFnZ2dEU0FNTmdJRUlCRUxOZ0lBQ3lCQUJFQUNRQ0FHSUJRb0FoUWlDRWNFUUNBTklBWWdDR3BCQVdwQkFYWWlCaUFKYWlJSVFUTWdDRUV6U0JzaUNFRUFJQWhCQUVvYlFkQVhhaTBBQURZQ0ZDQU5JQVlnQjJvaUJrRXpJQVpCTTBnYklnWkJBQ0FHUVFCS0d5SUdRWkFYYWkwQUFEWUNFQ0FHUVFOc1FaQVlhaUVSREFFTElBMGdDallDRkNBTklBdzJBaEFMSUEwZ0VUWUNEQXNnS3lnQ0FDQWZJRGxzSWg1QkNIUnFJQ0pCQkhScUlRbEJBQ0ViUVFNaEJ5QU5RVEJxSVE4RFFDQVBLQUlFSWdZRVFDQUpJQVlnRFNnQ0RDQU5LQUlRSUEwb0FoUWdOaEFUQ3lBUEtBSU1JZ1lFUUNBSlFRUnFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSVVJZ1lFUUNBSlFRaHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSWNJZ1lFUUNBSlFReHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBSElRd0NRQUpBQWtBZ0R5Z0NBQ0lHSUE4b0FnZ2lFVWNOQUNBR0lBOG9BaEJIRFFBZ0JpQVBLQUlZUncwQUlBWkZEUUlnRFNBYlFReHNhaUlIS0FJSUlSSWdCeWdDQkNFUUlBWkJCRWtOQVNBUVFRSjJRUUpxSVJsQkVDRVJJQWtoQndOQUFrQWdCeUFqYWlJR0xRQUFJaFFnQnkwQUFDSVRheUlJSUFoQkgzVWlDR29nQ0hNaUNDQVFUdzBBSUFjZ0xtb2lJUzBBQUNJY0lCUnJJZ29nQ2tFZmRTSUthaUFLY3lBU1R3MEFJQWNnTm1vaUpDMEFBQ0lWSUJOcklnb2dDa0VmZFNJS2FpQUtjeUFTVHcwQUFuOENRQ0FJSUJsSkJFQWdCeUFnYWlJSUxRQUFJUnNDZnlBU0lBY2dMR29pQ2kwQUFDSVdJQlJySWlnZ0tFRWZkU0lvYWlBb2Mwc0VRQ0FHSUJVZ0V5QVVhaUFjYWlJR1FRRjBhaUFXYWtFRWFrRURkam9BQUNBaElBWWdGbXBCQW1wQkFuWTZBQUFnQmlBV1FRTnNhaUFISUU5cUxRQUFRUUYwYWtFRWFrRURkZ3dCQ3lBR0lRb2dGQ0FWYWlBY1FRRjBha0VDYWtFQ2Rnc2hCaUFLSUFZNkFBQWdHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFazhOQVNBSElCd2dGQ0FWYWlBVGFpSUdRUUYwYWlBYmFrRUVha0VEZGpvQUFDQWtJQVlnRzJwQkFtcEJBblk2QUFBZ0JpQWJRUU5zYWlBSElFeHFMUUFBUVFGMGFrRUVha0VEZGd3Q0N5QUdJQlFnRldvZ0hFRUJkR3BCQW1wQkFuWTZBQUFMSUFjaENDQVRJQnhxSUJWQkFYUnFRUUpxUVFKMkN5RUdJQWdnQmpvQUFBc2dCMEVCYWlFSElCRkJBV3NpRVEwQUN3d0NDd0ovSUFZRVFDQU5JQnRCREd4cUloWWhHVUVFSVJJZ0JpQVdLQUlBYWtFQmF5MEFBQ0lJUVFGcUlRcEJBQ0FJYXlFY0lBa2hCd05BQWtBZ0ZpZ0NCQ0FISUNOcUlpRXRBQUFpRkNBSExRQUFJaE5ySWdZZ0JrRWZkU0lHYWlBR2MwME5BQ0FaS0FJSUloRWdCeUF1YWlJa0xRQUFJaFVnRkdzaUJpQUdRUjkxSWdacUlBWnpUUTBBSUFjZ05tb2lLQzBBQUNJUUlCTnJJZ1lnQmtFZmRTSUdhaUFHY3lBUlR3MEFJQWdoQmlBUklBY2dMR290QUFBaUxTQVVheUlwSUNsQkgzVWlLV29nS1hOTEJFQWdKQ0FWSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQlZCQVhScklDMXFRUUYxSWdZZ0JpQUlTaHNnQmlBY1NCdHFPZ0FBSUJrb0FnZ2hFU0FLSVFZTElDRUNmeUFSSUFjZ0lHb3RBQUFpSVNBVGF5SWtJQ1JCSDNVaUpHb2dKSE5MQkVBZ0tDQVFJQndnQ0NBVElCUnFRUUZxUVFGMklCQkJBWFJySUNGcVFRRjFJaEVnQ0NBUlNCc2dFU0FjU0J0cU9nQUFJQVpCQVdvaEJndEJBQ0FHYXlJaEN5QUdJQlVnRUdzZ0V5QVVhMEVDZEdwQkJHcEJBM1VpRVNBR0lCRklHeUFSSUNGSUd5SUdJQlJxUWNBMWFpMEFBRG9BQUNBSElCTWdCbXRCd0RWcUxRQUFPZ0FBQ3lBSFFRRnFJUWNnRWtFQmF5SVNEUUFMSUE4b0FnZ2hFUXNnRVFzRVFFRUVJUklnQ1VFRWFpRUhJQTBnRzBFTWJHb2lGaUVaSUJFZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlRSWdZRVFDQUpRUWhxSVFjZ0RTQWJRUXhzYWlJV0lSbEJCQ0VTSUFZZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlZSWdaRkRRRWdDVUVNYWlFSElBMGdHMEVNYkdvaUVDRVdRUVFoRWlBR0lCQW9BZ0JxUVFGckxRQUFJZ2hCQVdvaENrRUFJQWhySVJ3RFFBSkFJQkFvQWdRZ0J5QWphaUlaTFFBQUloUWdCeTBBQUNJVGF5SUdJQVpCSDNVaUJtb2dCbk5ORFFBZ0ZpZ0NDQ0lSSUFjZ0xtb2lJUzBBQUNJVklCUnJJZ1lnQmtFZmRTSUdhaUFHYzAwTkFDQUhJRFpxSWlRdEFBQWlHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFVThOQUNBSUlRWWdFU0FISUN4cUxRQUFJaWdnRkdzaUxTQXRRUjkxSWkxcUlDMXpTd1JBSUNFZ0ZTQWNJQWdnRXlBVWFrRUJha0VCZGlBVlFRRjBheUFvYWtFQmRTSUdJQVlnQ0VvYklBWWdIRWdiYWpvQUFDQVdLQUlJSVJFZ0NpRUdDeUFaQW44Z0VTQUhJQ0JxTFFBQUloa2dFMnNpSVNBaFFSOTFJaUZxSUNGelN3UkFJQ1FnR3lBY0lBZ2dFeUFVYWtFQmFrRUJkaUFiUVFGMGF5QVpha0VCZFNJUklBZ2dFVWdiSUJFZ0hFZ2Jham9BQUNBR1FRRnFJUVlMUVFBZ0Jtc2lHUXNnQmlBVklCdHJJQk1nRkd0QkFuUnFRUVJxUVFOMUloRWdCaUFSU0JzZ0VTQVpTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdCeUFUSUFaclFjQTFhaTBBQURvQUFBc2dCMEVCYWlFSElCSkJBV3NpRWcwQUN3d0JDeUFHSUFjb0FnQnFRUUZyTFFBQUlnWkJBV29oQ2tFQUlBWnJJUnhCRUNFUklBa2hCd05BQWtBZ0J5QWphaUlXTFFBQUloUWdCeTBBQUNJVGF5SUlJQWhCSDNVaUNHb2dDSE1nRUU4TkFDQUhJQzVxSWhrdEFBQWlGU0FVYXlJSUlBaEJIM1VpQ0dvZ0NITWdFazhOQUNBSElEWnFJaUV0QUFBaUd5QVRheUlJSUFoQkgzVWlDR29nQ0hNZ0VrOE5BQ0FHSVFnZ0VpQUhJQ3hxTFFBQUlpUWdGR3NpS0NBb1FSOTFJaWhxSUNoelN3UkFJQmtnRlNBY0lBWWdFeUFVYWtFQmFrRUJkaUFWUVFGMGF5QWtha0VCZFNJSUlBWWdDRWdiSUFnZ0hFZ2Jham9BQUNBS0lRZ0xJQllnRkFKL0lCSWdCeUFnYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwc0VRQ0FoSUJzZ0hDQUdJQk1nRkdwQkFXcEJBWFlnRzBFQmRHc2dGbXBCQVhVaUZpQUdJQlpJR3lBV0lCeElHMm82QUFBZ0NFRUJhaUVJQzBFQUlBaHJJaFlMSUFnZ0ZTQWJheUFUSUJSclFRSjBha0VFYWtFRGRTSVZJQWdnRlVnYklCVWdGa2diSWdocVFjQTFhaTBBQURvQUFDQUhJQk1nQ0d0QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VVRUJheUlSRFFBTEN5QU1RUUZySVFjZ0QwRWdhaUVQSUFrZ1Myb2hDVUVDSVJzZ0RBMEFDeUFPS0FJTUlRWWdEU0FPS0FJUUlna2dEaWdDRkNJS0lBNG9BaGdpREdvaUIwRXpJQWRCTTBnYklnZEJBQ0FIUVFCS0cwRUNkRUhRUFdvb0FnQWlCMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBIUUYyb3RBQUFpRWpZQ0lDQU5JQVlnQjJvaUNFRXpJQWhCTTBnYklnaEJBQ0FJUVFCS0d5SUlRWkFYYWkwQUFDSVJOZ0ljSUEwZ0NFRURiRUdRR0dvaUNEWUNHQ0EvQkVBZ0RRSi9JQW9nRGlnQ3pBRW9BaFFpRDBjRVFDQU5JQWNnRENBUGFpSVBRVE1nRDBFelNCc2lEMEVBSUE5QkFFb2JRUUowUWRBOWFpZ0NBR3BCQVdwQkFYWWlEeUFKYWlJVVFUTWdGRUV6U0JzaUZFRUFJQlJCQUVvYlFkQVhhaTBBQURZQ0NDQU5JQVlnRDJvaUQwRXpJQTlCTTBnYklnOUJBQ0FQUVFCS0d5SVBRWkFYYWkwQUFEWUNCQ0FQUVFOc1FaQVlhZ3dCQ3lBTklCSTJBZ2dnRFNBUk5nSUVJQWdMTmdJQUN5QkFCRUFDUUNBS0lBNG9Bc2dCS0FJVUlnOUhCRUFnRFNBSElBd2dEMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBFQ2RFSFFQV29vQWdCcVFRRnFRUUYySWdjZ0NXb2lDRUV6SUFoQk0wZ2JJZ2hCQUNBSVFRQktHMEhRRjJvdEFBQTJBaFFnRFNBR0lBZHFJZ1pCTXlBR1FUTklHeUlHUVFBZ0JrRUFTaHNpQmtHUUYyb3RBQUEyQWhBZ0JrRURiRUdRR0dvaENBd0JDeUFOSUJJMkFoUWdEU0FSTmdJUUN5QU5JQWcyQWd3TElDc29BZ0FnVG1vZ0hrRUdkR29nSWtFRGRHb2lCeUJOYWlFU1FRRWhIRUVBSVFZZ0RVRXdhaUVSQTBBQ1FDQVJLQUlFSWdsRkRRQUNRQ0FOS0FJUUlnZ2dCMEVCYXlJVExRQUFJZ29nQnkwQUFDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDRkNJVklBZEJBbXN0QUFBaUR5QUtheUlVSUJSQkgzVWlGR29nRkhOTkRRQWdGU0FITFFBQkloUWdER3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWNDZnlBSlFRTk5CRUFnRXlBSklBMG9BZ3hxUVFGckxRQUFJZ2hCZjNNaUV5QUlRUUZxSWhVZ0RDQUthMEVDZENBVWF5QVBha0VFYWtFRGRTSUlJQWdnRlVvYklBZ2dFMGdiSWdnZ0NtcEJ3RFZxTFFBQU9nQUFJQXdnQ0d0QndEVnFMUUFBREFFTElCTWdDaUFVYWlBUFFRRjBha0VDYWtFQ2Rqb0FBQ0FNSUJSQkFYUnFJQTlxUVFKcVFRSjJDem9BQUNBTktBSVFJUWdMQWtBZ0J5QWFhaUlLUVFGckloVXRBQUFpRENBS0xRQUFJZzlySWhRZ0ZFRWZkU0lVYWlBVWN5QUlUdzBBSUEwb0FoUWlHeUFLUVFKckxRQUFJaFFnREdzaUV5QVRRUjkxSWhOcUlCTnpUUTBBSUJzZ0NpMEFBU0lUSUE5ckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBS0FuOGdDVUVEVFFSQUlCVWdDU0FOS0FJTWFrRUJheTBBQUNJSVFYOXpJZ2tnQ0VFQmFpSUtJQThnREd0QkFuUWdFMnNnRkdwQkJHcEJBM1VpQ0NBSUlBcEtHeUFJSUFsSUd5SUlJQXhxUWNBMWFpMEFBRG9BQUNBUElBaHJRY0ExYWkwQUFBd0JDeUFWSUF3Z0Uyb2dGRUVCZEdwQkFtcEJBblk2QUFBZ0R5QVRRUUYwYWlBVWFrRUNha0VDZGdzNkFBQWdEU2dDRUNFSUN5QVJLQUlFSVFrQ1FDQVNRUUZySWhNdEFBQWlDaUFTTFFBQUlneHJJZzhnRDBFZmRTSVBhaUFQY3lBSVR3MEFJQTBvQWhRaUZTQVNRUUpyTFFBQUlnOGdDbXNpRkNBVVFSOTFJaFJxSUJSelRRMEFJQlVnRWkwQUFTSVVJQXhySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FTQW44Z0NVRURUUVJBSUJNZ0NTQU5LQUlNYWtFQmF5MEFBQ0lJUVg5ekloTWdDRUVCYWlJVklBd2dDbXRCQW5RZ0ZHc2dEMnBCQkdwQkEzVWlDQ0FJSUJWS0d5QUlJQk5JR3lJSUlBcHFRY0ExYWkwQUFEb0FBQ0FNSUFoclFjQTFhaTBBQUF3QkN5QVRJQW9nRkdvZ0QwRUJkR3BCQW1wQkFuWTZBQUFnRENBVVFRRjBhaUFQYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NFQ0VJQ3lBSUlCSWdHbW9pQ2tFQmF5SVRMUUFBSWd3Z0NpMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRFNnQ0ZDSVZJQXBCQW1zdEFBQWlDQ0FNYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRlNBS0xRQUJJaFFnRDJzaUd5QWJRUjkxSWh0cUlCdHpUUTBBSUFvQ2Z5QUpRUU5OQkVBZ0V5QUpJQTBvQWd4cVFRRnJMUUFBSWdsQmYzTWlDaUFKUVFGcUlna2dEeUFNYTBFQ2RDQVVheUFJYWtFRWFrRURkU0lJSUFnZ0NVb2JJQWdnQ2tnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQk1nRENBVWFpQUlRUUYwYWtFQ2FrRUNkam9BQUNBUElCUkJBWFJxSUFocVFRSnFRUUoyQ3pvQUFBc0NRQ0FSS0FJa0lncEZEUUFDUUNBTktBSVFJZ2dnQnlBMmFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlVSWhzZ0NVRUNheTBBQUNJVUlBeHJJaE1nRTBFZmRTSVRhaUFUYzAwTkFDQWJJQWt0QUFFaUV5QVBheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdDUUovSUFwQkEwMEVRQ0FWSUFvZ0RTZ0NER3BCQVdzdEFBQWlDRUYvY3lJVklBaEJBV29pR3lBUElBeHJRUUowSUJOcklCUnFRUVJxUVFOMUlnZ2dDQ0FiU2hzZ0NDQVZTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0ZTQU1JQk5xSUJSQkFYUnFRUUpxUVFKMk9nQUFJQThnRTBFQmRHb2dGR3BCQW1wQkFuWUxPZ0FBSUEwb0FoQWhDQXNDUUNBSklCcHFJZ2xCQVdzaUZTMEFBQ0lNSUFrdEFBQWlEMnNpRkNBVVFSOTFJaFJxSUJSeklBaFBEUUFnRFNnQ0ZDSWJJQWxCQW1zdEFBQWlGQ0FNYXlJVElCTkJIM1VpRTJvZ0UzTk5EUUFnR3lBSkxRQUJJaE1nRDJzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrQ2Z5QUtRUU5OQkVBZ0ZTQUtJQTBvQWd4cVFRRnJMUUFBSWdoQmYzTWlDU0FJUVFGcUlnb2dEeUFNYTBFQ2RDQVRheUFVYWtFRWFrRURkU0lJSUFnZ0Nrb2JJQWdnQ1VnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQlVnRENBVGFpQVVRUUYwYWtFQ2FrRUNkam9BQUNBUElCTkJBWFJxSUJScVFRSnFRUUoyQ3pvQUFDQU5LQUlRSVFnTElCRW9BaVFoQ2dKQUlCSWdObW9pQ1VFQmF5SVZMUUFBSWd3Z0NTMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITWdDRThOQUNBTktBSVVJaHNnQ1VFQ2F5MEFBQ0lVSUF4ckloTWdFMEVmZFNJVGFpQVRjMDBOQUNBYklBa3RBQUVpRXlBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0NRSi9JQXBCQTAwRVFDQVZJQW9nRFNnQ0RHcEJBV3N0QUFBaUNFRi9jeUlWSUFoQkFXb2lHeUFQSUF4clFRSjBJQk5ySUJScVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBVlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFBZ0R5QUlhMEhBTldvdEFBQU1BUXNnRlNBTUlCTnFJQlJCQVhScVFRSnFRUUoyT2dBQUlBOGdFMEVCZEdvZ0ZHcEJBbXBCQW5ZTE9nQUFJQTBvQWhBaENBc2dDQ0FKSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaFFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSU1ha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBZ0VTZ0NGQ0lKUlEwQUlBZEJCR29oRXdKQUlBMG9BaHdpQ0NBSExRQURJZ29nQnkwQUJDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDSUNJVklBY3RBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQUhMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdCeUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUFjZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRXlBYWFpSUtRUUZySWhVdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUtRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ2kwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FLQW44Z0NVRURUUVJBSUJVZ0NTQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU1FRUnFJUk1nRVNnQ0ZDRUpBa0FnRWkwQUF5SUtJQkl0QUFRaURHc2lEeUFQUVI5MUlnOXFJQTl6SUFoUERRQWdEU2dDSUNJVklCSXRBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQVNMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdFaUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUJJZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xJQWdnRXlBYWFpSUtRUUZySWhNdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlnSWhVZ0NrRUNheTBBQUNJSUlBeHJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQVZJQW90QUFFaUZDQVBheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdDZ0ovSUFsQkEwMEVRQ0FUSUFrZ0RTZ0NHR3BCQVdzdEFBQWlDVUYvY3lJS0lBbEJBV29pQ1NBUElBeHJRUUowSUJScklBaHFRUVJxUVFOMUlnZ2dDQ0FKU2hzZ0NDQUtTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0V5QU1JQlJxSUFoQkFYUnFRUUpxUVFKMk9nQUFJQThnRkVFQmRHb2dDR3BCQW1wQkFuWUxPZ0FBQ3dKQUlCRW9BalFpQ2tVTkFDQUhJRFpxSWdsQkJHb2hGQUpBSUEwb0Fod2lDQ0FKTFFBRElnd2dDUzBBQkNJUGF5SVRJQk5CSDNVaUUyb2dFM05ORFFBZ0RTZ0NJQ0liSUJSQkFtc3RBQUFpRXlBTWF5SVZJQlZCSDNVaUZXb2dGWE5ORFFBZ0d5QUpMUUFGSWhVZ0Qyc2lFQ0FRUVI5MUloQnFJQkJ6VFEwQUlCUUNmeUFLUVFOTkJFQWdDU0FLSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pQ1NBSVFRRnFJaHNnRHlBTWEwRUNkQ0FWYXlBVGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0NVZ2JJZ2dnREdwQndEVnFMUUFBT2dBRElBOGdDR3RCd0RWcUxRQUFEQUVMSUFrZ0RDQVZhaUFUUVFGMGFrRUNha0VDZGpvQUF5QVBJQlZCQVhScUlCTnFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRkNBYWFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUpRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ1MwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FKQW44Z0NrRURUUVJBSUJVZ0NpQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU0lEWnFJZ2xCQkdvaEZDQVJLQUkwSVFvQ1FDQUpMUUFESWd3Z0NTMEFCQ0lQYXlJVElCTkJIM1VpRTJvZ0UzTWdDRThOQUNBTktBSWdJaHNnRkVFQ2F5MEFBQ0lUSUF4ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBYklBa3RBQVVpRlNBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0ZBSi9JQXBCQTAwRVFDQUpJQW9nRFNnQ0dHcEJBV3N0QUFBaUNFRi9jeUlKSUFoQkFXb2lHeUFQSUF4clFRSjBJQlZySUJOcVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBSlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFNZ0R5QUlhMEhBTldvdEFBQU1BUXNnQ1NBTUlCVnFJQk5CQVhScVFRSnFRUUoyT2dBRElBOGdGVUVCZEdvZ0UycEJBbXBCQW5ZTE9nQUFJQTBvQWh3aENBc2dDQ0FVSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaUFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSVlha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBQ1FDQVJLQUlBSWdnZ0VTZ0NDQ0lNUncwQUlBZ2dFU2dDRUVjTkFDQUlJQkVvQWhoSERRQWdDRVVOQVNBSElBZ2dEU0FHUVF4c2FpSUdJQm9RSHlBU0lCRW9BZ0FnQmlBYUVCOE1BUXNnQ0FSQUlBMGdCa0VNYkdvaUNTRUtJQWdnQ1NnQ0FHcEJBV3N0QUFBaUNFRi9jeUVNSUFoQkFXb2hEd0pBSUFrb0FnUWlDQ0FISUJkcUloVXRBQUFpRkNBSExRQUFJaE5ySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FLS0FJSUloc2dCeUFxYWkwQUFDSVFJQlJySWhZZ0ZrRWZkU0lXYWlBV2MwME5BQ0FiSUFjZ0dtb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0ZTQU1JQThnRXlBVWEwRUNkQ0FXYXlBUWFrRUVha0VEZFNJSUlBZ2dEMG9iSUFnZ0RFZ2JJZ2dnRkdwQndEVnFMUUFBT2dBQUlBY2dFeUFJYTBIQU5Xb3RBQUE2QUFBZ0NTZ0NCQ0VJQ3dKQUlBZEJBV29pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBU0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdDRThOQUNBS0tBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFNSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSUlJQWdnRDBvYklBZ2dERWdiSWdnZ0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBSWEwSEFOV290QUFBNkFBQWdDU2dDQkNFSUN5QVJLQUlBSUFrb0FnQnFRUUZyTFFBQUlnOUJmM01oRENBUFFRRnFJUThDUUNBU0lCZHFJaFV0QUFBaUZDQVNMUUFBSWhOckloc2dHMEVmZFNJYmFpQWJjeUFJVHcwQUlBb29BZ2dpR3lBU0lDcHFMUUFBSWhBZ0ZHc2lGaUFXUVI5MUloWnFJQlp6VFEwQUlCc2dFaUFhYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwME5BQ0FWSUF3Z0R5QVRJQlJyUVFKMElCWnJJQkJxUVFScVFRTjFJZ2dnQ0NBUFNoc2dDQ0FNU0JzaUNDQVVha0hBTldvdEFBQTZBQUFnRWlBVElBaHJRY0ExYWkwQUFEb0FBQ0FKS0FJRUlRZ0xBa0FnQ0NBU1FRRnFJZ2tnRjJvaUZTMEFBQ0lVSUJJdEFBRWlFMnNpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQW9vQWdnaUNDQUpJQ3BxTFFBQUlnb2dGR3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWdnQ1NBYWFpMEFBQ0liSUJOckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBVklCUWdEQ0FQSUJNZ0ZHdEJBblFnRzJzZ0NtcEJCR3BCQTNVaUNDQUlJQTlLR3lBSUlBeElHeUlJYWtIQU5Xb3RBQUE2QUFBZ0NTQVRJQWhyUWNBMWFpMEFBRG9BQUFzZ0VTZ0NDQ0VNQ3dKQUlBeEZEUUFnRFNBR1FReHNhaUlJSVFrZ0RDQUlLQUlBYWtFQmF5MEFBQ0lNUVg5eklRb2dERUVCYWlFUEFrQWdDQ2dDQkNJTUlBZEJBbW9pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBaUlWYXlJUUlCQkJIM1VpRUdvZ0VITk5EUUFnQ1NnQ0NDSVFJQlFnS21vdEFBQWlGaUFUYXlJWklCbEJIM1VpR1dvZ0dYTk5EUUFnRUNBVUlCcHFMUUFBSWhrZ0ZXc2lIaUFlUVI5MUloNXFJQjV6VFEwQUlCc2dDaUFQSUJVZ0UydEJBblFnR1dzZ0ZtcEJCR3BCQTNVaURDQU1JQTlLR3lBS0lBeEtHeUlNSUJOcVFjQTFhaTBBQURvQUFDQVVJQlVnREd0QndEVnFMUUFBT2dBQUlBZ29BZ1FoREFzQ1FDQUhRUU5xSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQU1pRldzaUVDQVFRUjkxSWhCcUlCQnpJQXhQRFFBZ0NTZ0NDQ0lRSUJRZ0ttb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0VDQVVJQnBxTFFBQUloa2dGV3NpSGlBZVFSOTFJaDVxSUI1elRRMEFJQnNnQ2lBUElCVWdFMnRCQW5RZ0dXc2dGbXBCQkdwQkEzVWlEQ0FNSUE5S0d5QUtJQXhLR3lJS0lCTnFRY0ExYWkwQUFEb0FBQ0FVSUJVZ0NtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaERBc2dFU2dDQ0NBSUtBSUFha0VCYXkwQUFDSVBRWDl6SVFvZ0QwRUJhaUVQQWtBZ0VrRUNhaUlVSUJkcUloc3RBQUFpRXlBU0xRQUNJaFZySWhBZ0VFRWZkU0lRYWlBUWN5QU1UdzBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TElBd2dFa0VEYWlJSUlCZHFJaFV0QUFBaUZDQVNMUUFESWhOckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSktBSUlJZ2tnQ0NBcWFpMEFBQ0lNSUJSckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSklBZ2dHbW90QUFBaUd5QVRheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdGU0FLSUE4Z0V5QVVhMEVDZENBYmF5QU1ha0VFYWtFRGRTSUpJQWtnRDBvYklBa2dDa2diSWdrZ0ZHcEJ3RFZxTFFBQU9nQUFJQWdnRXlBSmEwSEFOV290QUFBNkFBQUxBa0FnRVNnQ0VDSUtSUTBBSUEwZ0JrRU1iR29pQ0NFSklBb2dDQ2dDQUdwQkFXc3RBQUFpREVGL2N5RUtJQXhCQVdvaER3SkFJQWdvQWdRaURDQUhRUVJxSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQVFpRldzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TEFrQWdCMEVGYWlJVUlCZHFJaHN0QUFBaUV5QUhMUUFGSWhWckloQWdFRUVmZFNJUWFpQVFjeUFNVHcwQUlBa29BZ2dpRUNBVUlDcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCQWdGQ0FhYWkwQUFDSVpJQlZySWg0Z0hrRWZkU0llYWlBZWMwME5BQ0FiSUFvZ0R5QVZJQk5yUVFKMElCbHJJQlpxUVFScVFRTjFJZ3dnRENBUFNoc2dDaUFNU2hzaUNpQVRha0hBTldvdEFBQTZBQUFnRkNBVklBcHJRY0ExYWkwQUFEb0FBQ0FJS0FJRUlRd0xJQkVvQWhBZ0NDZ0NBR3BCQVdzdEFBQWlEMEYvY3lFS0lBOUJBV29oRHdKQUlCSkJCR29pRkNBWGFpSWJMUUFBSWhNZ0VpMEFCQ0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdERThOQUNBSktBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFLSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSU1JQXdnRDBvYklBb2dERW9iSWd3Z0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBTWEwSEFOV290QUFBNkFBQWdDQ2dDQkNFTUN5QU1JQkpCQldvaUNDQVhhaUlWTFFBQUloUWdFaTBBQlNJVGF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTZ0NDQ0lKSUFnZ0ttb3RBQUFpRENBVWF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTQUlJQnBxTFFBQUloc2dFMnNpRUNBUVFSOTFJaEJxSUJCelRRMEFJQlVnQ2lBUElCTWdGR3RCQW5RZ0cyc2dER3BCQkdwQkEzVWlDU0FKSUE5S0d5QUpJQXBJR3lJSklCUnFRY0ExYWkwQUFEb0FBQ0FJSUJNZ0NXdEJ3RFZxTFFBQU9nQUFDeUFSS0FJWUlncEZEUUFnRFNBR1FReHNhaUlJSVFrZ0NpQUlLQUlBYWtFQmF5MEFBQ0lHUVg5eklRb2dCa0VCYWlFTUFrQWdDQ2dDQkNJR0lBZEJCbW9pRHlBWGFpSVZMUUFBSWhRZ0J5MEFCaUlUYXlJYklCdEJIM1VpRzJvZ0czTk5EUUFnQ1NnQ0NDSWJJQThnS21vdEFBQWlFQ0FVYXlJV0lCWkJIM1VpRm1vZ0ZuTk5EUUFnR3lBUElCcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCVWdDaUFNSUJNZ0ZHdEJBblFnRm1zZ0VHcEJCR3BCQTNVaUJpQUdJQXhLR3lBR0lBcElHeUlHSUJScVFjQTFhaTBBQURvQUFDQVBJQk1nQm10QndEVnFMUUFBT2dBQUlBZ29BZ1FoQmdzQ1FDQUhRUWRxSWc4Z0Yyb2lGUzBBQUNJVUlBY3RBQWNpRTJzaUd5QWJRUjkxSWh0cUlCdHpJQVpQRFFBZ0NTZ0NDQ0liSUE4Z0ttb3RBQUFpRUNBVWF5SVdJQlpCSDNVaUZtb2dGbk5ORFFBZ0d5QVBJQnBxTFFBQUloWWdFMnNpR1NBWlFSOTFJaGxxSUJselRRMEFJQlVnQ2lBTUlCTWdGR3RCQW5RZ0Ztc2dFR3BCQkdwQkEzVWlCaUFHSUF4S0d5QUdJQXBJR3lJR0lCUnFRY0ExYWkwQUFEb0FBQ0FQSUJNZ0JtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaEJnc2dFU2dDR0NBSUtBSUFha0VCYXkwQUFDSU1RWDl6SVFvZ0RFRUJhaUVNQWtBZ0VrRUdhaUlQSUJkcUloVXRBQUFpRkNBU0xRQUdJaE5ySWhzZ0cwRWZkU0liYWlBYmN5QUdUdzBBSUFrb0FnZ2lHeUFQSUNwcUxRQUFJaEFnRkdzaUZpQVdRUjkxSWhacUlCWnpUUTBBSUJzZ0R5QWFhaTBBQUNJV0lCTnJJaGtnR1VFZmRTSVphaUFaYzAwTkFDQVZJQW9nRENBVElCUnJRUUowSUJacklCQnFRUVJxUVFOMUlnWWdCaUFNU2hzZ0JpQUtTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdEeUFUSUFaclFjQTFhaTBBQURvQUFDQUlLQUlFSVFZTElBWWdFa0VIYWlJSUlCZHFJaE10QUFBaUR5QVNMUUFISWhSckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBSktBSUlJZ1lnQ0NBcWFpMEFBQ0lKSUE5ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBR0lBZ2dHbW90QUFBaUZTQVVheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdFeUFQSUFvZ0RDQVVJQTlyUVFKMElCVnJJQWxxUVFScVFRTjFJZ1lnQmlBTVNoc2dCaUFLU0JzaUJtcEJ3RFZxTFFBQU9nQUFJQWdnRkNBR2EwSEFOV290QUFBNkFBQUxJQklnSUdvaEVpQUhJQ0JxSVFjZ0VVRkFheUVSSUJ4QkFYRWhDRUVBSVJ4QkFpRUdJQWdOQUFzZ0t5Z0NDQ0VSQzBFQUlDSkJBV29pQmlBR0lCOUdJZ1liSVNJZ0RrSFlBV29oRGlBR0lEbHFJamtnRVVrTkFBc0xJQTFCc0FGcUpBQWdBRUlBTndLb0NRSkFJQUFvQXBnSklnbEZEUUFnQ1VFRGNTRUhJQUFvQXJ3SklRaEJBQ0VHSUFsQkFXdEJBMDhFUUNBSlFYeHhJUTBEUUNBSUlBWkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFYSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFuSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkEzSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FHUVFScUlRWWdEVUVFYXlJTkRRQUxDeUFIUlEwQUEwQWdDQ0FHUWRnQmJHb2lDVUVBTmdMRUFTQUpRUUEyQWdRZ0JrRUJhaUVHSUFkQkFXc2lCdzBBQ3dzZ0FDZ0NFQ0VJUVFBaEJrRUJJUkVDUUNBQUtBTDBERVVOQUFOQUFrQUNRQ0FBSUFaQkZHeHFRZmdNYWlnQ0FBNEdBd0FBQUFBQkFBc2dCa0VCYWlFR0RBRUxDMEVBSVJFTEFrQUNmd0pBQWtBQ1FBSkFBa0FnQ0NnQ0VBNENBQUVDQ3lBQUtBTFFDaUlQUVFWR0JFQWdBRUlBTndLRUNpQUFLQUxzQ2lFR1FRQWhDZ3dFQ3lBQUtBS0VDaUlLSUFBb0F1d0tJZ1pORFFNZ0NpQUdheUFJS0FJVUlnZEJBWFpKRFFNZ0FDZ0NpQW9nQjJvTUJBdEJBQ0VHQW45QkFDQUFLQUxRQ2lJUFFRVkdEUUFhSUFBb0FwQUtJZ2NnQUNnQ2pBb2dBQ2dDNUFwTkRRQWFJQWdvQWd3Z0Iyb0xJUm9DZnlBSUtBSWtJZzRFUUNBQUtBTGtDaUFhYWlFR0N5QUdJQUFvQXRRS0loTkZJQVpCQUVkeGF5SVVDd1JBSUJSQkFXc2lCaUFHSUE1dUlpY2dEbXhySVJnTFFRQWhCMEVBSVFvQ1FDQU9SUTBBSUE1QkEzRWhFaUFJS0FJb0lRWkJBQ0VKSUE1QkFXdEJBMDhFUUVFQUlRd2dEa0Y4Y1NJSklRNERRQ0FHSUF4QkFuUWlEVUVNY21vb0FnQWdCaUFOUVFoeWFpZ0NBQ0FHSUExQkJISnFLQUlBSUFZZ0RXb29BZ0FnQ21wcWFtb2hDaUFNUVFScUlRd2dEa0VFYXlJT0RRQUxDeUFTUlEwQUEwQWdCaUFKUVFKMGFpZ0NBQ0FLYWlFS0lBbEJBV29oQ1NBU1FRRnJJaElOQUFzTElCUUVRQ0FLSUNkc0lRY2dDQ2dDS0NFSlFRQWhCZ05BSUFrZ0JrRUNkR29vQWdBZ0Iyb2hCeUFHUVFGcUlnWWdHRTBOQUFzTElCTkZCRUFnQ0NnQ0hDQUhhaUVIQ3lBUlJRMEJJQWdvQWlBaEJpQUFLQUw0Q2lFSUlBQWdHallDa0FvZ0FDQUFLQUxrQ2pZQ2pBb2dBQ2dDOUFvZ0JpQUlhaUlHUVI5MUlBWnhJQWRxYWlFR0RBUUxRUUFoQ2tFQUlRWWdBQ2dDMEFvaUQwRUZSd1JBSUFBb0FwQUtJUW9nQUNnQzVBb2lCaUFBS0FLTUNra0VRQ0FJS0FJTUlBcHFJUW9MSUFZZ0NtcEJBWFFnQUNnQzFBcEZheUVHQ3lBUlJRMEFJQUFnQ2pZQ2tBb2dBQ0FBS0FMa0NqWUNqQW9NQXdzZ0FFSUFOd0tNQ2tFQUlRWU1BZ3NDUUNBR0lBcE5EUUFnQmlBS2F5QUlLQUlVSWdkQkFYWk5EUUFnQUNnQ2lBb2dCMnNNQVFzZ0FDZ0NpQW9MSVFnZ0FDZ0MxQXBGQkVBZ0JpQUlhaUFBS0FMd0NpSUdRUjkxSUFaeGFpRUdEQUVMSUFBZ0NEWUNpQW9nQUNnQzhBb2hCeUFSUlFSQVFRQWhCaUFBUVFBMkFvZ0tJQUJCQUNBSGF5QUhRUjkxY1RZQ2hBb01BUXNnQUNBR05nS0VDaUFHSUFocUlBZEJIM1VnQjNGcUlRWUxBa0FnQUNnQ3BBbEZEUUFnRDBFRlJpRUhJQUFvQXJnS0lRZ2dBQ2dDdEFraENTQUFLQUs0Q1NFS0lBQW9BdVFLSVF3Z0FDZ0MxQW9FUUNBNElGUWdDQ0FNSUFZZ0J5QUtJQWtRSEF3QkN5QTRRUUFnQ0NBTUlBWWdCeUFLSUFrUUhBc2dBRUlBTndLZ0NVRUJJUXBCQVNFTURBRUxRUUFoQ2tFRElRd0xJQXhCQlhGRkRRQUxJQW9FUUNBRUlBQW9BaEFpQVNnQ05FRUVkRFlDQUNBRklBRW9BamhCQkhRMkFnQWdBQ0FBS0FMWUNTSUJRUUZxTmdMWUNTQURJQUFvQXRBSklBRkJCSFJxS0FJQU5nSUFDeUFMUWZBQmFpUUFJQXdMVEFFQ2YwRUJJUUlnQUVFQVFjUWFFQU1pQUVHMENtcEJBVFlDQUNBQVFvQ0NnSUNBQkRjQ0JDQUFRY0FRRUFnaUF6WUNzQm9nQXdSL0lBRUVRQ0FBUVFFMkFzQUpDMEVBQlVFQkN3c0x4aklhQUVHR0NBdktCV1lnSmhBR0NHVVlaUmhERUVNUVF4QkRFRU1RUXhCREVFTVFJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnQUFBQUFBQUFBQUdwQVNqQXFLQW9nYVRocE9Fa29TU2dwSUNrZ0NSZ0pHR2d3YURCb01HZ3dTQ0JJSUVnZ1NDQW9HQ2dZS0Jnb0dBZ1FDQkFJRUFnUVp5aG5LR2NvWnlobktHY29aeWhuS0VjWVJ4aEhHRWNZUnhoSEdFY1lSeGh1WUU1WUxsQU9VRzVZVGxBdVNBNUlEVUFOUUUxSVRVZ3RRQzFBRFRnTk9HMVFiVkJOUUUxQUxUZ3RPQTB3RFRCclNHdElhMGhyU0d0SWEwaHJTR3RJU3poTE9FczRTemhMT0VzNFN6aExPQ3N3S3pBck1Dc3dLekFyTUNzd0t6QUxLQXNvQ3lnTEtBc29DeWdMS0Fzb0FBQUFBQzlvTDJnUWdGQ0FNSUFRZUhDQVVIZ3dlQkJ3Y0hoUWNEQndFR2h2Y0c5d1QyaFBhQzlnTDJBUFlBOWdiMmh2YUU5Z1QyQXZXQzlZRDFnUFdBQUFBQUFBQUFBQVpqaEdJQ1lnQmhCbU1FWVlKaGdHQ0dVb1pTZ2xFQ1VRWkNCa0lHUWdaQ0JrR0dRWVpCaGtHRU1RUXhCREVFTVFReEJERUVNUVF4QUFBQUFBQUFBQUFHbElTVGdwT0Frd0NDZ0lLRWd3U0RBb01DZ3dDQ0FJSUdkQVowQm5RR2RBUnloSEtFY29SeWduS0Njb0p5Z25LQWNZQnhnSEdBY1lBQUFBQUcxNGJYaHVnRTZBTG9BT2dDNTREbmhPZUM1d1RYQk5jQTF3RFhCdGNHMXdUV2hOYUMxb0xXZ05hQTFvYldodGFFMWdUV0F0WUMxZ0RXQU5ZQXhZREZnTVdBeFlURmhNV0V4WVRGZ3NXQ3hZTEZnc1dBeFFERkFNVUF4UWJHQnNZR3hnYkdCTVVFeFFURkJNVUN4UUxGQXNVQ3hRREVnTVNBeElERWhyV0d0WWExaHJXR3RZYTFocldHdFlTMGhMU0V0SVMwaExTRXRJUzBoTFNDdElLMGdyU0N0SUswZ3JTQ3RJSzBnTFFBdEFDMEFMUUF0QUMwQUxRQXRBYTFCclVHdFFhMUJyVUd0UWExQnJVRXRBUzBCTFFFdEFTMEJMUUV0QVMwQXJRQ3RBSzBBclFDdEFLMEFyUUN0QUN6Z0xPQXM0Q3pnTE9BczRDemdMT0FCQjRBMExyZ2tHR0VZNEpqZ0dFR1pJUmpBbU1BWUlKU2dsS0VVb1JTZ2xJQ1VnUlNCRklDVVlKUmhsUUdWQVJSaEZHQ1VRSlJCa09HUTRaRGhrT0dRd1pEQmtNR1F3WkNoa0tHUW9aQ2hrSUdRZ1pDQmtJR1FZWkJoa0dHUVlSQkJFRUVRUVJCQWtDQ1FJSkFna0NBUUFCQUFFQUFRQUFBQUtnR3FBU29BcWdBcDRhbmhLZUNwNENuQnFjRXB3S25BS2FDbG9LV2dKWUFsZ1NXaEphQ2xnS1dBSldBbFlhV2hwYUVsZ1NXQXBXQ2xZQ1ZBSlVHaGdhR0JvWUdoZ1NGaElXRWhZU0Znb1VDaFFLRkFvVUFoSUNFZ0lTQWhJYUZob1dHaFlhRmhJVUVoUVNGQklVQ2hJS0Vnb1NDaElDRUFJUUFoQUNFQUhPQWM0QnpnSE9BYzRCemdIT0FjNEJ6QUhNQWN3QnpBSE1BY3dCekFITUVkSVIwaEhTRWRJUjBoSFNFZElSMGdIS0Fjb0J5Z0hLQWNvQnlnSEtBY29aMUJuVUdkUVoxQm5VR2RRWjFCblVFZEFSMEJIUUVkQVIwQkhRRWRBUjBBblFDZEFKMEFuUUNkQUowQW5RQ2RBQnlBSElBY2dCeUFISUFjZ0J5QUhJQVlJSmdnQUFBWUFCaEFtRUVZUUFBQUdHQ1lZUmhobUdBWWdKaUJHSUdZZ0JpZ21LRVlvWmlnR01DWXdSakJtTUFZNEpqaEdPR1k0QmtBbVFFWkFaa0FHU0NaSVJraG1TQVpRSmxCR1VHWlFCbGdtV0VaWVpsZ0dZQ1pnUm1CbVlBWm9KbWhHYUdab0JuQW1jRVp3Wm5BR2VDWjRSbmhtZUFhQUpvQkdnR2FBQUFCREVBSUFBZ0FoQ0NFSUlRZ2hDR2NnWnlCSUlDZ2dSeGhIR0NjWUp4Z0dJQVlnQmlBR0lBWVlCaGdHR0FZWUJoQUdFQVlRQmhCbUdHWVlaaGhtR0NZUUpoQW1FQ1lRQmdnR0NBWUlCZ2dBQUdWVlJFUTBOQ01qSXlNVEV4TVRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRDU2ZG5JeUxpNHA2ZW5wNWVYbDVlR2hvYUdob2FHaG5aMmRuWjJkbloyNXRiR3RxV2xsWldFaElTRWRIUjBkR1JrWkdSVVZGUlVRME5EUTBORFEwTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhNREF3TURBd01EQTlhMnhjV2xwWldWaElTRWhGUlVWRlJFUkVSRUJBUUVCSE56YzNOemMzTnpZMk5qWTJOalkyTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhQRnRhVUZsSlIwZERRMEpDU0RnNE9EWTJOalkxTlRVMU5EUTBOREV4TVRFN1dWcEtTRWhDUWtGQlFFQkhOemMzTmpZMk5qVTFOVFUwTkRRME16TXpNenBnWVZGWVNFaElTVGs1T1RrNU9UazNOemMzTnpjM056WTJOalkyTmpZMk5UVTFOVFUxTlRVME5EUTBORFEwTkRNek16TXpNek16TWpJeU1qSXlNakk1WUdGUlYwZEhSMGc0T0RnNE9EZzROalkyTmpZMk5qWTBORFEwTkRRME5ETXpNek16TXpNek1qSXlNakl5TWpJMUpTVWxKU1VsSlNVbEpTVWxKU1VsS0dCaVVsRkJRVUZITnpjM056YzNOelkyTmpZMk5qWTJNek16TXpNek16TTFKU1VsSlNVbEpTVWxKU1VsSlNVbEpDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNGZ1oxZFNRa0pDUlRVMU5UVTFOVFUySmlZbUppWW1KaVltSmlZbUppWW1KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDTWpJeU1qSXlNakl5TWpJeU1qSXlNaFVGWkdRakl5TWpVbEpTVWxKU1VsSkNRa0pDUWtKQ1FqSXlNakl5TWpJeUJCUWpJek16VTFOQlFVRkJRVUZCUVFRVVEwTWlJaUlpTVRFeE1URXhNVEVERXpJeUlTRWhJUUlTSVNFUkFTSVNBUUV5SWhJQ1F6TWlJaElTQWdKVFF6TWpFaElDQWhNalF6TmpVd0lDQUVHZ0Z3c2tCQVFGQmdjSUNRb01EUThSRkJZWkhDQWtLQzB5T0Q5SFVGcGxjWCtRb3JiTDR2Ly9BRUhnRndza0FnSUNBd01EQXdRRUJBWUdCd2NJQ0FrSkNnb0xDd3dNRFEwT0RnOFBFQkFSRVJJU0FFSEZHQXVFQVFFQUFBRUFBQUVBQUFFQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSUJBUUlCQVFJQkFRSUJBZ01CQWdNQ0FnTUNBZ1FDQXdRQ0F3UURBd1VEQkFZREJBWUVCUWNFQlFnRUJna0ZCd29HQ0FzR0NBMEhDZzRJQ3hBSkRCSUtEUlFMRHhjTkVSa0FBQUFBQUFBQUFBVUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCMUJrTEZRVUFBQUFBQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0JCOUJrTEZRVUFBQUFFQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCbEJvTEJRVUFBQUFFQUVHa0dndWxBUWNBQUFBRUFBQUFBZ0FBQUFRQUFBQUJBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFFQUFBQUVBQUFBQXdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQkFBQUFCQUFBQUFRQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dCQjFCc0xGUTBBQUFBQUFBQUFEd0FBQVA4QUFBQUFBQUFBL3dCQjlCc0xGUTBBQUFBRUFBQUFDQUFBQVA4QUFBQUFBQUFBL3dCQmxCd0x0UXNOQUFBQUJBQUFBQWdBQUFBQUFBQUFEd0FBQUFRQUFBQUtBQUFBQkFBQUFBa0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQ1FBQUFBUUFBQUFMQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUpBQUFBQkFBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFrQUFBQUVBQUFBREFBQUFBUUFBQUFMQUFBQUJBQUFBQTRBQUFBQkFBQUFDZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBS0FBQUFCQUFBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQW9BQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUNnQUFBQUVBQUFBTEFBQUFCQUFBQUFBQUFBQUVBQUFBQVFBQUFBRUFBQUFPQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBNEFBQUFFQUFBQUJBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUJBQUFBRGdBQUFBRUFBQUFQQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFFQUFBQU9BQUFBQVFBQUFBOEFBQUFFQUFBQUJBQUFBQVFBQUFBRkFBQUFCQUFBQUFJQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBZ0FBQUFRQUFBQUlBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQ0FBQUFCQUFBQUFNQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFHQUFBQUJBQUFBQXdBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQkFBQUFBWUFBQUFFQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFBUUFBQUFIQUFBQUJBQUFBQXdBQUFBRUFBQUFEUUFBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBUUFBQUE0QUFBRC9BQUFBQkFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBQkFBQUFDd0FBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFBUUFBQUE0QUFBQUVBQUFBQVFBQUFQOEFBQUFFQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFDQUFBQUNnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBRUFBQUFQQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBOEFBQUFDQUFBQUNnQUFBQVFBQUFBRkFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUdBQUFBL3dBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQkFBQUFBa0FBQUQvQUFBQURBQUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUlBQUFEL0FBQUFDQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFFQUFBQUJ3QUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFIQUFBQS93QUFBQUlBQUFBRUFBQUFEUUFBQVA4QUFBQUlBQUFBQXdBQUFBOEFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQURBQUFBRHdBQUFBQUFBQUFGQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFNQUFBQVBBQUFBQVFBQUFBb0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBd0FBQUE4QUFBQUJBQUFBQ2dBQUFBQUFBQUFGQUFBQUJBQUFBQUFBQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFCQUFBQUFFQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQXNBQUFBQkFBQUFEZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUN3QUFBQUVBQUFBT0FBQUFCQUFBQUFFQUFBQUVBQUFBQkFBQUFBQUFBQUFIQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QVFkUW5DeFVIQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QVFmUW5DeFVIQUFBQUJBQUFBQUlBQUFEL0FBQUFBQUFBQVA4QVFaUW9DOWtCQndBQUFBUUFBQUFDQUFBQUFBQUFBQTBBQUFBRUFBQUFDQUFBQUFRQUFBQURBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQ1FBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBREFBQUFCQUFBQUFZQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUFBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQU1BQUFBQ0FBQUFBd0FBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQUlBQUFBREFCQitDa0xCUVFBQUFBRUFFR0lLZ3R4QkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFDQUFBQUFnQUFBQU1BQUFBREFBQUFBQUFBQUFCQUFBQUJBQUFBQVVBQUFBQ0FBQUFBd0FBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFNQUFBQURRQUFBQW9BQUFBTEFBQUFEZ0FBQUE4QUFBQUFBQUFBQVFBQUFBRUFRWVFyQ3hFQkFBQUFBUUFBQUFFQUFBQUNBQUFBQWdCQnBDc0xCUVVBQUFBRUFFRzBLd3VKQmdjQUFBQUVBQUFBQWdBQUFBUUFBQUFCQUFBQUJBQUFBQVFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQUFBQUFBMEFBQUFFQUFBQUNBQUFBQUFBQUFBUEFBQUFCQUFBQUFvQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUJBQUFBQXNBQUFBRUFBQUFEZ0FBQUFBQUFBQVJBQUFBQkFBQUFCQUFBQUFBQUFBQUV3QUFBQVFBQUFBU0FBQUFBQUFBQUJVQUFBQUVBQUFBRkFBQUFBQUFBQUFYQUFBQUJBQUFBQllBQUFBQkFBQUFDZ0FBQUFFQUFBQUxBQUFBQkFBQUFBQUFBQUFFQUFBQUFRQUFBQUVBQUFBT0FBQUFBUUFBQUE4QUFBQUVBQUFBQkFBQUFBUUFBQUFGQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBQVFBQUFBSEFBQUFCQUFBQUF3QUFBQUVBQUFBRFFBQUFBRUFBQUFTQUFBQUFRQUFBQk1BQUFBRUFBQUFFQUFBQUFRQUFBQVJBQUFBQVFBQUFCWUFBQUFCQUFBQUZ3QUFBQVFBQUFBVUFBQUFCQUFBQUJVQUFBQUJBQUFBQ3dBQUFBRUFBQUFPQUFBQUJBQUFBQUVBQUFEL0FBQUFCQUFBQUFFQUFBQVBBQUFBQWdBQUFBb0FBQUFFQUFBQUJRQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFBUUFBQUFKQUFBQS93QUFBQXdBQUFBRUFBQUFCd0FBQVA4QUFBQUNBQUFBQkFBQUFBMEFBQUQvQUFBQUNBQUFBQUVBQUFBVEFBQUFBZ0FBQUJJQUFBQUVBQUFBRVFBQUFQOEFBQUFRQUFBQUFRQUFBQmNBQUFBQ0FBQUFGZ0FBQUFRQUFBQVZBQUFBL3dBQUFCUUFBQUFEQUFBQUR3QUFBQUVBQUFBS0FBQUFBQUFBQUFVQUFBQUVBQUFBQUFBQUFBRUFBQUFMQUFBQUFRQUFBQTRBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBQUFBQUFBY0FBQUFFQUFBQUFnQUFBQUFBQUFBTkFBQUFCQUFBQUFnQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUJBQUFBQWtBQUFBRUFBQUFEQUFBQUFNQUFBQVRBQUFBQVFBQUFCSUFBQUFBQUFBQUVRQUFBQVFBQUFBUUFBQUFBd0FBQUJjQUFBQUJBQUFBRmdBQUFBQUFBQUFWQUFBQUJBQUFBQlFBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFEQUFBQUF3QkJ3VFVMdkFZQkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXF1c3JhNnZzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS92Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QUFBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QVFZWThDeTRCQVFFQkFRRUNBZ0lDQWdJREF3TURBd01FQkFRRUJBUUZCUVVGQlFVR0JnWUdCZ1lIQndjSEJ3Y0lDQWdJQUVIQVBBdEZDZ0FBQUEwQUFBQVFBQUFBQ3dBQUFBNEFBQUFTQUFBQURRQUFBQkFBQUFBVUFBQUFEZ0FBQUJJQUFBQVhBQUFBRUFBQUFCUUFBQUFaQUFBQUVnQUFBQmNBQUFBZEFFR1JQUXN6QVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURBRUhVUFF1c0FnRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhRQUFBQjRBQUFBZkFBQUFJQUFBQUNBQUFBQWhBQUFBSWdBQUFDSUFBQUFqQUFBQUl3QUFBQ1FBQUFBa0FBQUFKUUFBQUNVQUFBQWxBQUFBSmdBQUFDWUFBQUFtQUFBQUp3QUFBQ2NBQUFBbkFBQUFKd0FBQUM4ZkR3QVhHeDBlQndzTkRpY3JMUzRRQXdVS0RCTVZHaHdqSlNvc0FRSUVDQkVTRkJnR0NSWVpJQ0VpSkNnbUtRQVFBUUlFQ0NBREJRb01EeThIQ3cwT0Jna2ZJeVVxTENFaUpDZ25LeTB1RVJJVUdCTVZHaHdYR3gwZUZoa21LUUJCZ2NBQUN3SWlVQT09IiwgVyhoKSB8fCAoaCA9IFUoaCkpOwogICAgZnVuY3Rpb24gdShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEkgPT0gaCAmJiBIKQogICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEgpOwogICAgICAgIHZhciBnID0geihJKTsKICAgICAgICBpZiAoZykKICAgICAgICAgIHJldHVybiBnOwogICAgICAgIGlmIChNKQogICAgICAgICAgcmV0dXJuIE0oSSk7CiAgICAgICAgdGhyb3cgImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIjsKICAgICAgfSBjYXRjaCAoUSkgewogICAgICAgIGMoUSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlBKCkgewogICAgICByZXR1cm4gIUggJiYgcyAmJiB0eXBlb2YgZmV0Y2ggPT0gImZ1bmN0aW9uIiA/IGZldGNoKGgsIHsKICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICB9KS50aGVuKGZ1bmN0aW9uKEkpIHsKICAgICAgICBpZiAoIUkub2spCiAgICAgICAgICB0aHJvdyAiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIiArIGggKyAiJyI7CiAgICAgICAgcmV0dXJuIEkuYXJyYXlCdWZmZXIoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHUoaCk7CiAgICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdShoKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBEQSgpIHsKICAgICAgdmFyIEkgPSB7CiAgICAgICAgYTogTkEKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZyhpLCBvKSB7CiAgICAgICAgdmFyIE4gPSBpLmV4cG9ydHM7CiAgICAgICAgQS5hc20gPSBOLCBLID0gQS5hc20uYywgWChLLmJ1ZmZlciksIHAgPSBBLmFzbS5sLCBRQShBLmFzbS5kKSwgRUEoKTsKICAgICAgfQogICAgICBCQSgpOwogICAgICBmdW5jdGlvbiBRKGkpIHsKICAgICAgICBnKGkuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEIoaSkgewogICAgICAgIHJldHVybiBpQSgpLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG8sIEkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgfSkudGhlbihpLCBmdW5jdGlvbihvKSB7CiAgICAgICAgICBrKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiICsgbyksIGMobyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICByZXR1cm4gIUggJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICJmdW5jdGlvbiIgJiYgIVcoaCkgJiYgdHlwZW9mIGZldGNoID09ICJmdW5jdGlvbiIgPyBmZXRjaChoLCB7CiAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oaSkgewogICAgICAgICAgdmFyIG8gPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhpLCBJKTsKICAgICAgICAgIHJldHVybiBvLnRoZW4oUSwgZnVuY3Rpb24oTikgewogICAgICAgICAgICByZXR1cm4gaygid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIgKyBOKSwgaygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSwgQihRKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pIDogQihRKTsKICAgICAgfQogICAgICBpZiAoQS5pbnN0YW50aWF0ZVdhc20pCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBSID0gQS5pbnN0YW50aWF0ZVdhc20oSSwgZyk7CiAgICAgICAgICByZXR1cm4gUjsKICAgICAgICB9IGNhdGNoIChpKSB7CiAgICAgICAgICByZXR1cm4gaygiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGkpLCAhMTsKICAgICAgICB9CiAgICAgIHJldHVybiB5KCkuY2F0Y2goUyksIHt9OwogICAgfQogICAgZnVuY3Rpb24gWihJKSB7CiAgICAgIGZvciAoOyBJLmxlbmd0aCA+IDA7ICkgewogICAgICAgIHZhciBnID0gSS5zaGlmdCgpOwogICAgICAgIGlmICh0eXBlb2YgZyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBnKEEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHZhciBRID0gZy5mdW5jOwogICAgICAgIHR5cGVvZiBRID09ICJudW1iZXIiID8gZy5hcmcgPT09IHZvaWQgMCA/IHAuZ2V0KFEpKCkgOiBwLmdldChRKShnLmFyZykgOiBRKGcuYXJnID09PSB2b2lkIDAgPyBudWxsIDogZy5hcmcpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBHQShJLCBnLCBRKSB7CiAgICAgIHIuY29weVdpdGhpbihJLCBnLCBnICsgUSk7CiAgICB9CiAgICBmdW5jdGlvbiBvQShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEsuZ3JvdyhJIC0gbS5ieXRlTGVuZ3RoICsgNjU1MzUgPj4+IDE2KSwgWChLLmJ1ZmZlciksIDE7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBoQShJKSB7CiAgICAgIHZhciBnID0gci5sZW5ndGg7CiAgICAgIEkgPSBJID4+PiAwOwogICAgICB2YXIgUSA9IDIxNDc0ODM2NDg7CiAgICAgIGlmIChJID4gUSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIGZvciAodmFyIEIgPSAxOyBCIDw9IDQ7IEIgKj0gMikgewogICAgICAgIHZhciB5ID0gZyAqICgxICsgMC4yIC8gQik7CiAgICAgICAgeSA9IE1hdGgubWluKHksIEkgKyAxMDA2NjMyOTYpOwogICAgICAgIHZhciBSID0gTWF0aC5taW4oUSwgXyhNYXRoLm1heChJLCB5KSwgNjU1MzYpKSwgaSA9IG9BKFIpOwogICAgICAgIGlmIChpKQogICAgICAgICAgcmV0dXJuICEwOwogICAgICB9CiAgICAgIHJldHVybiAhMTsKICAgIH0KICAgIHZhciB5QSA9IHR5cGVvZiBhdG9iID09ICJmdW5jdGlvbiIgPyBhdG9iIDogZnVuY3Rpb24oSSkgewogICAgICB2YXIgZyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsIFEgPSAiIiwgQiwgeSwgUiwgaSwgbywgTiwgZiwgWSA9IDA7CiAgICAgIEkgPSBJLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCAiIik7CiAgICAgIGRvCiAgICAgICAgaSA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgbyA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgTiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgZiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgQiA9IGkgPDwgMiB8IG8gPj4gNCwgeSA9IChvICYgMTUpIDw8IDQgfCBOID4+IDIsIFIgPSAoTiAmIDMpIDw8IDYgfCBmLCBRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoQiksIE4gIT09IDY0ICYmIChRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLCBmICE9PSA2NCAmJiAoUSA9IFEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpKTsKICAgICAgd2hpbGUgKFkgPCBJLmxlbmd0aCk7CiAgICAgIHJldHVybiBROwogICAgfTsKICAgIGZ1bmN0aW9uIGFBKEkpIHsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHZhciBnID0geUEoSSksIFEgPSBuZXcgVWludDhBcnJheShnLmxlbmd0aCksIEIgPSAwOyBCIDwgZy5sZW5ndGg7ICsrQikKICAgICAgICAgIFFbQl0gPSBnLmNoYXJDb2RlQXQoQik7CiAgICAgICAgcmV0dXJuIFE7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geihJKSB7CiAgICAgIGlmIChXKEkpKQogICAgICAgIHJldHVybiBhQShJLnNsaWNlKFAubGVuZ3RoKSk7CiAgICB9CiAgICB2YXIgTkEgPSB7CiAgICAgIGI6IEdBLAogICAgICBhOiBoQQogICAgfTsKICAgIERBKCksIEEuX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5fX193YXNtX2NhbGxfY3RvcnMgPSBBLmFzbS5kKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZEluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9oMjY0YnNkSW5pdCA9IEEuYXNtLmUpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9tYWxsb2MgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9tYWxsb2MgPSBBLmFzbS5mKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5fZnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2ZyZWUgPSBBLmFzbS5nKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZERlY29kZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2REZWNvZGUgPSBBLmFzbS5oKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZFNodXRkb3duID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5faDI2NGJzZFNodXRkb3duID0gQS5hc20uaSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuX2gyNjRic2RBbGxvYyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RBbGxvYyA9IEEuYXNtLmopLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9oMjY0YnNkRnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RGcmVlID0gQS5hc20uaykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuZ2V0VmFsdWUgPSB2OwogICAgdmFyIGQ7CiAgICBGID0gZnVuY3Rpb24gSSgpIHsKICAgICAgZCB8fCB4KCksIGQgfHwgKEYgPSBJKTsKICAgIH07CiAgICBmdW5jdGlvbiB4KEkpIHsKICAgICAgaWYgKHcgPiAwIHx8ICgkKCksIHcgPiAwKSkKICAgICAgICByZXR1cm47CiAgICAgIGZ1bmN0aW9uIGcoKSB7CiAgICAgICAgZCB8fCAoZCA9ICEwLCBBLmNhbGxlZFJ1biA9ICEwLCAhZSAmJiAoQUEoKSwgQyhBKSwgQS5vblJ1bnRpbWVJbml0aWFsaXplZCAmJiBBLm9uUnVudGltZUluaXRpYWxpemVkKCksIElBKCkpKTsKICAgICAgfQogICAgICBBLnNldFN0YXR1cyA/IChBLnNldFN0YXR1cygiUnVubmluZy4uLiIpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBBLnNldFN0YXR1cygiIik7CiAgICAgICAgfSwgMSksIGcoKTsKICAgICAgfSwgMSkpIDogZygpOwogICAgfQogICAgaWYgKEEucnVuID0geCwgQS5wcmVJbml0KQogICAgICBmb3IgKHR5cGVvZiBBLnByZUluaXQgPT0gImZ1bmN0aW9uIiAmJiAoQS5wcmVJbml0ID0gW0EucHJlSW5pdF0pOyBBLnByZUluaXQubGVuZ3RoID4gMDsgKQogICAgICAgIEEucHJlSW5pdC5wb3AoKSgpOwogICAgcmV0dXJuIHgoKSwgQS5yZWFkeTsKICB9Owp9KCksIHEgPSB7fTsKZnVuY3Rpb24gc0EoKSB7CiAgcmV0dXJuIFNBKCkudGhlbihmdW5jdGlvbihhKSB7CiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihKKSB7CiAgICAgIHZhciBBID0gSi5kYXRhLCBDID0gQS5yZW5kZXJTdGF0ZUlkLCBTID0gQS50eXBlOwogICAgICBzd2l0Y2ggKFMpIHsKICAgICAgICBjYXNlICJkZWNvZGUiOiB7CiAgICAgICAgICB2YXIgRCA9IHFbQ107CiAgICAgICAgICBEIHx8IChEID0gbmV3IEwoYSwgZnVuY3Rpb24ocywgRywgVSkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInBpY3R1cmVSZWFkeSIsCiAgICAgICAgICAgICAgd2lkdGg6IEcsCiAgICAgICAgICAgICAgaGVpZ2h0OiBVLAogICAgICAgICAgICAgIHJlbmRlclN0YXRlSWQ6IEMsCiAgICAgICAgICAgICAgZGF0YTogcy5idWZmZXIKICAgICAgICAgICAgfSwgW3MuYnVmZmVyXSk7CiAgICAgICAgICB9KSwgcVtDXSA9IEQpLCBELmRlY29kZShuZXcgVWludDhBcnJheShBLmRhdGEsIEEub2Zmc2V0LCBBLmxlbmd0aCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInJlbGVhc2UiOiB7CiAgICAgICAgICB2YXIgRSA9IHFbQ107CiAgICAgICAgICBFICYmIChFLnJlbGVhc2UoKSwgZGVsZXRlIHFbQ10pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9KSwgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgIHR5cGU6ICJkZWNvZGVyUmVhZHkiCiAgICB9KTsKICB9KTsKfQpzQSgpOwo=",mn=typeof window<"u"&&window.Blob&&new Blob([atob(wn)],{type:"text/javascript;charset=utf-8"});function Ls(){let i;try{if(i=mn&&(window.URL||window.webkitURL).createObjectURL(mn),!i)throw"";return new Worker(i)}catch{return new Worker("data:application/javascript;base64,"+wn,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class tn{constructor(U={}){d(this,"worker");d(this,"_queueSize",0);d(this,"pendingTimestamps",[]);d(this,"pendingFrames",[]);d(this,"maxQueueSize");d(this,"onFrameDecoded");d(this,"onError");d(this,"onQueueOverflow");d(this,"configured",!1);this.onFrameDecoded=U.onFrameDecoded,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow,this.maxQueueSize=U.maxQueueSize??10}get queueSize(){return this._queueSize}get state(){return this.worker?this.configured?"configured":"configuring":"unconfigured"}async configure(U){return this.worker&&(this.worker.terminate(),this.worker=void 0),this.worker=new Ls,this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],new Promise((F,e)=>{this.worker.addEventListener("message",t=>{var n;const Q=t.data;switch(Q.type){case"pictureReady":this.handlePictureReady(Q);break;case"decoderReady":console.log("[WasmDecoder] Worker ready"),this.configured=!0,F();break;case"error":const s=new Error(Q.error||"WASM decoder error");(n=this.onError)==null||n.call(this,s),e(s);break}}),this.worker.addEventListener("error",t=>{var n;const Q=new Error(`Worker error: ${t.message}`);(n=this.onError)==null||n.call(this,Q),e(Q)})})}decodeBinary(U){var n,s;if(!this.worker||!this.configured||!U.header||!U.payload)return;const F=new Uint8Array(U.payload),e=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},t={num:1,den:1e6},Q=on(U.header.pts,e,t);this.pendingFrames.push(F),this.pendingTimestamps.push(Q),this.decodeNext()}decodeNext(){const U=this.pendingFrames.shift();U!=null&&this.decode(U)}decode(U){!this.worker||!this.configured||(this._queueSize>=this.maxQueueSize,this._queueSize++,this.worker.postMessage({type:"decode",data:U.buffer,offset:U.byteOffset,length:U.byteLength,renderStateId:1},[U.buffer]))}handlePictureReady(U){var Z;this._queueSize--;const{width:F,height:e,data:t}=U,Q=new Uint8Array(t),n=F,s=n*e,l=s>>2,B=Q.subarray(0,s),a=Q.subarray(s,s+l),r=Q.subarray(s+l,s+2*l),h=e>>1,J=n>>1,E=this.pendingTimestamps.shift()??0,S={y:B,u:a,v:r,width:F,height:e,chromaStride:J,chromaHeight:h,timestamp:E,close:()=>{}};(Z=this.onFrameDecoded)==null||Z.call(this,S)}flush(){this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}flushSync(){this.flush()}reset(){this.flush()}dispose(){this.worker&&(this.worker.terminate(),this.worker=void 0),this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}}class vn{constructor(U={}){d(this,"buffer",[]);d(this,"bufferDelayMs");d(this,"maxBufferSize");d(this,"startRealTimeUs",null);d(this,"startStreamTimeUs",null);d(this,"frameDurationUs",2e4);d(this,"lastFrameTimestamp",null);d(this,"bufferSizeHistory",[]);d(this,"driftCheckInterval");d(this,"driftThresholdMs");d(this,"dequeueCount",0);d(this,"latencyHistory",[]);d(this,"latencyHistorySize",60);d(this,"stats",{dropped:0,enqueued:0,dequeued:0,driftCorrections:0});d(this,"logger");d(this,"onFrameDropped");this.bufferDelayMs=U.bufferDelayMs??100;const F=Math.ceil(this.bufferDelayMs/1e3*60*2);this.maxBufferSize=U.maxBufferSize??Math.max(30,F),this.driftCheckInterval=U.driftCheckInterval??150,this.driftThresholdMs=U.driftCorrectionThresholdMs??30,this.logger=U.logger??(()=>{}),this.onFrameDropped=U.onFrameDropped}get bufferDelayUs(){return this.bufferDelayMs*1e3}get effectiveDriftThresholdMs(){return Math.min(this.driftThresholdMs,this.bufferDelayMs*.5)}enqueue(U,F,e){var t;if(this.stats.enqueued++,this.lastFrameTimestamp!==null){const Q=F-this.lastFrameTimestamp;Q>0&&Q<1e5&&(this.frameDurationUs=Q)}for(this.lastFrameTimestamp=F;this.buffer.length>=this.maxBufferSize;){const Q=this.buffer.shift();Q&&(this.stats.dropped++,(t=this.onFrameDropped)==null||t.call(this,Q.frame,"overflow"),this.startRealTimeUs=null,this.startStreamTimeUs=null)}this.buffer.push({frame:U,timestamp:F,timing:e})}dequeue(U){const F=U*1e3,e=performance.now();if(this.buffer.length===0)return null;if(this.bufferDelayMs===0)return this.trackBufferSize(),this.dequeueLatest(e);const t=this.buffer.length*this.frameDurationUs/1e3,Q=Math.min(this.bufferDelayMs*.5,this.frameDurationUs/1e3);if(t<Q)return null;this.startRealTimeUs===null&&(this.startRealTimeUs=F,this.startStreamTimeUs=this.buffer[0].timestamp+this.bufferDelayUs,this.logger(`Playback started: buffer=${Math.round(t)}ms, delay=${this.bufferDelayMs}ms`)),this.trackBufferSize();const n=F-this.startRealTimeUs,s=this.startStreamTimeUs+n-this.bufferDelayUs;let l=this.findBestFrameIndex(s);if(l===-1)return null;l>1&&(this.dropFrames(l-1,"skip"),l=0),this.dequeueCount++,this.dequeueCount%this.driftCheckInterval===0&&this.correctDrift();const B=this.buffer.shift();return this.stats.dequeued++,this.recordLatency(B.timing,e),B.frame}dequeueLatest(U){const F=this.buffer.pop();return this.stats.dequeued++,this.recordLatency(F.timing,U),this.dropFrames(this.buffer.length,"skip"),F.frame}recordLatency(U,F){const e=U.decodeTime-U.arrivalTime,t=F-U.decodeTime,Q=F-U.arrivalTime;this.latencyHistory.push({decode:e,buffer:t,total:Q}),this.latencyHistory.length>this.latencyHistorySize&&this.latencyHistory.shift()}getLatencyStats(){if(this.latencyHistory.length===0)return null;const U=this.latencyHistory[this.latencyHistory.length-1],F=this.latencyHistory.reduce((Q,n)=>Q+n.decode,0)/this.latencyHistory.length,e=this.latencyHistory.reduce((Q,n)=>Q+n.buffer,0)/this.latencyHistory.length,t=this.latencyHistory.reduce((Q,n)=>Q+n.total,0)/this.latencyHistory.length;return{decodeLatency:Math.round(U.decode*10)/10,bufferLatency:Math.round(U.buffer*10)/10,totalLatency:Math.round(U.total*10)/10,avgDecodeLatency:Math.round(F*10)/10,avgBufferLatency:Math.round(e*10)/10,avgTotalLatency:Math.round(t*10)/10}}findBestFrameIndex(U){let F=-1;for(let e=0;e<this.buffer.length&&this.buffer[e].timestamp<=U;e++)F=e;return F}dropFrames(U,F){var e;for(let t=0;t<U&&this.buffer.length>0;t++){const Q=this.buffer.shift();this.stats.dropped++,(e=this.onFrameDropped)==null||e.call(this,Q.frame,F)}}trackBufferSize(){this.bufferSizeHistory.push(this.buffer.length),this.bufferSizeHistory.length>100&&this.bufferSizeHistory.shift()}correctDrift(){if(this.bufferSizeHistory.length<10||!this.startStreamTimeUs)return;const e=this.bufferSizeHistory.reduce((Q,n)=>Q+n,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3-this.bufferDelayMs,t=this.effectiveDriftThresholdMs;if(Math.abs(e)>t){const Q=e*1e3;this.startStreamTimeUs+=Q,this.stats.driftCorrections++,this.bufferSizeHistory=[],this.logger(`Drift correction: ${e.toFixed(1)}ms`)}}clear(){var U;for(const F of this.buffer)(U=this.onFrameDropped)==null||U.call(this,F.frame,"overflow");this.buffer=[],this.startRealTimeUs=null,this.startStreamTimeUs=null,this.bufferSizeHistory=[]}setBufferDelay(U){const F=this.bufferDelayMs>0;this.bufferDelayMs=U,(F&&U===0||!F&&U>0)&&(this.bufferSizeHistory=[],this.startRealTimeUs=null,this.startStreamTimeUs=null)}getBufferDelay(){return this.bufferDelayMs}getStatus(){const U=this.buffer.length*this.frameDurationUs/1e3;let F=U;return this.bufferSizeHistory.length>0&&(F=this.bufferSizeHistory.reduce((t,Q)=>t+Q,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3),{currentBufferSize:this.buffer.length,currentBufferMs:Math.round(U),avgBufferMs:Math.round(F),targetBufferMs:this.bufferDelayMs,streamFrameDurationUs:this.frameDurationUs,droppedFrames:this.stats.dropped,totalEnqueuedFrames:this.stats.enqueued,totalDequeuedFrames:this.stats.dequeued,driftCorrections:this.stats.driftCorrections,latency:this.getLatencyStats()}}logStatus(){const U=this.getStatus(),F=(1e6/this.frameDurationUs).toFixed(1);this.logger(`buffer=${U.currentBufferMs}ms/${U.targetBufferMs}ms (${U.currentBufferSize} frames), dropped=${U.droppedFrames}, fps=${F}`)}resetStats(){this.stats={dropped:0,enqueued:0,dequeued:0,driftCorrections:0},this.bufferSizeHistory=[]}}const Os=`
|
|
1
|
+
"use strict";var Is=Object.create;var Ai=Object.defineProperty;var ws=Object.getOwnPropertyDescriptor;var vs=Object.getOwnPropertyNames;var _s=Object.getPrototypeOf,zs=Object.prototype.hasOwnProperty;var Hs=(i,U,e)=>U in i?Ai(i,U,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[U]=e;var Ys=(i,U,e,F)=>{if(U&&typeof U=="object"||typeof U=="function")for(let t of vs(U))!zs.call(i,t)&&t!==e&&Ai(i,t,{get:()=>U[t],enumerable:!(F=ws(U,t))||F.enumerable});return i};var Gs=(i,U,e)=>(e=i!=null?Is(_s(i)):{},Ys(U||!i||!i.__esModule?Ai(e,"default",{value:i,enumerable:!0}):e,i));var r=(i,U,e)=>(Hs(i,typeof U!="symbol"?U+"":U,e),e),ji=(i,U,e)=>{if(!U.has(i))throw TypeError("Cannot "+e)};var En=(i,U,e)=>(ji(i,U,"read from private field"),e?e.call(i):U.get(i)),Ki=(i,U,e)=>{if(U.has(i))throw TypeError("Cannot add the same private member more than once");U instanceof WeakSet?U.add(i):U.set(i,e)},Nn=(i,U,e,F)=>(ji(i,U,"write to private field"),F?F.call(i,e):U.set(i,e),e);var Pi=(i,U,e)=>(ji(i,U,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const FU={debug:i=>console.debug(`[VideoPlayer] ${i}`),info:i=>console.info(`[VideoPlayer] ${i}`),warn:i=>console.warn(`[VideoPlayer] ${i}`),error:i=>console.error(`[VideoPlayer] ${i}`)},yn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};class dn{constructor(){r(this,"handlers",new Map);r(this,"_connected",!1)}get connected(){return this._connected}on(U,e){this.handlers.has(U)||this.handlers.set(U,new Set),this.handlers.get(U).add(e)}off(U,e){var F;(F=this.handlers.get(U))==null||F.delete(e)}emit(U,...e){var F;(F=this.handlers.get(U))==null||F.forEach(t=>t(...e))}dispose(){this.handlers.clear()}}function Zn(i){return{debug:i?FU.debug:yn.debug,info:FU.info,warn:FU.warn,error:FU.error}}class rn{constructor(U,e=!1){r(this,"eventHandlers",new Map);r(this,"logger");r(this,"_state");this._state=U,this.logger=Zn(e)}get state(){return this._state}setState(U){if(this._state!==U){const e=this._state;this._state=U,this.logger.debug(`State: ${e} -> ${U}`),this.emit("statechange",U)}}setDebugLogging(U){this.logger=Zn(U)}on(U,e){this.eventHandlers.has(U)||this.eventHandlers.set(U,new Set),this.eventHandlers.get(U).add(e)}off(U,e){var F;(F=this.eventHandlers.get(U))==null||F.delete(e)}emit(U,...e){var F;(F=this.eventHandlers.get(U))==null||F.forEach(t=>t(...e))}clearEventHandlers(){this.eventHandlers.clear()}}const kn=1297302867,un=1,qi=32,ui=24,lU=64,$i=1,Un=2,In=4;var _i=(i=>(i[i.VIDEO_FRAME=1]="VIDEO_FRAME",i[i.AUDIO_FRAME=2]="AUDIO_FRAME",i[i.RPC=3]="RPC",i[i.MUXED_DATA=4]="MUXED_DATA",i[i.DECODER_DATA=5]="DECODER_DATA",i))(_i||{}),aU=(i=>(i[i.VIDEO_VP8=1]="VIDEO_VP8",i[i.VIDEO_VP9=2]="VIDEO_VP9",i[i.VIDEO_AVC=3]="VIDEO_AVC",i[i.VIDEO_HEVC=4]="VIDEO_HEVC",i[i.VIDEO_AV1=5]="VIDEO_AV1",i[i.AUDIO_OPUS=64]="AUDIO_OPUS",i[i.AUDIO_AAC=65]="AUDIO_AAC",i[i.AUDIO_PCM=66]="AUDIO_PCM",i))(aU||{});class Rn{static initHeader(U,e,F,t){return{magic:kn,version:un,header_size:this.calculateHeaderSize(e),type:U,flags:e,pts:F,id:t,reserved:0}}static calculateHeaderSize(U){let e=qi;return U&Un&&(e+=lU),U&$i&&(e+=ui),e}static validateHeader(U,e){if(U.magic!==kn||U.version!==un)return!1;const F=this.calculateHeaderSize(U.flags);return!(U.header_size!==F||e<U.header_size)}static serialize(U,e=null,F=null,t=null){const Q=e!==null&&U.flags&Un,n=F!==null&&U.flags&$i;let s=qi;Q&&(s+=lU),n&&(s+=ui),t&&(s+=t.length),U.header_size=s-(t?t.length:0);const l=new ArrayBuffer(s),B=new DataView(l);let a=0;if(B.setUint32(a,U.magic,!0),a+=4,B.setUint32(a,U.flags,!0),a+=4,B.setBigUint64(a,U.pts,!0),a+=8,B.setBigUint64(a,U.id,!0),a+=8,B.setUint16(a,U.version,!0),a+=2,B.setUint16(a,U.header_size,!0),a+=2,B.setUint16(a,U.type,!0),a+=2,B.setUint16(a,U.reserved,!0),a+=2,Q&&e){const d=this.stringToFixedBytes(e.metadata,64);new Uint8Array(l,a,64).set(d),a+=64}return n&&F&&(B.setUint32(a,F.sample_rate,!0),a+=4,B.setUint32(a,F.timebase_num,!0),a+=4,B.setUint32(a,F.timebase_den,!0),a+=4,B.setUint16(a,F.codec_profile,!0),a+=2,B.setUint16(a,F.codec_level,!0),a+=2,B.setUint16(a,F.width,!0),a+=2,B.setUint16(a,F.height,!0),a+=2,B.setUint8(a,F.codec_type),a+=1,B.setUint8(a,F.channels),a+=1,B.setUint8(a,F.bit_depth),a+=1,B.setUint8(a,F.reserved),a+=1),t&&t.length>0&&new Uint8Array(l,a).set(t),new Uint8Array(l)}static parseData(U){const e={valid:!1,header:null,metadata:null,codec_data:null,payload:null,payload_size:0};if(!U||U.length<36)return e;const F=new DataView(U.buffer,U.byteOffset);let t=0;const Q={magic:F.getUint32(t,!0),flags:F.getUint32(t+4,!0),pts:F.getBigUint64(t+8,!0),id:F.getBigUint64(t+16,!0),version:F.getUint16(t+24,!0),header_size:F.getUint16(t+26,!0),type:F.getUint16(t+28,!0),reserved:F.getUint16(t+30,!0)};if(t+=qi,!this.validateHeader(Q,U.length))return e;if(e.header=Q,Q.flags&Un){if(U.length<t+lU)return e;const n=U.slice(t,t+lU),s=this.fixedBytesToString(n);e.metadata={metadata:s},t+=lU}if(Q.flags&$i){if(U.length<t+ui)return e;e.codec_data={sample_rate:F.getUint32(t,!0),timebase_num:F.getUint32(t+4,!0),timebase_den:F.getUint32(t+8,!0),codec_profile:F.getUint16(t+12,!0),codec_level:F.getUint16(t+14,!0),width:F.getUint16(t+16,!0),height:F.getUint16(t+18,!0),codec_type:F.getUint8(t+20),channels:F.getUint8(t+21),bit_depth:F.getUint8(t+22),reserved:F.getUint8(t+23)},t+=ui}return t<U.length?(e.payload=U.slice(t),e.payload_size=e.payload.length):(e.payload=new Uint8Array(0),e.payload_size=0),e.valid=!0,e}static stringToFixedBytes(U,e){const F=new Uint8Array(e);let t;typeof TextEncoder<"u"?t=new TextEncoder().encode(U):t=new Uint8Array(Buffer.from(U,"utf8"));const Q=Math.min(t.length,e-1);return F.set(t.slice(0,Q)),F[Q]=0,F}static fixedBytesToString(U){let e=U.length;for(let F=0;F<U.length;F++)if(U[F]===0){e=F;break}return typeof TextDecoder<"u"?new TextDecoder().decode(U.slice(0,e)):Buffer.from(U.slice(0,e)).toString("utf8")}}function on(i,U,e){const F=i*BigInt(U.num)*BigInt(e.den)/(BigInt(U.den)*BigInt(e.num));return Number(F)}function fn(i,U){return!i&&!U?!1:!i||!U?!0:i.codec_type!==U.codec_type||i.width!==U.width||i.height!==U.height||i.codec_profile!==U.codec_profile||i.codec_level!==U.codec_level}function Xs(i){switch(i.codec_type){case 3:const U=i.codec_profile>0?i.codec_profile.toString(16).padStart(2,"0"):"42",e="00",F=i.codec_level>0?i.codec_level.toString(16).padStart(2,"0"):"1f";return`avc1.${U}${e}${F}`;case 4:return"hev1.1.6.L93.B0";case 2:return"vp09.00.10.08";case 1:return"vp8";case 5:return"av01.0.00M.08";default:return null}}class zi{constructor(U={}){r(this,"decoder",null);r(this,"config");r(this,"flushing",!1);r(this,"logger");r(this,"maxQueueSize");r(this,"onFrameDecoded");r(this,"onError");r(this,"onQueueOverflow");r(this,"chunksSentToDecoder",0);r(this,"framesDecoded",0);this.logger=U.logger??FU,this.onFrameDecoded=U.onFrameDecoded??U.onFrame,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow,this.maxQueueSize=U.maxQueueSize??10,this.createDecoder()}get decodeQueueSize(){var U;return((U=this.decoder)==null?void 0:U.decodeQueueSize)??0}get state(){var U;return((U=this.decoder)==null?void 0:U.state)??"closed"}createDecoder(){this.decoder=new VideoDecoder({output:U=>{this.framesDecoded++,this.onFrameDecoded?this.onFrameDecoded(U):U.close()},error:U=>{this.logger.error(`Decoder error: ${U.message}`),this.onError&&this.onError(U)}})}async configure(U,e=!0){return"codec"in U&&typeof U.codec=="string"?this.configureWithConfig(U):this.configureWithCodecData(U,e)}async configureWithConfig(U){var F;const e=[U,{...U,hardwareAcceleration:U.hardwareAcceleration==="prefer-hardware"?"prefer-software":"prefer-hardware"}];for(const t of e)if((await VideoDecoder.isConfigSupported(t)).supported){this.config=t,(F=this.decoder)==null||F.configure(t),this.logger.info(`Decoder configured: ${t.codec} ${t.codedWidth}x${t.codedHeight} (${t.hardwareAcceleration??"default"})`);return}throw new Error(`Codec configuration not supported: ${U.codec}`)}async configureWithCodecData(U,e=!0){var Q;const F=Xs(U);if(!F)throw new Error(`Unsupported codec type: ${U.codec_type}`);const t=[{codec:F,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:e?"prefer-hardware":"prefer-software",latencyMode:"realtime"},{codec:F,codedWidth:U.width,codedHeight:U.height,hardwareAcceleration:e?"prefer-software":"prefer-hardware",latencyMode:"realtime"}];for(const n of t)if((await VideoDecoder.isConfigSupported(n)).supported){this.config=n,(Q=this.decoder)==null||Q.configure(n),this.logger.info(`Decoder configured: ${F} ${U.width}x${U.height} (${n.hardwareAcceleration})`);return}throw new Error(`Codec configuration not supported: ${F}`)}decodeBinary(U){var n,s;if(this.flushing){this.logger.warn("Received packet while flushing");return}if(!U.header||!U.payload||!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const e=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},F={num:1,den:1e6},t=on(U.header.pts,e,F),Q=new EncodedVideoChunk({timestamp:t,type:U.header.flags&In?"key":"delta",data:U.payload??new Uint8Array(0)});try{this.chunksSentToDecoder++,this.decoder.decode(Q)}catch(l){this.logger.error(`Decode error: ${l}`)}}decode(U){if(this.flushing){this.logger.warn("Received sample while flushing");return}if(!this.decoder||this.decoder.state!=="configured")return;if(this.decoder.decodeQueueSize>this.maxQueueSize){this.onQueueOverflow&&this.onQueueOverflow(this.decoder.decodeQueueSize);return}const e=new EncodedVideoChunk({timestamp:U.timestamp,duration:U.duration,type:U.isKeyframe?"key":"delta",data:U.data});try{this.chunksSentToDecoder++,this.decoder.decode(e)}catch(F){this.logger.error(`Decode error: ${F}`)}}async flush(){if(!(!this.decoder||this.decoder.state==="closed")){this.flushing=!0;try{await this.decoder.flush()}catch{}this.flushing=!1}}flushSync(){this.flushing=!0,this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config)),this.flushing=!1}reset(){this.decoder&&this.decoder.state!=="closed"&&(this.decoder.reset(),this.config&&this.decoder.configure(this.config))}dispose(){this.decoder&&(this.decoder.state!=="closed"&&this.decoder.close(),this.decoder=null),this.config=void 0}}const wn="dmFyIEwgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gYShBLCBDKSB7CiAgICB0aGlzLnRpbnlIMjY0TW9kdWxlID0gQSwgdGhpcy5vblBpY3R1cmVSZWFkeSA9IEMsIHRoaXMucFN0b3JhZ2UgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkQWxsb2MoKSwgdGhpcy5wV2lkdGggPSB0aGlzLnRpbnlIMjY0TW9kdWxlLl9tYWxsb2MoNCksIHRoaXMucEhlaWdodCA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5wUGljdHVyZSA9IHRoaXMudGlueUgyNjRNb2R1bGUuX21hbGxvYyg0KSwgdGhpcy5fZGVjQnVmZmVyID0gdGhpcy50aW55SDI2NE1vZHVsZS5fbWFsbG9jKDEwNDg1NzYpLCB0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkSW5pdCh0aGlzLnBTdG9yYWdlLCAwKTsKICB9CiAgdmFyIEogPSBhLnByb3RvdHlwZTsKICByZXR1cm4gSi5yZWxlYXNlID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgQyA9IHRoaXMucFN0b3JhZ2U7CiAgICBDICE9PSAwICYmICh0aGlzLnRpbnlIMjY0TW9kdWxlLl9oMjY0YnNkU2h1dGRvd24oQyksIHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2RGcmVlKEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBXaWR0aCksIHRoaXMudGlueUgyNjRNb2R1bGUuX2ZyZWUodGhpcy5wSGVpZ2h0KSwgdGhpcy50aW55SDI2NE1vZHVsZS5fZnJlZSh0aGlzLnBQaWN0dXJlKSwgdGhpcy5wU3RvcmFnZSA9IDAsIHRoaXMucFdpZHRoID0gMCwgdGhpcy5wSGVpZ2h0ID0gMDsKICB9LCBKLmRlY29kZSA9IGZ1bmN0aW9uKEMpIHsKICAgIEMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiAoQyA9IG5ldyBVaW50OEFycmF5KEMpKSwgdGhpcy50aW55SDI2NE1vZHVsZS5IRUFQVTguc2V0KEMsIHRoaXMuX2RlY0J1ZmZlcik7CiAgICB2YXIgUyA9IHRoaXMudGlueUgyNjRNb2R1bGUuX2gyNjRic2REZWNvZGUodGhpcy5wU3RvcmFnZSwgdGhpcy5fZGVjQnVmZmVyLCBDLmJ5dGVMZW5ndGgsIHRoaXMucFBpY3R1cmUsIHRoaXMucFdpZHRoLCB0aGlzLnBIZWlnaHQpOwogICAgaWYgKFMgPT09IGEuUElDX1JEWSkgewogICAgICB2YXIgRCA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wV2lkdGgsICJpMzIiKSwgRSA9IHRoaXMudGlueUgyNjRNb2R1bGUuZ2V0VmFsdWUodGhpcy5wSGVpZ2h0LCAiaTMyIiksIHMgPSB0aGlzLnRpbnlIMjY0TW9kdWxlLmdldFZhbHVlKHRoaXMucFBpY3R1cmUsICJpOCoiKSwgRyA9IG5ldyBVaW50OEFycmF5KHRoaXMudGlueUgyNjRNb2R1bGUuSEVBUFU4LnN1YmFycmF5KHMsIHMgKyBEICogRSAqIDMgLyAyKSk7CiAgICAgIHRoaXMub25QaWN0dXJlUmVhZHkoRywgRCwgRSk7CiAgICB9CiAgfSwgYTsKfSgpOwpMLlJEWSA9IDA7CkwuUElDX1JEWSA9IDE7CkwuSERSU19SRFkgPSAyOwpMLkVSUk9SID0gMzsKTC5QQVJBTV9TRVRfRVJST1IgPSA0OwpMLk1FTUFMTE9DX0VSUk9SID0gNTsKdmFyIFNBID0gZnVuY3Rpb24oKSB7CiAgdmFyIGEgPSB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwOwogIHJldHVybiBmdW5jdGlvbihBKSB7CiAgICBBID0gQSB8fCB7fTsKICAgIHZhciBBID0gdHlwZW9mIEEgPCAidSIgPyBBIDoge30sIEMsIFM7CiAgICBBLnJlYWR5ID0gbmV3IFByb21pc2UoZnVuY3Rpb24oSSwgZykgewogICAgICBDID0gSSwgUyA9IGc7CiAgICB9KTsKICAgIHZhciBEID0ge30sIEU7CiAgICBmb3IgKEUgaW4gQSkKICAgICAgQS5oYXNPd25Qcm9wZXJ0eShFKSAmJiAoRFtFXSA9IEFbRV0pOwogICAgdmFyIHMgPSAhMCwgRyA9ICIiOwogICAgZnVuY3Rpb24gVShJKSB7CiAgICAgIHJldHVybiBBLmxvY2F0ZUZpbGUgPyBBLmxvY2F0ZUZpbGUoSSwgRykgOiBHICsgSTsKICAgIH0KICAgIHZhciBNOwogICAgRyA9IHNlbGYubG9jYXRpb24uaHJlZiwgYSAmJiAoRyA9IGEpLCBHLmluZGV4T2YoImJsb2I6IikgIT09IDAgPyBHID0gRy5zdWJzdHIoMCwgRy5sYXN0SW5kZXhPZigiLyIpICsgMSkgOiBHID0gIiIsIE0gPSBmdW5jdGlvbihnKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIFEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXR1cm4gUS5vcGVuKCJHRVQiLCBnLCAhMSksIFEucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIiwgUS5zZW5kKG51bGwpLCBuZXcgVWludDhBcnJheShRLnJlc3BvbnNlKTsKICAgICAgfSBjYXRjaCAoeSkgewogICAgICAgIHZhciBCID0geihnKTsKICAgICAgICBpZiAoQikKICAgICAgICAgIHJldHVybiBCOwogICAgICAgIHRocm93IHk7CiAgICAgIH0KICAgIH0sIEEucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTsKICAgIHZhciBrID0gQS5wcmludEVyciB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTsKICAgIGZvciAoRSBpbiBEKQogICAgICBELmhhc093blByb3BlcnR5KEUpICYmIChBW0VdID0gRFtFXSk7CiAgICBEID0gbnVsbCwgQS5hcmd1bWVudHMgJiYgQS5hcmd1bWVudHMsIEEudGhpc1Byb2dyYW0gJiYgQS50aGlzUHJvZ3JhbSwgQS5xdWl0ICYmIEEucXVpdDsKICAgIHZhciBIOwogICAgQS53YXNtQmluYXJ5ICYmIChIID0gQS53YXNtQmluYXJ5KSwgQS5ub0V4aXRSdW50aW1lLCB0eXBlb2YgV2ViQXNzZW1ibHkgIT0gIm9iamVjdCIgJiYgYygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpOwogICAgZnVuY3Rpb24gdihJLCBnLCBRKSB7CiAgICAgIHN3aXRjaCAoZyA9IGcgfHwgImk4IiwgZy5jaGFyQXQoZy5sZW5ndGggLSAxKSA9PT0gIioiICYmIChnID0gImkzMiIpLCBnKSB7CiAgICAgICAgY2FzZSAiaTEiOgogICAgICAgICAgcmV0dXJuIHRbSSA+PiAwXTsKICAgICAgICBjYXNlICJpOCI6CiAgICAgICAgICByZXR1cm4gdFtJID4+IDBdOwogICAgICAgIGNhc2UgImkxNiI6CiAgICAgICAgICByZXR1cm4gT1tJID4+IDFdOwogICAgICAgIGNhc2UgImkzMiI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImk2NCI6CiAgICAgICAgICByZXR1cm4gbltJID4+IDJdOwogICAgICAgIGNhc2UgImZsb2F0IjoKICAgICAgICAgIHJldHVybiBsW0kgPj4gMl07CiAgICAgICAgY2FzZSAiZG91YmxlIjoKICAgICAgICAgIHJldHVybiBUW0kgPj4gM107CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGMoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIgKyBnKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBLLCBlID0gITE7CiAgICBmdW5jdGlvbiBfKEksIGcpIHsKICAgICAgcmV0dXJuIEkgJSBnID4gMCAmJiAoSSArPSBnIC0gSSAlIGcpLCBJOwogICAgfQogICAgdmFyIG0sIHQsIHIsIE8sIG4sIGwsIFQ7CiAgICBmdW5jdGlvbiBYKEkpIHsKICAgICAgbSA9IEksIEEuSEVBUDggPSB0ID0gbmV3IEludDhBcnJheShJKSwgQS5IRUFQMTYgPSBPID0gbmV3IEludDE2QXJyYXkoSSksIEEuSEVBUDMyID0gbiA9IG5ldyBJbnQzMkFycmF5KEkpLCBBLkhFQVBVOCA9IHIgPSBuZXcgVWludDhBcnJheShJKSwgQS5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KEkpLCBBLkhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoSSksIEEuSEVBUEYzMiA9IGwgPSBuZXcgRmxvYXQzMkFycmF5KEkpLCBBLkhFQVBGNjQgPSBUID0gbmV3IEZsb2F0NjRBcnJheShJKTsKICAgIH0KICAgIEEuSU5JVElBTF9NRU1PUlk7CiAgICB2YXIgcCwgYiA9IFtdLCBqID0gW10sIFYgPSBbXTsKICAgIGZ1bmN0aW9uICQoKSB7CiAgICAgIGlmIChBLnByZVJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnByZVJ1biA9PSAiZnVuY3Rpb24iICYmIChBLnByZVJ1biA9IFtBLnByZVJ1bl0pOyBBLnByZVJ1bi5sZW5ndGg7ICkKICAgICAgICAgIGdBKEEucHJlUnVuLnNoaWZ0KCkpOwogICAgICBaKGIpOwogICAgfQogICAgZnVuY3Rpb24gQUEoKSB7CiAgICAgIFooaik7CiAgICB9CiAgICBmdW5jdGlvbiBJQSgpIHsKICAgICAgaWYgKEEucG9zdFJ1bikKICAgICAgICBmb3IgKHR5cGVvZiBBLnBvc3RSdW4gPT0gImZ1bmN0aW9uIiAmJiAoQS5wb3N0UnVuID0gW0EucG9zdFJ1bl0pOyBBLnBvc3RSdW4ubGVuZ3RoOyApCiAgICAgICAgICBDQShBLnBvc3RSdW4uc2hpZnQoKSk7CiAgICAgIFooVik7CiAgICB9CiAgICBmdW5jdGlvbiBnQShJKSB7CiAgICAgIGIudW5zaGlmdChJKTsKICAgIH0KICAgIGZ1bmN0aW9uIFFBKEkpIHsKICAgICAgai51bnNoaWZ0KEkpOwogICAgfQogICAgZnVuY3Rpb24gQ0EoSSkgewogICAgICBWLnVuc2hpZnQoSSk7CiAgICB9CiAgICB2YXIgdyA9IDAsIEYgPSBudWxsOwogICAgZnVuY3Rpb24gQkEoSSkgewogICAgICB3KyssIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyk7CiAgICB9CiAgICBmdW5jdGlvbiBFQShJKSB7CiAgICAgIGlmICh3LS0sIEEubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBBLm1vbml0b3JSdW5EZXBlbmRlbmNpZXModyksIHcgPT0gMCAmJiBGKSB7CiAgICAgICAgdmFyIGcgPSBGOwogICAgICAgIEYgPSBudWxsLCBnKCk7CiAgICAgIH0KICAgIH0KICAgIEEucHJlbG9hZGVkSW1hZ2VzID0ge30sIEEucHJlbG9hZGVkQXVkaW9zID0ge307CiAgICBmdW5jdGlvbiBjKEkpIHsKICAgICAgQS5vbkFib3J0ICYmIEEub25BYm9ydChJKSwgSSArPSAiIiwgayhJKSwgZSA9ICEwLCBJID0gImFib3J0KCIgKyBJICsgIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjsKICAgICAgdmFyIGcgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEkpOwogICAgICB0aHJvdyBTKGcpLCBnOwogICAgfQogICAgdmFyIFAgPSAiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7CiAgICBmdW5jdGlvbiBXKEkpIHsKICAgICAgcmV0dXJuIEkuc3RhcnRzV2l0aChQKTsKICAgIH0KICAgIHZhciBoOwogICAgaCA9ICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUdGemJRRUFBQUFCWWc1Z0NYOS9mMzkvZjM5L2Z3QmdBMzkvZndGL1lBSi9md0YvWUFGL0FYOWdBWDhBWUFSL2YzOS9BWDlnQm45L2YzOS9md0JnQW45L0FHQURmMzkvQUdBQUFHQUlmMzkvZjM5L2YzOEFZQVIvZjM5L0FHQUFBWDlnQm45L2YzOS9md0YvQWcwQ0FXRUJZUUFEQVdFQllnQUJBeVFqQWdFRUJRVUJBd0FCQ0FBR0F3Y0NBUUFHQWdrREFBQUFBQVFLQndJTEJBd0VEUUlFQlFGd0FRRUJCUWNCQVlBQ2dJQUNCZ2tCZndGQmdNVEFBZ3NIS1FvQll3SUFBV1FBRlFGbEFDUUJaZ0FJQVdjQUJBRm9BQ01CYVFBaUFXb0FJUUZyQUNBQmJBRUFDdktWQnlQM0NRRUpmeUFBS0FJRUlRVUNRQUpBQWtBQ1FBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnaHJJZ2RCSUU0RVFDQUZLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVESUFBb0FnZ2lBa1VOQVNBRElBSjBJQVV0QUFSQkNDQUNhM1p5SVFNTUFRc2dCMEVCU0FSQURBSUxJQVV0QUFBZ0FDZ0NDQ0lDUVJocUlnWjBJUU1nQWlBSGFrRUlheUlFUVFGSURRQWdCU0VDQTBBZ0FpMEFBU0FHUVFocklnWjBJQU55SVFNZ0JFRUlTaUVISUFKQkFXb2hBaUFFUVFocklRUWdCdzBBQ3dzZ0EwRi9UQVJBSUFBZ0NFRUJhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUFJUVFnQWlBSlN3MENJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JBd0NDeUFEUVlDQWdJQUVUd1JBSUFBZ0NFRURhaUlDTmdJUUlBQWdBa0VIY1RZQ0NFRUJJUVlnQWlBSlN3MEVJQUFnQUNnQ0FDQUNRUU4yYWpZQ0JDQURRUjEyUVFGeFFRRnFJUVFNQWdzZ0EwR0FnSUNBQWs4RVFDQUFJQWhCQldvaUFqWUNFQ0FBSUFKQkIzRTJBZ2hCQVNFR0lBSWdDVXNOQkNBQUlBQW9BZ0FnQWtFRGRtbzJBZ1FnQTBFYmRrRURjVUVEYWlFRURBSUxJQU5CZ0lDQWdBRkpEUUFnQUNBSVFRZHFJZ0kyQWhBZ0FDQUNRUWR4TmdJSVFRRWhCaUFDSUFsTERRTWdBQ0FBS0FJQUlBSkJBM1pxTmdJRUlBTkJHWFpCQjNGQkIyb2hCQXdCQzBHQWdJREFBQ0VFUVFRaENrRUFJUUlDUUNBRFFZQ0FnTUFBY1EwQUEwQUNRQ0FDSWdaQkFXb2hBaUFFUVFKSkRRQWdCRUVCZGlJRUlBTnhSUTBCQ3dzZ0JrRUZhaUlLUVNCSERRQWdBVUVBTmdJQUlBQWdBQ2dDRUNJS1FRZHhJZ00yQWdnZ0FDQUtRU0JxSWdJMkFoQWdBaUFBS0FJTVFRTjBJZ2ROQkVBZ0FDQUFLQUlBSUFKQkEzWnFJZ1UyQWdRTEFrQWdCeUFDYXlJR1FTQk9CRUFnQlNnQUFDSUNRUmgwSUFKQkNIUkJnSUQ4QjNGeUlBSkJDSFpCZ1A0RGNTQUNRUmgyY25JaEJDQURSUTBCSUFRZ0EzUWdCUzBBQkVFSUlBTnJkbkloQkF3QkN5QUdRUUZJQkVCQkFDRUVEQUVMSUFVdEFBQWdBMEVZY2lJQ2RDRUVJQU1nQm1wQkNHc2lBMEVCU0EwQUEwQWdCUzBBQVNBQ1FRaHJJZ0owSUFSeUlRUWdBMEVJU2lFR0lBVkJBV29oQlNBRFFRaHJJUU1nQmcwQUN3c2dBQ0FLUVNGcUlnTTJBaEFnQUNBRFFRZHhJZ1UyQWdoQkFTRUdJQU1nQjBzTkF5QUFJQUFvQWdBaUFpQURRUU4yYWpZQ0JDQUVRWDlLRFFNZ0FCQVdJUU1nQUNBRk5nSUlJQUFnQ2tIQkFHb2lCVFlDRUNBRklBZExEUU1nQUNBQ0lBVkJBM1pxTmdJRVFYOGhCQUpBSUFNT0FnTUFCQXRCQVNFRERBSUxJQUFnQWlBSWFrRUZhaUlJTmdJUUlBQWdDRUVIY1NJSE5nSUlJQWdnQ1UwRVFDQUFJQUFvQWdBZ0NFRURkbW9pQlRZQ0JBc0NRQ0FKSUFocklnTkJJRTRFUUNBRktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUVJQWRGRFFFZ0JDQUhkQ0FGTFFBRVFRZ2dCMnQyY2lFRURBRUxJQU5CQVVnRVFFRUFJUVFNQVFzZ0JTMEFBQ0FIUVJoeUlnWjBJUVFnQXlBSGFrRUlheUlEUVFGSURRQURRQ0FGTFFBQklBWkJDR3NpQm5RZ0JISWhCQ0FEUVFoS0lRY2dCVUVCYWlFRklBTkJDR3NoQXlBSERRQUxDeUFBSUFnZ0Ntb2lCVFlDRUNBQUlBVkJCM0UyQWdoQkFTRUdJQVVnQ1VzTkFpQUFJQUFvQWdBZ0JVRURkbW8yQWdRZ0JFRWNJQUpyZGlJQVFYOUdEUUlnQUVGL0lBcDBRWDl6YWlFRUMwRUFJUU1MSUFFZ0JEWUNBQ0FESVFZTElBWUw4Z0lDQW44QmZnSkFJQUpGRFFBZ0FDQUNhaUlEUVFGcklBRTZBQUFnQUNBQk9nQUFJQUpCQTBrTkFDQURRUUpySUFFNkFBQWdBQ0FCT2dBQklBTkJBMnNnQVRvQUFDQUFJQUU2QUFJZ0FrRUhTUTBBSUFOQkJHc2dBVG9BQUNBQUlBRTZBQU1nQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCQkdzZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FRaHJJQUUyQWdBZ0FrRU1heUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRVFheUFCTmdJQUlBSkJGR3NnQVRZQ0FDQUNRUmhySUFFMkFnQWdBa0VjYXlBQk5nSUFJQVFnQTBFRWNVRVljaUlFYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFVZ0F5QUVhaUVCQTBBZ0FTQUZOd01ZSUFFZ0JUY0RFQ0FCSUFVM0F3Z2dBU0FGTndNQUlBRkJJR29oQVNBQ1FTQnJJZ0pCSDBzTkFBc0xJQUFMekF3QkIzOENRQ0FBUlEwQUlBQkJDR3NpQXlBQVFRUnJLQUlBSWdGQmVIRWlBR29oQlFKQUlBRkJBWEVOQUNBQlFRTnhSUTBCSUFNZ0F5Z0NBQ0lCYXlJRFFaakFBQ2dDQUVrTkFTQUFJQUZxSVFBZ0EwR2N3QUFvQWdCSEJFQWdBVUgvQVUwRVFDQURLQUlJSWdJZ0FVRURkaUlFUVFOMFFiREFBR3BHR2lBQ0lBTW9BZ3dpQVVZRVFFR0l3QUJCaU1BQUtBSUFRWDRnQkhkeE5nSUFEQU1MSUFJZ0FUWUNEQ0FCSUFJMkFnZ01BZ3NnQXlnQ0dDRUdBa0FnQXlBREtBSU1JZ0ZIQkVBZ0F5Z0NDQ0lDSUFFMkFnd2dBU0FDTmdJSURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEFRd0JDd05BSUFJaEJ5QUVJZ0ZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUVDSUFFb0FoQWlCQTBBQ3lBSFFRQTJBZ0FMSUFaRkRRRUNRQ0FESUFNb0Fod2lBa0VDZEVHNHdnQnFJZ1FvQWdCR0JFQWdCQ0FCTmdJQUlBRU5BVUdNd0FCQmpNQUFLQUlBUVg0Z0FuZHhOZ0lBREFNTElBWkJFRUVVSUFZb0FoQWdBMFliYWlBQk5nSUFJQUZGRFFJTElBRWdCallDR0NBREtBSVFJZ0lFUUNBQklBSTJBaEFnQWlBQk5nSVlDeUFES0FJVUlnSkZEUUVnQVNBQ05nSVVJQUlnQVRZQ0dBd0JDeUFGS0FJRUlnRkJBM0ZCQTBjTkFFR1F3QUFnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQThMSUFNZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FDQUJRUUp4UlFSQUlBVkJvTUFBS0FJQVJnUkFRYURBQUNBRE5nSUFRWlRBQUVHVXdBQW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQTBHY3dBQW9BZ0JIRFFOQmtNQUFRUUEyQWdCQm5NQUFRUUEyQWdBUEN5QUZRWnpBQUNnQ0FFWUVRRUdjd0FBZ0F6WUNBRUdRd0FCQmtNQUFLQUlBSUFCcUlnQTJBZ0FnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUE4TElBRkJlSEVnQUdvaEFBSkFJQUZCL3dGTkJFQWdCU2dDQ0NJQ0lBRkJBM1lpQkVFRGRFR3d3QUJxUmhvZ0FpQUZLQUlNSWdGR0JFQkJpTUFBUVlqQUFDZ0NBRUYrSUFSM2NUWUNBQXdDQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMSUFVb0FoZ2hCZ0pBSUFVZ0JTZ0NEQ0lCUndSQUlBVW9BZ2dpQWtHWXdBQW9BZ0JKR2lBQ0lBRTJBZ3dnQVNBQ05nSUlEQUVMQWtBZ0JVRVVhaUlDS0FJQUlnUU5BQ0FGUVJCcUlnSW9BZ0FpQkEwQVFRQWhBUXdCQ3dOQUlBSWhCeUFFSWdGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlFQ0lBRW9BaEFpQkEwQUN5QUhRUUEyQWdBTElBWkZEUUFDUUNBRklBVW9BaHdpQWtFQ2RFRzR3Z0JxSWdRb0FnQkdCRUFnQkNBQk5nSUFJQUVOQVVHTXdBQkJqTUFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdJRVFDQUJJQUkyQWhBZ0FpQUJOZ0lZQ3lBRktBSVVJZ0pGRFFBZ0FTQUNOZ0lVSUFJZ0FUWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFaekFBQ2dDQUVjTkFVR1F3QUFnQURZQ0FBOExJQVVnQVVGK2NUWUNCQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBQ3lBQVFmOEJUUVJBSUFCQkEzWWlBVUVEZEVHd3dBQnFJUUFDZjBHSXdBQW9BZ0FpQWtFQklBRjBJZ0Z4UlFSQVFZakFBQ0FCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQWlBQUlBTTJBZ2dnQWlBRE5nSU1JQU1nQURZQ0RDQURJQUkyQWdnUEMwRWZJUUlnQTBJQU53SVFJQUJCLy8vL0IwMEVRQ0FBUVFoMklnRWdBVUdBL2o5cVFSQjJRUWh4SWdGMElnSWdBa0dBNEI5cVFSQjJRUVJ4SWdKMElnUWdCRUdBZ0E5cVFSQjJRUUp4SWdSMFFROTJJQUVnQW5JZ0JISnJJZ0ZCQVhRZ0FDQUJRUlZxZGtFQmNYSkJIR29oQWdzZ0F5QUNOZ0ljSUFKQkFuUkJ1TUlBYWlFQkFrQUNRQUpBUVl6QUFDZ0NBQ0lFUVFFZ0FuUWlCM0ZGQkVCQmpNQUFJQVFnQjNJMkFnQWdBU0FETmdJQUlBTWdBVFlDR0F3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFCS0FJQUlRRURRQ0FCSWdRb0FnUkJlSEVnQUVZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFRZ0FVRUVjV29pQjBFUWFpZ0NBQ0lCRFFBTElBY2dBellDRUNBRElBUTJBaGdMSUFNZ0F6WUNEQ0FESUFNMkFnZ01BUXNnQkNnQ0NDSUFJQU0yQWd3Z0JDQUROZ0lJSUFOQkFEWUNHQ0FESUFRMkFnd2dBeUFBTmdJSUMwR293QUJCcU1BQUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTDJBc0JGSDhnQVVHUVBXb3RBQUJCREd3aUIwSEVQR29vQWdBaEJTQUhRY0E4YWlnQ0FDQUJRWUE4YWkwQUFDSUdkQ0VFSUFKRkJFQWdBQ0FBS0FJQUlBUnNOZ0lBQ3lBRklBWjBJUUVDUUFKQUlBTkJuUDhEY1FSQVFRRWhBeUFBSUFBb0FqZ2dBV3dpQlNBQUtBSWtJQUZzSWcxcUlnd2dCMEhJUEdvb0FnQWdCblFpQWlBQUtBSThiQ0lHUVFGMUlBQW9BaWdnQW13aUNtb2lEMnNpQnpZQ1BDQUFJQTBnQldzaUJTQUtRUUYxSUFacklnMXJJZ1kyQWpnZ0FDZ0NOQ0VLSUFBZ0JTQU5haUlGTmdJMElBQWdBQ2dDTENBRWJDSUlJQUFvQWd3Z0JHd2lEbW9pRUNBQUtBSWdJQUZzSWdrZ0FTQUtiQ0lLUVFGMWFpSVNheUlOTmdJc0lBQWdEaUFJYXlJSUlBbEJBWFVnQ21zaURtc2lDallDS0NBQUlBZ2dEbW9pQ0RZQ0pDQUFJQUFvQWh3Z0FXd2lEaUFBS0FJSUlBRnNJZ2xxSWhRZ0FDZ0NFQ0FDYkNJTElBQW9BakFnQW13aUVVRUJkV29pRldzaUFqWUNIQ0FBS0FJWUlSTWdBQ0FKSUE1cklna2dDMEVCZFNBUmF5SUxheUlPTmdJWUlBQW9BaFFoRVNBQUlBa2dDMm9pQ1RZQ0ZDQUFJQVFnRVd3aUJDQUFLQUlBSWd0cUloRWdBQ2dDQkNBQmJDSVdJQUVnRTJ3aUUwRUJkV29pRjJzaUFUWUNEQ0FBSUFzZ0JHc2lDeUFXUVFGMUlCTnJJaE5ySWdRMkFnZ2dBQ0FMSUJOcUlnczJBZ1FnQUNBUUlCSnFJaEFnRVNBWGFpSVNha0VnYWlJUklCUWdGV29pRkNBTUlBOXFJZ3hCQVhWcUlnOXJRUVoxSWhVMkFqQWdBQ0FTSUJCclFTQnFJaEFnRkVFQmRTQU1heUlNYTBFR2RTSVNOZ0lnSUFBZ0RDQVFha0VHZFNJTU5nSVFJQUFnRHlBUmFrRUdkU0lQTmdJQUlBOUJnQVJxUWY4SFN3MENJQXhCZ0FScVFmOEhTdzBDSUJKQmdBUnFRZjhIU3cwQ0lCVkJnQVJxUWY4SFN3MENJQUFnQ0NBTGFrRWdhaUlNSUFWQkFYVWdDV29pRDJ0QkJuVWlFRFlDTkNBQUlBc2dDR3RCSUdvaUNDQUpRUUYxSUFWcklnVnJRUVoxSWdrMkFpUWdBQ0FGSUFocVFRWjFJZ1UyQWhRZ0FDQU1JQTlxUVFaMUlnZzJBZ1FnQ0VHQUJHcEIvd2RMRFFJZ0JVR0FCR3BCL3dkTERRSWdDVUdBQkdwQi93ZExEUUlnRUVHQUJHcEIvd2RMRFFJZ0FDQUVJQXBxUVNCcUlnVWdCa0VCZFNBT2FpSUlhMEVHZFNJSk5nSTRJQUFnQkNBS2EwRWdhaUlFSUE1QkFYVWdCbXNpQm10QkJuVWlDallDS0NBQUlBUWdCbXBCQm5VaUJEWUNHQ0FBSUFVZ0NHcEJCblVpQmpZQ0NDQUdRWUFFYWtIL0Iwc05BaUFFUVlBRWFrSC9CMHNOQWlBS1FZQUVha0gvQjBzTkFpQUpRWUFFYWtIL0Iwc05BaUFBSUFFZ0RXcEJJR29pQkNBSFFRRjFJQUpxSWdaclFRWjFJZ1UyQWp3Z0FDQUJJQTFyUVNCcUlnRWdBa0VCZFNBSGF5SUNhMEVHZFNJSE5nSXNJQUFnQVNBQ2FrRUdkU0lCTmdJY0lBQWdCQ0FHYWtFR2RTSUFOZ0lNSUFCQmdBUnFRZjhIU3cwQ0lBRkJnQVJxUWY4SFN3MENJQWRCZ0FScVFmOEhTdzBDSUFWQmdBUnFRZjhIVFEwQkRBSUxJQU5CNGdCeFJRUkFRUUVoQXlBQUtBSUFRU0JxUVFaMUlnRkJnQVJxUWY4SFN3MENJQUFnQVRZQ09DQUFJQUUyQWp3Z0FDQUJOZ0kwSUFBZ0FUWUNNQ0FBSUFFMkFpd2dBQ0FCTmdJb0lBQWdBVFlDSkNBQUlBRTJBaUFnQUNBQk5nSWNJQUFnQVRZQ0dDQUFJQUUyQWhRZ0FDQUJOZ0lRSUFBZ0FUWUNEQ0FBSUFFMkFnZ2dBQ0FCTmdJRUlBQWdBVFlDQUF3QkMwRUJJUU1nQUNBQUtBSUVJQUZzSWdVZ0FDZ0NHQ0FCYkNJTlFRRjFhaUlDSUFBb0FnQWlCeUFBS0FJVUlBUnNJZ1pxSWdScVFTQnFRUVoxSWdFMkFqQWdBQ0FFSUFKclFTQnFRUVoxSWdJMkFnd2dBQ0FGUVFGMUlBMXJJZ1VnQnlBR2EycEJJR3BCQm5VaUJEWUNCQ0FBSUFFMkFnQWdBQ0FCTmdJZ0lBQWdCRFlDTkNBQUlBRTJBaEFnQUNBRU5nSWtJQUFnQkRZQ0ZDQUFJQUkyQWp3Z0FDQUhJQVVnQm1wclFTQnFRUVoxSWdjMkFnZ2dBQ0FITmdJNElBQWdCellDS0NBQUlBYzJBaGdnQUNBQ05nSXNJQUFnQWpZQ0hDQUJRWUFFYWtIL0Iwc05BU0FFUVlBRWFrSC9CMHNOQVNBSFFZQUVha0gvQjBzTkFTQUNRWUFFYWtIL0Iwc05BUXRCQUNFREN5QURDL29hQVJGL0l3QkJnQUZySWcwa0FDQUFLQUlFSVFRQ2Z3SkFBbjhDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJTUloSkJBM1FpRUNBQUtBSVFJZ2xySWdWQklFNEVRQ0FFS0FBQUlnVkJHSFFnQlVFSWRFR0FnUHdIY1hJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lFR0lBQW9BZ2dpQlVVTkFTQUdJQVYwSUFRdEFBUkJDQ0FGYTNaeUlRWU1BUXNnQlVFQlNBMEJJQVF0QUFBZ0FDZ0NDQ0lLUVJocUlnZDBJUVlnQlNBS2FrRUlheUlGUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0JuSWhCaUFGUVFoS0lRb2dCRUVCYWlFRUlBVkJDR3NoQlNBS0RRQUxDeUFDUVFKUERRTWdCa0VBU0FSQVFRRWhDd3dPQ3lBR1FSbDJRZjRBY1VHQUNHb2dCa0dBZ0lEZ0FFOE5EQm9nQmtFVmRrSCtEM0ZCd0FocUlBWkJnSUNBQ0U4TkRCb2dCa0dBZ0lBQlNRUkFJQVpCRUhZaEJBd0NDeUFHUVJGMlFmNy9BWEZCa0FscURBd0xRUUFoQkNBQ1FRSlBEUUVMSUFSQkFYUkJrQXBxREFvTElBSkJCRThOQVF3SUN5QUNRUVJKRFFZZ0FrRUlUdzBDSUFaQi8vLy8vd0ZORFFFZ0JrRVpka0grQUhGQjBBMXFEQWdMSUFKQkNFOE5BZ3NnQmtFVmRrSCtEM0ZCMEE1cURBWUxJQUpCRVVrTkFTQUdRZi8vLy84QlRRMENJQVpCSEhaQkRuRkIwQkZxREFVTElBSkJFRXNOQVFzZ0JrRVpka0grQUhGQjBCQnFEQU1MSUFaQkYzWkIvZ054UWVBUmFnd0NDeUFHUVg5TUJFQkJBa0dpRUNBR1FZQ0FnSUFFY1JzaEN3d0RDeUFHUVJsMlFmNEFjVUhRQ21vZ0JrR0FnSUNBQVU4TkFSb2dCa0dBZ0lBUVNRMEFJQVpCRm5aQi9nZHhRWkFMYWd3QkN5QUdRUkYyUWY3L0FYRkIwQXRxQ3k4QkFDSUxEUUJCQVF3QkMwRUJJQU1nQzBFTGRpSU9TUTBBR2tFZ0lBdEJIM0VpQW1zaENFRUFJUVVDUUNBTFFZQVFTUTBBSUFZZ0MzUWhCQUpBSUF0QkJYWkJQM0VpRDBVRVFFRUFJUWNNQVFzQ1FDQUlJQTlQRFFBZ0FDQUNJQWxxSWdrMkFoQWdBQ0FKUVFkeElnSTJBZ2hCQVNBSklCQkxEUU1hSUFBZ0FDZ0NBQ0FKUVFOMmFpSUZOZ0lFUVNBaENDQVFJQWxySWdwQklFNEVRQ0FGS0FBQUlnUkJHSFFnQkVFSWRFR0FnUHdIY1hJZ0JFRUlka0dBL2dOeElBUkJHSFp5Y2lFRUlBSkZEUUVnQkNBQ2RDQUZMUUFFUVFnZ0FtdDJjaUVFREFFTElBcEJBVWdFUUVFQUlRUU1BUXNnQlMwQUFDQUNRUmh5SWdkMElRUWdBaUFLYWtFSWF5SUdRUUZJRFFBRFFDQUZMUUFCSUFkQkNHc2lCM1FnQkhJaEJDQUdRUWhLSVFJZ0JVRUJhaUVGSUFaQkNHc2hCaUFDRFFBTEMwRUJJQTlCQVd0MElRVWdCRUVnSUE5cmRpRUNRUUFoQndOQUlBMUJRR3NnQjBFQ2RHcEJmMEVCSUFJZ0JYRWJOZ0lBSUFkQkFXb2hCeUFGUVFGTElRb2dCVUVCZGlFRklBb05BQXNnQ0NBUGF5RUlJQVFnRDNRaEJBc2dCeUFPU1FSQUlBOUJBMGtpRkNBTFFmK3ZBVXR4SVFvRFFBSkFJQWhCRDBzTkFDQUFJQWtnQ0d0QklHb2lDVFlDRUNBQUlBbEJCM0VpQWpZQ0NFRUJJQkpCQTNRaUJDQUpTUTBFR2lBQUlBQW9BZ0FnQ1VFRGRtb2lCVFlDQkNBRUlBbHJJZ3hCSUU0RVFDQUZLQUFBSWdSQkdIUWdCRUVJZEVHQWdQd0hjWElnQkVFSWRrR0EvZ054SUFSQkdIWnljaUVFUVNBaENDQUNSUTBCSUFRZ0FuUWdCUzBBQkVFSUlBSnJkbkloQkF3QkMwRUJJQXhCQVVnTkJCb2dCUzBBQUNBQ1FSaHlJZ3QwSVFSQklDRUlJQUlnREdwQkNHc2lCa0VCU0EwQUEwQWdCUzBBQVNBTFFRaHJJZ3QwSUFSeUlRUWdCa0VJU2lFQ0lBVkJBV29oQlNBR1FRaHJJUVlnQWcwQUN3dEJBQ0VGQWtBQ1FBSi9Ba0FnQkVFQVNBMEFRUUVoQlNBRVFmLy8vLzhEU3cwQVFRSWhCU0FFUWYvLy8vOEJTdzBBUVFNaEJTQUVRZi8vLy84QVN3MEFRUVFoQlNBRVFmLy8vejlMRFFCQkJTRUZJQVJCLy8vL0gwc05BRUVHSVFVZ0JFSC8vLzhQU3cwQVFRY2hCU0FFUWYvLy93ZExEUUJCQ0NFRklBUkIvLy8vQTBzTkFFRUpJUVVnQkVILy8vOEJTdzBBUVFvaEJTQUVRZi8vL3dCTERRQkJDeUVGSUFSQi8vOC9TdzBBUVF3aEJTQUVRZi8vSDBzTkFFRU5JUVVnQkVILy93OUxEUUFDZndKQUlBUkIvLzhIVFFSQUlBUkJnSUI4Y1VHQWdBUkdEUUZCQVF3S0N5QUtRUVFnQ2hzaERDQUlRUTlySVFoQkRpRUZJQVJCRDNRTUFRc2dDa0VCSUFvYklRb2dDRUVRYXlFSVFRd2hERUVQSVFVZ0JFRVFkQXNoQkNBRklBcDBJUXNnQ2tVTUFRc2dCU0FLZENFTFFRRWhFeUFJSUFWQkFXb2lBbXNoQ0NBRUlBSjBJUVFnQ2tVTkFTQUtJUXhCQUFzaEV3SkFJQWdnREU4RVFDQUVJUVVNQVFzZ0FDQUpJQWhyUVNCcUlnazJBaEFnQUNBSlFRZHhJZ1kyQWdoQkFTQVNRUU4wSUFsSkRRWWFJQUFnQUNnQ0FDQUpRUU4yYWlJRU5nSUVJQkFnQ1dzaUVVRWdUZ1JBSUFRb0FBQWlBa0VZZENBQ1FRaDBRWUNBL0FkeGNpQUNRUWgyUVlEK0EzRWdBa0VZZG5KeUlRVkJJQ0VJSUFaRkRRRWdCU0FHZENBRUxRQUVRUWdnQm10MmNpRUZEQUVMUVNBaENDQVJRUUZJQkVCQkFDRUZEQUVMSUFRdEFBQWdCa0VZY2lJQ2RDRUZJQVlnRVdwQkNHc2lCa0VCU0EwQUEwQWdCQzBBQVNBQ1FRaHJJZ0owSUFWeUlRVWdCa0VJU2lFUklBUkJBV29oQkNBR1FRaHJJUVlnRVEwQUN3c2dDQ0FNYXlFSUlBVWdESFFoQkNBRlFTQWdER3QySUF0cUlRc01BUXRCQUNFS0N5QU5RVUJySUFkQkFuUnFRUUFnQzBFQ2FpQUxJQWNnRDBZYklBc2dGQnNpQlVFQ2FrRUJkaUlDYXlBQ0lBVkJBWEViTmdJQVFRRWdDaUFUR3lJRklBVkJCa2tnQWtFRElBVkJBV3QwU25GcUlRb2dCMEVCYWlJSElBNUhEUUFMQzBFQUlRY2dBeUFPU3dSQUlBaEJDRTBFUUNBSklBaHJJUUpCSUNFSUlBQWdBa0VnYWlJSk5nSVFJQUFnQ1VFSGNUWUNDRUVCSUFrZ0VFc05BeG9nQUNBQUtBSUFJQWxCQTNacU5nSUVJQUFRRmlFRUN3SkFBa0FDZndKQUlBTkJCRWNFUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUE1QkFXc09EZzRBQVFJREJBVUdCd2dKQ2dzTUVBc2dCRUVhZGtIZ0Vtb01EZ3NnQkVFYWRrR2dFMm9NRFFzZ0JFRWJka0hnRTJvTURBc2dCRUViZGtHQUZHb01Dd3NnQkVFYWRrR2dGR29NQ2dzZ0JFRWFka0hnRkdvTUNRc2dCRUVhZGtHZ0ZXb01DQXNnQkVFYWRrSGdGV29NQndzZ0JFRWJka0dnRm1vTUJnc2dCRUVjZGtIQUZtb01CUXNnQkVFY2RrSFFGbW9NQkFzZ0JFRWRka0hnRm1vTUF3c2dCRUVlZGtIb0Ztb01BZ3NnQkVFQVNBUkFRUUVoQlF3RUMwRVJJUVVnRGtFRFJnMERRUkloQlNBRVFmLy8vLzhEU3cwRFFTSWhCU0FPUVFKR0RRTkJNMEVqSUFSQmdJQ0FnQUpKR3lFRkRBTUxJQVJCRjNaQndCSnFJZ0lnQWlBRVFSdDJJZ0pCb0JKcUlBSkJBVVliSUFSQmdJQ0F3QUJKR3dzdEFBQWlCUTBCUVFFTUJBdEJBVUVSSUFSQmYwb2JJUVVMSUFWQkJIWWhCeUFJSUFWQkQzRWlBbXNoQ0NBRUlBSjBJUVFMSUE1QkFXc2lBd1JBSUJKQkEzUWhEMEVBSVFvRFFBSkFJQWNFUUFKQUlBaEJDa3NOQUNBQUlBa2dDR3RCSUdvaUNUWUNFQ0FBSUFsQkIzRWlBallDQ0VFQklBa2dEMHNOQmhvZ0FDQUFLQUlBSUFsQkEzWnFJZ1UyQWdRZ0VDQUpheUlNUVNCT0JFQWdCU2dBQUNJRVFSaDBJQVJCQ0hSQmdJRDhCM0Z5SUFSQkNIWkJnUDREY1NBRVFSaDJjbkloQkVFZ0lRZ2dBa1VOQVNBRUlBSjBJQVV0QUFSQkNDQUNhM1p5SVFRTUFRdEJJQ0VJSUF4QkFVZ0VRRUVBSVFRTUFRc2dCUzBBQUNBQ1FSaHlJZ3QwSVFRZ0FpQU1ha0VJYXlJR1FRRklEUUFEUUNBRkxRQUJJQXRCQ0dzaUMzUWdCSEloQkNBR1FRaEtJUUlnQlVFQmFpRUZJQVpCQ0dzaEJpQUNEUUFMQ3dKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBSFFRRnJEZ1lHQUFFQ0F3UUZDeUFFUVI1MlFlNFdhZ3dHQ3lBRVFSNTJRZklXYWd3RkN5QUVRUjEyUWZZV2Fnd0VDeUFFUVIxMlFmNFdhZ3dEQ3lBRVFSMTJRWVlYYWd3Q0N3Si9RZk1BSUFSQkdYWkI4QUJ4YXlBRVFZQ0FnSUFDVHcwQUdrSDBBQ0FFUWYvLy8vOEFTdzBBR2tHRkFTQUVRZi8vL3o5TERRQWFRWllCSUFSQi8vLy9IMHNOQUJwQnB3RWdCRUgvLy84UFN3MEFHa0c0QVNBRVFmLy8vd2RMRFFBYVFja0JJQVJCLy8vL0Ewc05BQnBCMmdFZ0JFSC8vLzhCU3cwQUdrRUFRZXNCSUFSQmdJQ0FBVWtiQ3lJRlFRUjJJQWRORFFKQkFRd0lDeUFFUVI5MlFld1dhZ3N0QUFBaEJRdEJBU0FGUlEwRkdpQU5JQXBCQW5ScUlBVkJCSFlpQWtFQmFqWUNBQ0FISUFKcklRY2dDQ0FGUVE5eElnSnJJUWdnQkNBQ2RDRUVEQUVMSUEwZ0NrRUNkR3BCQVRZQ0FFRUFJUWNMSUFwQkFXb2lDaUFEUncwQUN5QUJJQWRCQW5ScUlBMUJRR3NnQTBFQ2RHb29BZ0EyQWdBZ0RrRUNheUVDUVFFZ0IzUWhCU0FEUVFGeEJIOGdBU0FOSUFKQkFuUWlBMm9vQWdBZ0Iyb2lCMEVDZEdvZ0RVRkFheUFEYWlnQ0FEWUNBRUVCSUFkMElBVnlJUVVnRGtFRGF3VWdBZ3NoQkNBQ1JRMEJBMEFnQVNBTklBUkJBblFpQTJvb0FnQWdCMm9pQWtFQ2RHb2dEVUZBYXlJTUlBTnFLQUlBTmdJQUlBRWdEU0FFUVFGcklnTkJBblFpQ21vb0FnQWdBbW9pQjBFQ2RHb2dDaUFNYWlnQ0FEWUNBRUVCSUFKMElBVnlRUUVnQjNSeUlRVWdCRUVDYXlFRUlBTU5BQXNNQVFzZ0FTQUhRUUowYWlBTktBSkFOZ0lBUVFFZ0IzUWhCUXNnQUNBQUtBSVFJQWhyUVNCcUlnRTJBaEFnQUNBQlFRZHhOZ0lJUVFFZ0FTQUFLQUlNUVFOMFN3MEFHaUFBSUFBb0FnQWdBVUVEZG1vMkFnUWdCVUVRZENBT1FRUjBjZ3NoQkNBTlFZQUJhaVFBSUFRTGd3UUJBMzhnQWtHQUJFOEVRQ0FBSUFFZ0FoQUJHaUFBRHdzZ0FDQUNhaUVEQWtBZ0FDQUJjMEVEY1VVRVFBSkFJQUJCQTNGRkJFQWdBQ0VDREFFTElBSkJBVWdFUUNBQUlRSU1BUXNnQUNFQ0EwQWdBaUFCTFFBQU9nQUFJQUZCQVdvaEFTQUNRUUZxSWdKQkEzRkZEUUVnQWlBRFNRMEFDd3NDUUNBRFFYeHhJZ1JCd0FCSkRRQWdBaUFFUVVCcUlnVkxEUUFEUUNBQ0lBRW9BZ0EyQWdBZ0FpQUJLQUlFTmdJRUlBSWdBU2dDQ0RZQ0NDQUNJQUVvQWd3MkFnd2dBaUFCS0FJUU5nSVFJQUlnQVNnQ0ZEWUNGQ0FDSUFFb0FoZzJBaGdnQWlBQktBSWNOZ0ljSUFJZ0FTZ0NJRFlDSUNBQ0lBRW9BaVEyQWlRZ0FpQUJLQUlvTmdJb0lBSWdBU2dDTERZQ0xDQUNJQUVvQWpBMkFqQWdBaUFCS0FJME5nSTBJQUlnQVNnQ09EWUNPQ0FDSUFFb0FqdzJBandnQVVGQWF5RUJJQUpCUUdzaUFpQUZUUTBBQ3dzZ0FpQUVUdzBCQTBBZ0FpQUJLQUlBTmdJQUlBRkJCR29oQVNBQ1FRUnFJZ0lnQkVrTkFBc01BUXNnQTBFRVNRUkFJQUFoQWd3QkN5QUFJQU5CQkdzaUJFc0VRQ0FBSVFJTUFRc2dBQ0VDQTBBZ0FpQUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUZCQkdvaEFTQUNRUVJxSWdJZ0JFME5BQXNMSUFJZ0Ewa0VRQU5BSUFJZ0FTMEFBRG9BQUNBQlFRRnFJUUVnQWtFQmFpSUNJQU5IRFFBTEN5QUFDNEF2QVF0L0l3QkJFR3NpQ3lRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBUWZRQlRRUkFRWWpBQUNnQ0FDSUhRUkFnQUVFTGFrRjRjU0FBUVF0Skd5SUdRUU4ySWdKMklnRkJBM0VFUUNBQlFYOXpRUUZ4SUFKcUlnUkJBM1FpQVVHNHdBQnFLQUlBSWdOQkNHb2hBQUpBSUFNb0FnZ2lBaUFCUWJEQUFHb2lBVVlFUUVHSXdBQWdCMEYrSUFSM2NUWUNBQXdCQ3lBQ0lBRTJBZ3dnQVNBQ05nSUlDeUFESUFSQkEzUWlBVUVEY2pZQ0JDQUJJQU5xSWdFZ0FTZ0NCRUVCY2pZQ0JBd01DeUFHUVpEQUFDZ0NBQ0lLVFEwQklBRUVRQUpBUVFJZ0FuUWlBRUVBSUFCcmNpQUJJQUowY1NJQVFRQWdBR3R4UVFGcklnQWdBRUVNZGtFUWNTSUNkaUlCUVFWMlFRaHhJZ0FnQW5JZ0FTQUFkaUlCUVFKMlFRUnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQ2NTSUFjaUFCSUFCMklnRkJBWFpCQVhFaUFISWdBU0FBZG1vaUJFRURkQ0lBUWJqQUFHb29BZ0FpQXlnQ0NDSUJJQUJCc01BQWFpSUFSZ1JBUVlqQUFDQUhRWDRnQkhkeElnYzJBZ0FNQVFzZ0FTQUFOZ0lNSUFBZ0FUWUNDQXNnQTBFSWFpRUFJQU1nQmtFRGNqWUNCQ0FESUFacUlnSWdCRUVEZENJQklBWnJJZ1JCQVhJMkFnUWdBU0FEYWlBRU5nSUFJQW9FUUNBS1FRTjJJZ0ZCQTNSQnNNQUFhaUVGUVp6QUFDZ0NBQ0VEQW44Z0IwRUJJQUYwSWdGeFJRUkFRWWpBQUNBQklBZHlOZ0lBSUFVTUFRc2dCU2dDQ0FzaEFTQUZJQU0yQWdnZ0FTQUROZ0lNSUFNZ0JUWUNEQ0FESUFFMkFnZ0xRWnpBQUNBQ05nSUFRWkRBQUNBRU5nSUFEQXdMUVl6QUFDZ0NBQ0lKUlEwQklBbEJBQ0FKYTNGQkFXc2lBQ0FBUVF4MlFSQnhJZ0oySWdGQkJYWkJDSEVpQUNBQ2NpQUJJQUIySWdGQkFuWkJCSEVpQUhJZ0FTQUFkaUlCUVFGMlFRSnhJZ0J5SUFFZ0FIWWlBVUVCZGtFQmNTSUFjaUFCSUFCMmFrRUNkRUc0d2dCcUtBSUFJZ0VvQWdSQmVIRWdCbXNoQkNBQklRSURRQUpBSUFJb0FoQWlBRVVFUUNBQ0tBSVVJZ0JGRFFFTElBQW9BZ1JCZUhFZ0Jtc2lBaUFFSUFJZ0JFa2lBaHNoQkNBQUlBRWdBaHNoQVNBQUlRSU1BUXNMSUFFb0FoZ2hDQ0FCSUFFb0Fnd2lBMGNFUUNBQktBSUlJZ0JCbU1BQUtBSUFTUm9nQUNBRE5nSU1JQU1nQURZQ0NBd0xDeUFCUVJScUlnSW9BZ0FpQUVVRVFDQUJLQUlRSWdCRkRRTWdBVUVRYWlFQ0N3TkFJQUloQlNBQUlnTkJGR29pQWlnQ0FDSUFEUUFnQTBFUWFpRUNJQU1vQWhBaUFBMEFDeUFGUVFBMkFnQU1DZ3RCZnlFR0lBQkJ2MzlMRFFBZ0FFRUxhaUlBUVhoeElRWkJqTUFBS0FJQUlnbEZEUUJCQUNBR2F5RUVBa0FDUUFKQUFuOUJBQ0FHUVlBQ1NRMEFHa0VmSUFaQi8vLy9CMHNOQUJvZ0FFRUlkaUlBSUFCQmdQNC9ha0VRZGtFSWNTSUNkQ0lBSUFCQmdPQWZha0VRZGtFRWNTSUJkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBQklBSnlJQUJ5YXlJQVFRRjBJQVlnQUVFVmFuWkJBWEZ5UVJ4cUN5SUhRUUowUWJqQ0FHb29BZ0FpQWtVRVFFRUFJUUFNQVF0QkFDRUFJQVpCQUVFWklBZEJBWFpySUFkQkgwWWJkQ0VCQTBBQ1FDQUNLQUlFUVhoeElBWnJJZ1VnQkU4TkFDQUNJUU1nQlNJRURRQkJBQ0VFSUFJaEFBd0RDeUFBSUFJb0FoUWlCU0FGSUFJZ0FVRWRka0VFY1dvb0FoQWlBa1liSUFBZ0JSc2hBQ0FCUVFGMElRRWdBZzBBQ3dzZ0FDQURja1VFUUVFQUlRTkJBaUFIZENJQVFRQWdBR3R5SUFseElnQkZEUU1nQUVFQUlBQnJjVUVCYXlJQUlBQkJESFpCRUhFaUFuWWlBVUVGZGtFSWNTSUFJQUp5SUFFZ0FIWWlBVUVDZGtFRWNTSUFjaUFCSUFCMklnRkJBWFpCQW5FaUFISWdBU0FBZGlJQlFRRjJRUUZ4SWdCeUlBRWdBSFpxUVFKMFFiakNBR29vQWdBaEFBc2dBRVVOQVFzRFFDQUFLQUlFUVhoeElBWnJJZ0VnQkVraEFpQUJJQVFnQWhzaEJDQUFJQU1nQWhzaEF5QUFLQUlRSWdFRWZ5QUJCU0FBS0FJVUN5SUFEUUFMQ3lBRFJRMEFJQVJCa01BQUtBSUFJQVpyVHcwQUlBTW9BaGdoQnlBRElBTW9BZ3dpQVVjRVFDQURLQUlJSWdCQm1NQUFLQUlBU1JvZ0FDQUJOZ0lNSUFFZ0FEWUNDQXdKQ3lBRFFSUnFJZ0lvQWdBaUFFVUVRQ0FES0FJUUlnQkZEUU1nQTBFUWFpRUNDd05BSUFJaEJTQUFJZ0ZCRkdvaUFpZ0NBQ0lBRFFBZ0FVRVFhaUVDSUFFb0FoQWlBQTBBQ3lBRlFRQTJBZ0FNQ0FzZ0JrR1F3QUFvQWdBaUFrMEVRRUdjd0FBb0FnQWhCQUpBSUFJZ0Jtc2lBVUVRVHdSQVFaREFBQ0FCTmdJQVFaekFBQ0FFSUFacUlnQTJBZ0FnQUNBQlFRRnlOZ0lFSUFJZ0JHb2dBVFlDQUNBRUlBWkJBM0kyQWdRTUFRdEJuTUFBUVFBMkFnQkJrTUFBUVFBMkFnQWdCQ0FDUVFOeU5nSUVJQUlnQkdvaUFDQUFLQUlFUVFGeU5nSUVDeUFFUVFocUlRQU1DZ3NnQmtHVXdBQW9BZ0FpQ0VrRVFFR1V3QUFnQ0NBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBb0xRUUFoQUNBR1FTOXFJZ2tDZjBIZ3d3QW9BZ0FFUUVIb3d3QW9BZ0FNQVF0QjdNTUFRbjgzQWdCQjVNTUFRb0NnZ0lDQWdBUTNBZ0JCNE1NQUlBdEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmVERBRUVBTmdJQVFjVERBRUVBTmdJQVFZQWdDeUlCYWlJSFFRQWdBV3NpQlhFaUFpQUdUUTBKUWNEREFDZ0NBQ0lEQkVCQnVNTUFLQUlBSWdRZ0Ftb2lBU0FFVFEwS0lBRWdBMHNOQ2d0QnhNTUFMUUFBUVFSeERRUUNRQUpBUWFEQUFDZ0NBQ0lFQkVCQnlNTUFJUUFEUUNBRUlBQW9BZ0FpQVU4RVFDQUJJQUFvQWdScUlBUkxEUU1MSUFBb0FnZ2lBQTBBQ3d0QkFCQU9JZ0ZCZjBZTkJTQUNJUWRCNU1NQUtBSUFJZ1JCQVdzaUFDQUJjUVJBSUFJZ0FXc2dBQ0FCYWtFQUlBUnJjV29oQndzZ0JpQUhUdzBGSUFkQi92Ly8vd2RMRFFWQndNTUFLQUlBSWdNRVFFRzR3d0FvQWdBaUJDQUhhaUlBSUFSTkRRWWdBQ0FEU3cwR0N5QUhFQTRpQUNBQlJ3MEJEQWNMSUFjZ0NHc2dCWEVpQjBIKy8vLy9CMHNOQkNBSEVBNGlBU0FBS0FJQUlBQW9BZ1JxUmcwRElBRWhBQXNDUUNBQVFYOUdEUUFnQmtFd2FpQUhUUTBBUWVqREFDZ0NBQ0lCSUFrZ0IydHFRUUFnQVd0eElnRkIvdi8vL3dkTEJFQWdBQ0VCREFjTElBRVFEa0YvUndSQUlBRWdCMm9oQnlBQUlRRU1Cd3RCQUNBSGF4QU9HZ3dFQ3lBQUlnRkJmMGNOQlF3REMwRUFJUU1NQnd0QkFDRUJEQVVMSUFGQmYwY05BZ3RCeE1NQVFjVERBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVVHQXdBQW9BZ0FpQVNBQ1FRTnFRWHh4SWdKcUlRQUNRQUpBQW44Q1FDQUNSUTBBSUFBZ0FVc05BQ0FCREFFTElBQS9BRUVRZEUwTkFTQUFFQUFOQVVHQXdBQW9BZ0FMSVFCQmhNQUFRVEEyQWdCQmZ5RUJEQUVMUVlEQUFDQUFOZ0lBQ3lBQVB3QkJFSFJMQkVBZ0FCQUFSUTBDQzBHQXdBQWdBRFlDQUNBQlFYOUdEUUVnQUVGL1JnMEJJQUFnQVUwTkFTQUFJQUZySWdjZ0JrRW9hazBOQVF0QnVNTUFRYmpEQUNnQ0FDQUhhaUlBTmdJQVFiekRBQ2dDQUNBQVNRUkFRYnpEQUNBQU5nSUFDd0pBQWtBQ1FFR2d3QUFvQWdBaUJRUkFRY2pEQUNFQUEwQWdBU0FBS0FJQUlnUWdBQ2dDQkNJQ2FrWU5BaUFBS0FJSUlnQU5BQXNNQWd0Qm1NQUFLQUlBSWdCQkFDQUFJQUZORzBVRVFFR1l3QUFnQVRZQ0FBdEJBQ0VBUWN6REFDQUhOZ0lBUWNqREFDQUJOZ0lBUWFqQUFFRi9OZ0lBUWF6QUFFSGd3d0FvQWdBMkFnQkIxTU1BUVFBMkFnQURRQ0FBUVFOMElnUkJ1TUFBYWlBRVFiREFBR29pQWpZQ0FDQUVRYnpBQUdvZ0FqWUNBQ0FBUVFGcUlnQkJJRWNOQUF0QmxNQUFJQWRCS0dzaUJFRjRJQUZyUVFkeFFRQWdBVUVJYWtFSGNSc2lBR3NpQWpZQ0FFR2d3QUFnQUNBQmFpSUFOZ0lBSUFBZ0FrRUJjallDQkNBQklBUnFRU2cyQWdSQnBNQUFRZkREQUNnQ0FEWUNBQXdDQ3lBQUxRQU1RUWh4RFFBZ0JDQUZTdzBBSUFFZ0JVME5BQ0FBSUFJZ0IybzJBZ1JCb01BQUlBVkJlQ0FGYTBFSGNVRUFJQVZCQ0dwQkIzRWJJZ0JxSWdJMkFnQkJsTUFBUVpUQUFDZ0NBQ0FIYWlJQklBQnJJZ0EyQWdBZ0FpQUFRUUZ5TmdJRUlBRWdCV3BCS0RZQ0JFR2t3QUJCOE1NQUtBSUFOZ0lBREFFTFFaakFBQ2dDQUNBQlN3UkFRWmpBQUNBQk5nSUFDeUFCSUFkcUlRUkJ5TU1BSVFJQ1FBTkFJQVFnQWlnQ0FFY0VRRUhJd3dBaEFDQUNLQUlJSWdJTkFRd0NDd3RCeU1NQUlRQWdBaTBBREVFSWNRMEFJQUlnQVRZQ0FDQUNJQUlvQWdRZ0IybzJBZ1FnQVVGNElBRnJRUWR4UVFBZ0FVRUlha0VIY1J0cUlna2dCa0VEY2pZQ0JDQUVRWGdnQkd0QkIzRkJBQ0FFUVFocVFRZHhHMm9pQXlBR0lBbHFJZ2hySVFJQ1FDQURJQVZHQkVCQm9NQUFJQWcyQWdCQmxNQUFRWlRBQUNnQ0FDQUNhaUlBTmdJQUlBZ2dBRUVCY2pZQ0JBd0JDeUFEUVp6QUFDZ0NBRVlFUUVHY3dBQWdDRFlDQUVHUXdBQkJrTUFBS0FJQUlBSnFJZ0EyQWdBZ0NDQUFRUUZ5TmdJRUlBQWdDR29nQURZQ0FBd0JDeUFES0FJRUlnQkJBM0ZCQVVZRVFDQUFRWGh4SVFjQ1FDQUFRZjhCVFFSQUlBTW9BZ2dpQkNBQVFRTjJJZ0JCQTNSQnNNQUFha1lhSUFRZ0F5Z0NEQ0lCUmdSQVFZakFBRUdJd0FBb0FnQkJmaUFBZDNFMkFnQU1BZ3NnQkNBQk5nSU1JQUVnQkRZQ0NBd0JDeUFES0FJWUlRWUNRQ0FESUFNb0Fnd2lBVWNFUUNBREtBSUlJZ0FnQVRZQ0RDQUJJQUEyQWdnTUFRc0NRQ0FEUVJScUlnQW9BZ0FpQkEwQUlBTkJFR29pQUNnQ0FDSUVEUUJCQUNFQkRBRUxBMEFnQUNFRklBUWlBVUVVYWlJQUtBSUFJZ1FOQUNBQlFSQnFJUUFnQVNnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQmtVTkFBSkFJQU1nQXlnQ0hDSUVRUUowUWJqQ0FHb2lBQ2dDQUVZRVFDQUFJQUUyQWdBZ0FRMEJRWXpBQUVHTXdBQW9BZ0JCZmlBRWQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFFMkFnQWdBVVVOQVFzZ0FTQUdOZ0lZSUFNb0FoQWlBQVJBSUFFZ0FEWUNFQ0FBSUFFMkFoZ0xJQU1vQWhRaUFFVU5BQ0FCSUFBMkFoUWdBQ0FCTmdJWUN5QURJQWRxSVFNZ0FpQUhhaUVDQ3lBRElBTW9BZ1JCZm5FMkFnUWdDQ0FDUVFGeU5nSUVJQUlnQ0dvZ0FqWUNBQ0FDUWY4QlRRUkFJQUpCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFnMkFnZ2dBQ0FJTmdJTUlBZ2dBallDRENBSUlBQTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdSMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQkhJZ0FISnJJZ0JCQVhRZ0FpQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0NDQUFOZ0ljSUFoQ0FEY0NFQ0FBUVFKMFFiakNBR29oQXdKQUFrQkJqTUFBS0FJQUlnUkJBU0FBZENJQmNVVUVRRUdNd0FBZ0FTQUVjallDQUNBRElBZzJBZ0FnQ0NBRE5nSVlEQUVMSUFKQkFFRVpJQUJCQVhacklBQkJIMFliZENFQUlBTW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhBU0FBUVFGMElRQWdCQ0FCUVFSeGFpSURLQUlRSWdFTkFBc2dBeUFJTmdJUUlBZ2dCRFlDR0FzZ0NDQUlOZ0lNSUFnZ0NEWUNDQXdCQ3lBRUtBSUlJZ0FnQ0RZQ0RDQUVJQWcyQWdnZ0NFRUFOZ0lZSUFnZ0JEWUNEQ0FJSUFBMkFnZ0xJQWxCQ0dvaEFBd0ZDd05BQWtBZ0JTQUFLQUlBSWdKUEJFQWdBaUFBS0FJRWFpSURJQVZMRFFFTElBQW9BZ2doQUF3QkN3dEJsTUFBSUFkQktHc2lCRUY0SUFGclFRZHhRUUFnQVVFSWFrRUhjUnNpQUdzaUFqWUNBRUdnd0FBZ0FDQUJhaUlBTmdJQUlBQWdBa0VCY2pZQ0JDQUJJQVJxUVNnMkFnUkJwTUFBUWZEREFDZ0NBRFlDQUNBRklBTkJKeUFEYTBFSGNVRUFJQU5CSjJ0QkIzRWJha0V2YXlJQUlBQWdCVUVRYWtrYklnSkJHellDQkNBQ1FkRERBQ2tDQURjQ0VDQUNRY2pEQUNrQ0FEY0NDRUhRd3dBZ0FrRUlhallDQUVITXd3QWdCellDQUVISXd3QWdBVFlDQUVIVXd3QkJBRFlDQUNBQ1FSaHFJUUFEUUNBQVFRYzJBZ1FnQUVFSWFpRUJJQUJCQkdvaEFDQUJJQU5KRFFBTElBSWdCVVlOQUNBQ0lBSW9BZ1JCZm5FMkFnUWdCU0FDSUFWcklnTkJBWEkyQWdRZ0FpQUROZ0lBSUFOQi93Rk5CRUFnQTBFRGRpSUFRUU4wUWJEQUFHb2hBZ0ovUVlqQUFDZ0NBQ0lCUVFFZ0FIUWlBSEZGQkVCQmlNQUFJQUFnQVhJMkFnQWdBZ3dCQ3lBQ0tBSUlDeUVBSUFJZ0JUWUNDQ0FBSUFVMkFnd2dCU0FDTmdJTUlBVWdBRFlDQ0F3QkMwRWZJUUFnQlVJQU53SVFJQU5CLy8vL0IwMEVRQ0FEUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0F5QUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFCQkFuUkJ1TUlBYWlFRUFrQUNRRUdNd0FBb0FnQWlBa0VCSUFCMElnRnhSUVJBUVl6QUFDQUJJQUp5TmdJQUlBUWdCVFlDQUNBRklBUTJBaGdNQVFzZ0EwRUFRUmtnQUVFQmRtc2dBRUVmUmh0MElRQWdCQ2dDQUNFQkEwQWdBU0lDS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVCSUFCQkFYUWhBQ0FDSUFGQkJIRnFJZ1FvQWhBaUFRMEFDeUFFSUFVMkFoQWdCU0FDTmdJWUN5QUZJQVUyQWd3Z0JTQUZOZ0lJREFFTElBSW9BZ2dpQUNBRk5nSU1JQUlnQlRZQ0NDQUZRUUEyQWhnZ0JTQUNOZ0lNSUFVZ0FEWUNDQXRCbE1BQUtBSUFJZ0FnQmswTkFFR1V3QUFnQUNBR2F5SUJOZ0lBUWFEQUFFR2d3QUFvQWdBaUFpQUdhaUlBTmdJQUlBQWdBVUVCY2pZQ0JDQUNJQVpCQTNJMkFnUWdBa0VJYWlFQURBTUxRUUFoQUVHRXdBQkJNRFlDQUF3Q0N3SkFJQWRGRFFBQ1FDQURLQUljSWdKQkFuUkJ1TUlBYWlJQUtBSUFJQU5HQkVBZ0FDQUJOZ0lBSUFFTkFVR013QUFnQ1VGK0lBSjNjU0lKTmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQTBZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQnpZQ0dDQURLQUlRSWdBRVFDQUJJQUEyQWhBZ0FDQUJOZ0lZQ3lBREtBSVVJZ0JGRFFBZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNDUUNBRVFROU5CRUFnQXlBRUlBWnFJZ0JCQTNJMkFnUWdBQ0FEYWlJQUlBQW9BZ1JCQVhJMkFnUU1BUXNnQXlBR1FRTnlOZ0lFSUFNZ0Jtb2lCU0FFUVFGeU5nSUVJQVFnQldvZ0JEWUNBQ0FFUWY4QlRRUkFJQVJCQTNZaUFFRURkRUd3d0FCcUlRSUNmMEdJd0FBb0FnQWlBVUVCSUFCMElnQnhSUVJBUVlqQUFDQUFJQUZ5TmdJQUlBSU1BUXNnQWlnQ0NBc2hBQ0FDSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBallDRENBRklBQTJBZ2dNQVF0Qkh5RUFJQVJCLy8vL0IwMEVRQ0FFUVFoMklnQWdBRUdBL2o5cVFSQjJRUWh4SWdKMElnQWdBRUdBNEI5cVFSQjJRUVJ4SWdGMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQUVnQW5JZ0FISnJJZ0JCQVhRZ0JDQUFRUlZxZGtFQmNYSkJIR29oQUFzZ0JTQUFOZ0ljSUFWQ0FEY0NFQ0FBUVFKMFFiakNBR29oQVFKQUFrQWdDVUVCSUFCMElnSnhSUVJBUVl6QUFDQUNJQWx5TmdJQUlBRWdCVFlDQUF3QkN5QUVRUUJCR1NBQVFRRjJheUFBUVI5R0czUWhBQ0FCS0FJQUlRWURRQ0FHSWdFb0FnUkJlSEVnQkVZTkFpQUFRUjEySVFJZ0FFRUJkQ0VBSUFFZ0FrRUVjV29pQWlnQ0VDSUdEUUFMSUFJZ0JUWUNFQXNnQlNBQk5nSVlJQVVnQlRZQ0RDQUZJQVUyQWdnTUFRc2dBU2dDQ0NJQUlBVTJBZ3dnQVNBRk5nSUlJQVZCQURZQ0dDQUZJQUUyQWd3Z0JTQUFOZ0lJQ3lBRFFRaHFJUUFNQVFzQ1FDQUlSUTBBQWtBZ0FTZ0NIQ0lDUVFKMFFiakNBR29pQUNnQ0FDQUJSZ1JBSUFBZ0F6WUNBQ0FERFFGQmpNQUFJQWxCZmlBQ2QzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUJSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUlOZ0lZSUFFb0FoQWlBQVJBSUFNZ0FEWUNFQ0FBSUFNMkFoZ0xJQUVvQWhRaUFFVU5BQ0FESUFBMkFoUWdBQ0FETmdJWUN3SkFJQVJCRDAwRVFDQUJJQVFnQm1vaUFFRURjallDQkNBQUlBRnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUJJQVpCQTNJMkFnUWdBU0FHYWlJQ0lBUkJBWEkyQWdRZ0FpQUVhaUFFTmdJQUlBb0VRQ0FLUVFOMklnQkJBM1JCc01BQWFpRUZRWnpBQUNnQ0FDRURBbjlCQVNBQWRDSUFJQWR4UlFSQVFZakFBQ0FBSUFkeU5nSUFJQVVNQVFzZ0JTZ0NDQXNoQUNBRklBTTJBZ2dnQUNBRE5nSU1JQU1nQlRZQ0RDQURJQUEyQWdnTFFaekFBQ0FDTmdJQVFaREFBQ0FFTmdJQUN5QUJRUWhxSVFBTElBdEJFR29rQUNBQUMrNFdBUkIvSUFBZ0JFRUFJQVpySUFJZ0FpQUdha0VBU0JzaUFpQUNJQVJLR3lJT1FRQWdEa0VBU2hzaUZHb2dCVUVBSUFkcklBTWdBeUFIYWtFQVNCc2lBQ0FBSUFWS0d5SURJQVJzUVFBZ0EwRUFTaHRxSVFrZ0IwRUFJQU5ySUFOQkgzVnhJZ29nQXlBSGFpSVZJQVZySWhKQkFDQUZJQlZJR3lJWGFtc2hEeUFHUVFBZ0Rtc2dEa0VmZFhFaUN5QUdJQTVxSWhNZ0JHdEJBQ0FFSUJOSUlnQWJJZzFxYXlFTUFrQWdEa0VBU0NBQWNpSVlSUVJBQWtBZ0NrVU5BQ0FLUVFOeElnSUVRQU5BSUFwQkFXc2hDaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QURRWDl6SUFOQkFDQURRUUJLRzJwQkEwa05BQU5BSUFFZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvZ0NTQU1FQWNnQ0dvaEFTQUtRUVJySWdvTkFBc0xJQTlGRFFFZ0QwRURjU0lDQkVBRFFDQVBRUUZySVE4Z0FTQUpJQXdRQnlBSWFpRUJJQVFnQ1dvaENTQUNRUUZySWdJTkFBc0xJQVVnQjJvZ0Eyb2dCU0FWSUFVZ0ZVb2JRWDl6YWlBRFFRQWdBMEVBU2h0clFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBUWdDV29pQUNBTUVBY2dDR29nQUNBRWFpSUFJQXdRQnlBSWFpQUFJQVJxSWdBZ0RCQUhJQWhxSVFFZ0FDQUVhaUVKSUE5QkJHc2lEdzBBQ3d3QkN3SkFJQXBGRFFBQ1FDQU1SUVJBSUFsQkFXc2hBaUFMUlFSQUlBMUZEUUlnQTBGL2N5QURRUUFnQTBFQVNodHFJUUFnQ2tFRGNTSURCRUFEUUNBS1FRRnJJUW9nQVNBQ0xRQUFJQTBRQXlBSWFpRUJJQU5CQVdzaUF3MEFDd3NnQUVFRFNRMERJQXBCQkdzaUFFRUVjVVVFUUNBQUlRb2dBU0FDTFFBQUlBMFFBeUFJYWlBQ0xRQUFJQTBRQXlBSWFpQUNMUUFBSUEwUUF5QUlhaUFDTFFBQUlBMFFBeUFJYWlFQkN5QUFRUVJKRFFNRFFDQUJJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlBSXRBQUFnRFJBRElBaHFJQUl0QUFBZ0RSQURJQWhxSUFJdEFBQWdEUkFESUFocUlRRWdDa0VJYXlJS0RRQUxEQU1MSUFOQmYzTWdBMEVBSUFOQkFFb2JhaUVBSUFwQkEzRWhBeUFOQkVBZ0F3UkFBMEFnQVNBSkxRQUFJQXNRQXlJQklBdHFJQUl0QUFBZ0RSQURHaUFLUVFGcklRb2dBU0FJYWlFQklBTkJBV3NpQXcwQUN3c2dBRUVEU1EwREEwQWdBU0FKTFFBQUlBc1FBeUlBSUF0cUlBSXRBQUFnRFJBREdpQUFJQWhxSUFrdEFBQWdDeEFESWdBZ0Myb2dBaTBBQUNBTkVBTWFJQUFnQ0dvZ0NTMEFBQ0FMRUFNaUFDQUxhaUFDTFFBQUlBMFFBeG9nQUNBSWFpQUpMUUFBSUFzUUF5SUFJQXRxSUFJdEFBQWdEUkFER2lBQUlBaHFJUUVnQ2tFRWF5SUtEUUFMREFNTElBTUVRQU5BSUFwQkFXc2hDaUFCSUFrdEFBQWdDeEFESUFocUlRRWdBMEVCYXlJRERRQUxDeUFBUVFOSkRRSWdDa0VFYXlJQVFRUnhSUVJBSUFBaENpQUJJQWt0QUFBZ0N4QURJQWhxSUFrdEFBQWdDeEFESUFocUlBa3RBQUFnQ3hBRElBaHFJQWt0QUFBZ0N4QURJQWhxSVFFTElBQkJCRWtOQWdOQUlBRWdDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvZ0NTMEFBQ0FMRUFNZ0NHb2dDUzBBQUNBTEVBTWdDR29nQ1MwQUFDQUxFQU1nQ0dvaEFTQUtRUWhySWdvTkFBc01BZ3NnQkNBR2FpQU9haUFFSUJNZ0JDQVRTaHRCZjNOcUlRQWdDMFVFUUNBTVFRZHhJUkFnQUNBVWF5RUFJQTFGQkVBZ0FFRUhTU0VSQTBBZ0RDRUhJQUVoQWlBSklRTWdFQ0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBUlJRUkFBMEFnQWlBRExRQUFPZ0FBSUFJZ0F5MEFBVG9BQVNBQ0lBTXRBQUk2QUFJZ0FpQURMUUFET2dBRElBSWdBeTBBQkRvQUJDQUNJQU10QUFVNkFBVWdBaUFETFFBR09nQUdJQUlnQXkwQUJ6b0FCeUFDUVFocUlRSWdBMEVJYWlFRElBZEJDR3NpQncwQUN3c2dBU0FJYWlFQklBcEJBV3NpQ2cwQUN3d0RDeUFBUVFkSklSWURRQ0FNSVFjZ0FTRUNJQWtoQUNBUUlSRWdFQVJBQTBBZ0FpQUFJZ010QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUUFnRVVFQmF5SVJEUUFMQ3lBV1JRUkFBMEFnQWlBQUlnTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFETFFBRU9nQUVJQUlnQXkwQUJUb0FCU0FDSUFNdEFBWTZBQVlnQWlBRExRQUhPZ0FISUFKQkNHb2hBaUFEUVFocUlRQWdCMEVJYXlJSERRQUxJQU5CQjJvaEF3c2dBaUFETFFBQUlBMFFBeG9nQVNBSWFpRUJJQXBCQVdzaUNnMEFDd3dDQ3lBTkJFQWdERUVIY1NFUUlBQWdEa0VBSUE1QkFFb2JhMEVIU1NFUkEwQWdBU0FKTFFBQUlBc1FBeUlXSUF0cUlRSWdEQ0VISUFraEFDQVFJZ0VFUUFOQUlBSWdBQ0lETFFBQU9nQUFJQWRCQVdzaEJ5QUNRUUZxSVFJZ0EwRUJhaUVBSUFGQkFXc2lBUTBBQ3dzZ0VVVUVRQU5BSUFJZ0FDSUJMUUFBT2dBQUlBSWdBUzBBQVRvQUFTQUNJQUV0QUFJNkFBSWdBaUFCTFFBRE9nQURJQUlnQVMwQUJEb0FCQ0FDSUFFdEFBVTZBQVVnQWlBQkxRQUdPZ0FHSUFJZ0FTMEFCem9BQnlBQ1FRaHFJUUlnQVVFSWFpRUFJQWRCQ0dzaUJ3MEFDeUFCUVFkcUlRTUxJQUlnQXkwQUFDQU5FQU1hSUFnZ0Ztb2hBU0FLUVFGcklnb05BQXNNQWdzZ0RFRUhjU0VRSUFBZ0ZHdEJCMGtoRVFOQUlBRWdDUzBBQUNBTEVBTWlBU0FMYWlFQ0lBd2hCeUFKSVFNZ0VDSUFCRUFEUUNBQ0lBTXRBQUE2QUFBZ0IwRUJheUVISUFKQkFXb2hBaUFEUVFGcUlRTWdBRUVCYXlJQURRQUxDeUFSUlFSQUEwQWdBaUFETFFBQU9nQUFJQUlnQXkwQUFUb0FBU0FDSUFNdEFBSTZBQUlnQWlBRExRQURPZ0FESUFJZ0F5MEFCRG9BQkNBQ0lBTXRBQVU2QUFVZ0FpQURMUUFHT2dBR0lBSWdBeTBBQnpvQUJ5QUNRUWhxSVFJZ0EwRUlhaUVESUFkQkNHc2lCdzBBQ3dzZ0FTQUlhaUVCSUFwQkFXc2lDZzBBQ3d3QkN5QUJJQWdnQ214cUlRRUxJQTlGRFFBZ0RFRUhjU0VLSUFRZ0Jtb2dEbW9nQkNBVElBUWdFMG9iUVg5emFpQVVhMEVIU1NFUUEwQWdBU0VDSUFzRVFDQUJJQWt0QUFBZ0N4QURJQXRxSVFJTEFrQWdERVVFUUNBSklRTU1BUXNnRENFSElBa2hBeUFLSWdBRVFBTkFJQUlnQXkwQUFEb0FBQ0FIUVFGcklRY2dBa0VCYWlFQ0lBTkJBV29oQXlBQVFRRnJJZ0FOQUFzTElCQU5BQU5BSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU10QUFRNkFBUWdBaUFETFFBRk9nQUZJQUlnQXkwQUJqb0FCaUFDSUFNdEFBYzZBQWNnQWtFSWFpRUNJQU5CQ0dvaEF5QUhRUWhySWdjTkFBc0xJQTBFUUNBQ0lBTkJBV3N0QUFBZ0RSQURHZ3NnQVNBSWFpRUJJQVFnQ1dvaENTQVBRUUZySWc4TkFBc0xBa0FnRjBVTkFDQUpJQVJySVFrZ0dFVUVRQ0FTUVFOeElnSUVRQU5BSUJKQkFXc2hFaUFCSUFrZ0RCQUhJQWhxSVFFZ0FrRUJheUlDRFFBTEN5QVZJQVZCZjNOcVFRTkpEUUVEUUNBQklBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlBa2dEQkFISUFocUlRRWdFa0VFYXlJU0RRQUxEQUVMSUF4QkIzRWhCU0FFSUFacUlBNXFJQVFnRXlBRUlCTktHMEYvYzJvZ0ZHdEJCMGtoQkFOQUlBRWhBaUFMQkVBZ0FTQUpMUUFBSUFzUUF5QUxhaUVDQ3dKQUlBeEZCRUFnQ1NFRERBRUxJQXdoQnlBSklRTWdCU0lBQkVBRFFDQUNJQU10QUFBNkFBQWdCMEVCYXlFSElBSkJBV29oQWlBRFFRRnFJUU1nQUVFQmF5SUFEUUFMQ3lBRURRQURRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURMUUFFT2dBRUlBSWdBeTBBQlRvQUJTQUNJQU10QUFZNkFBWWdBaUFETFFBSE9nQUhJQUpCQ0dvaEFpQURRUWhxSVFNZ0IwRUlheUlIRFFBTEN5QU5CRUFnQWlBRFFRRnJMUUFBSUEwUUF4b0xJQUVnQ0dvaEFTQVNRUUZySWhJTkFBc0xDOEFDQVFOL1Fjei9zd1lnQVhaQkFYRWhCQ0FCUVFOMElnTkI1Q3hxTFFBQUlRVWdBMEdrSzJvdEFBQWhBd0pBUWZyMXF3VWdBWFpCQVhFRVFDQUNJQU5CQVhScUxnRUFJUUVnQkFSQUlBRWdBaUFGUVFGMGFpNEJBR3BCQVdwQkFYVVBDeUFBS0FMTUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQlVFQmRHb3VBUnhxUVFGcVFRRjFEd3NnQkFSQUlBSWdCVUVCZEdvdUFRQWhBU0FBS0FMSUFTSUNSUTBCSUFBb0FnUWdBaWdDQkVjTkFTQUJJQUlnQTBFQmRHb3VBUnhxUVFGcVFRRjFEd3RCQUNFQlFRRWhBZ0pBSUFBb0FzZ0JJZ1JGRFFBZ0FDZ0NCQ0FFS0FJRVJ3MEFJQVFnQTBFQmRHb3VBUndoQVVFQUlRSUxJQUFvQXN3QklnTkZEUUFnQUNnQ0JDQURLQUlFUncwQUlBTWdCVUVCZEdvdUFSd2hBQ0FDQkVBZ0FBOExJQUFnQVdwQkFXcEJBWFVoQVFzZ0FRdnlBd0VEZnlBQktBSUFJZ05CLy8vL0IwY0VRQ0FCS0FJRUlRUWdBQ0FDSUFKQkEzRWdBa0VRU1NJQ0cwRUNkQ0lGUWZBcGFpZ0NBRUVRUVFnZ0Foc2lBbXhxSUFWQnNDbHFLQUlBYWlJQUlBTWdBQzBBQUdwQndEVnFMUUFBT2dBQUlBRW9BZ2doQXlBQUlBUWdBQzBBQVdwQndEVnFMUUFBT2dBQklBRW9BZ3doQkNBQUlBTWdBQzBBQW1wQndEVnFMUUFBT2dBQ0lBQWdCQ0FBTFFBRGFrSEFOV290QUFBNkFBTWdBU2dDRkNFRElBQWdBbW9pQUNBQktBSVFJQUF0QUFCcVFjQTFhaTBBQURvQUFDQUJLQUlZSVFRZ0FDQURJQUF0QUFGcVFjQTFhaTBBQURvQUFTQUJLQUljSVFNZ0FDQUVJQUF0QUFKcVFjQTFhaTBBQURvQUFpQUFJQU1nQUMwQUEycEJ3RFZxTFFBQU9nQURJQUVvQWlRaEF5QUFJQUpxSWdBZ0FTZ0NJQ0FBTFFBQWFrSEFOV290QUFBNkFBQWdBU2dDS0NFRUlBQWdBeUFBTFFBQmFrSEFOV290QUFBNkFBRWdBU2dDTENFRElBQWdCQ0FBTFFBQ2FrSEFOV290QUFBNkFBSWdBQ0FESUFBdEFBTnFRY0ExYWkwQUFEb0FBeUFCS0FJMElRTWdBQ0FDYWlJQUlBRW9BakFnQUMwQUFHcEJ3RFZxTFFBQU9nQUFJQUVvQWpnaEFpQUFJQU1nQUMwQUFXcEJ3RFZxTFFBQU9nQUJJQUVvQWp3aEFTQUFJQUlnQUMwQUFtcEJ3RFZxTFFBQU9nQUNJQUFnQVNBQUxRQURha0hBTldvdEFBQTZBQU1MQzVja0FSUi9Jd0JCZ0E1ckloVWtBQ0FESUFWcUloa2dBUzRCQUNJT1FRSjFhaUVESUFRZ0Jtb2lHeUFCTGdFQ0lndEJBblZxSVFrZ0FpZ0NDRUVFZENFTUlBSW9BZ1JCQkhRaERTQUFJQVpCQkhScUlBVnFJUVFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQTVCQTNGQkJIUWdDMEVEY1VFQ2RISkJ3RHRxS0FJQURnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEN5QUNLQUlBSUFRZ0F5QUpJQTBnRENBSElBaEJFQkFKREE4TElBSW9BZ0FnQkNBRElBbEJBbXNnRFNBTUlBY2dDRUVBRUJvTURnc2dDVUVDYXlFS1FRQWhEaUFDS0FJQUlRc0NRQUpBSUFOQkFFZ05BQ0FESUFkcUlBMUxEUUFnQ1VFQ1NBMEFJQWdnQ21wQkJXb2dERXNOQUNBS0lRNE1BUXNnQ3lBVklBTWdDaUFOSUF3Z0J5QUlRUVZxSUFjUUNTQVZJUXNnQnlFTlFRQWhBd3NnQ3lBTklBNXNJQU5xYWlBTmFpSUpJQTFCQld4cUlRTWdDRUVDZGlFUlFjQUFJQWRySVJRZ0RVRUJkQ0VNSUExQkFuUWdCMnNoRDBFQUlBMXJJaEJCQVhRaEdBTkFJQWNoRXdOQUlBUWdDU0FNYWkwQUFDSU9JQU1nREdvdEFBQWdBeUFOYWkwQUFDSVdJQU1nR0dvdEFBQWlDMm9pQ21zZ0NrRUNkR3RxSUFNdEFBQWlFaUFESUJCcUxRQUFJZ3BxUVJSc2FrRVFha0VGZFVIQU5Xb3RBQUE2QURBZ0JDQUpJQTFxTFFBQUloY2dGaUFLSUF0cUlocEJCSFJxSUE0Z0Vtb2lGbXRxSUJvZ0ZtdEJBblJxUVJCcVFRVjFRY0ExYWkwQUFEb0FJQ0FFSUFrdEFBQWlGaUFTSUFzZ0Rtb2lHa0VFZEdvZ0NpQVhhaUlTYTJvZ0dpQVNhMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFPZ0FRSUFRZ0NTQVFhaTBBQUNBS0lBNGdGMm9pRGtFRWRHb2dDeUFXYWlJTGEyb2dEaUFMYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQUlBbEJBV29oQ1NBRVFRRnFJUVFnQTBFQmFpRURJQk5CQVdzaUV3MEFDeUFFSUJScUlRUWdBeUFQYWlFRElBa2dEMm9oQ1NBUlFRRnJJaEVOQUFzTURRc2dBaWdDQUNBRUlBTWdDVUVDYXlBTklBd2dCeUFJUVFFUUdnd01DeUFDS0FJQUlBUWdBMEVDYXlBSklBMGdEQ0FISUFoQkFCQVpEQXNMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVBRUJJTUNnc2dBaWdDQUNBRUlBTkJBbXNnQ1VFQ2F5QU5JQXdnQnlBSVFRQVFGd3dKQ3lBQ0tBSUFJQVFnQTBFQ2F5QUpRUUpySUEwZ0RDQUhJQWhCQWhBU0RBZ0xJQWRCQldvaEN5QURRUUpySVFvZ0FpZ0NBQ0VPQWtBQ1FDQURRUUpJRFFBZ0NpQUxhaUFOU3cwQUlBbEJBRWdOQUNBSUlBbHFJQXhMRFFBZ0RTRUxEQUVMSUE0Z0ZTQUtJQWtnRFNBTUlBc2dDQ0FMRUFsQkFDRUpJQlVoRGtFQUlRb0xRUkFnQjJzaEZDQUxJQWRySVJnZ0IwRUNkaUVTSUE0Z0NTQUxiQ0FLYW1wQkJXb2hBeUFJSVFzRFFDQURRUUZyTFFBQUlRa2dBMEVDYXkwQUFDRU1JQU5CQTJzdEFBQWhDaUFEUVFSckxRQUFJUThnQTBFRmF5MEFBQ0VUSUJJaEVRTkFJQVFnQXkwQUFDSU9JQk1nQ2lBTWFpSU5RUVIwYWlBSklBOXFJaE5ySUEwZ0UydEJBblJxYWtFUWFrRUZkVUhBTldvdEFBQTZBQUFnQkNBRExRQUJJZzBnRHlBSklBeHFJaE5CQkhScUlBb2dEbW9pRDJ0cUlCTWdEMnRCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQVNBRUlBTXRBQUlpRUNBS0lBa2dEbW9pRTBFRWRHb2dEQ0FOYWlJS2Eyb2dFeUFLYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBQ0lBUWdBeTBBQXlJWElBd2dEU0FPYWlJS1FRUjBhaUFKSUJCcUlneHJhaUFLSUF4clFRSjBha0VRYWtFRmRVSEFOV290QUFBNkFBTWdCRUVFYWlFRUlBTkJCR29oQXlBSklSTWdEaUVQSUEwaENpQVFJUXdnRnlFSklCRkJBV3NpRVEwQUN5QUVJQlJxSVFRZ0F5QVlhaUVESUF0QkFXc2lDdzBBQ3d3SEN5QUNLQUlBSUFRZ0EwRUNheUFKUVFKcklBMGdEQ0FISUFoQkFCQVlEQVlMSUFkQkJXb2hDeUFKUVFKcklRNGdBMEVDYXlFS0lBSW9BZ0FoRHdKQUFrQWdBMEVDU0EwQUlBb2dDMm9nRFVzTkFDQUpRUUpJRFFBZ0NFRUZhaUlVSUE1cUlBeExEUUFnRFNFTERBRUxJQThnRlVIQUNtb2lEeUFLSUE0Z0RTQU1JQXNnQ0VFRmFpSVVJQXNRQ1VFQUlRNUJBQ0VLQ3lBVUJFQWdDeUFIYXlFWUlBZEJBblloRWlBUElBc2dEbXdnQ21wcVFRVnFJUU1nRlNFTUEwQWdBMEVCYXkwQUFDRUpJQU5CQW1zdEFBQWhDeUFEUVFOckxRQUFJUTRnQTBFRWF5MEFBQ0VOSUFOQkJXc3RBQUFoRVNBU0lROERRQ0FNSUFNdEFBQWlDaUFSSUFzZ0Rtb2lFMEVFZEdvZ0NTQU5haUlSYXlBVElCRnJRUUowYW1vMkFnQWdEQ0FETFFBQkloTWdEU0FKSUF0cUloRkJCSFJxSUFvZ0Rtb2lEV3RxSUJFZ0RXdEJBblJxTmdJRUlBd2dBeTBBQWlJUUlBNGdDU0FLYWlJT1FRUjBhaUFMSUJOcUlnMXJhaUFPSUExclFRSjBhallDQ0NBTUlBTXRBQU1pRnlBS0lCTnFJZzVCQkhRZ0Myb2dDU0FRYWlJTGEyb2dEaUFMYTBFQ2RHbzJBZ3dnREVFUWFpRU1JQU5CQkdvaEF5QUpJUkVnQ2lFTklCTWhEaUFRSVFzZ0Z5RUpJQTlCQVdzaUR3MEFDeUFESUJocUlRTWdGRUVCYXlJVURRQUxDeUFWSUFkQkFuUWlER29pQ1NBSFFSUnNhaUVESUFoQkFuWWhEMEhBQUNBSGF5RVhRUUFnQjJzaUZFRURkQ0VZSUFkQkEzUWhFU0FIUVFOc1FRSjBJUk1EUUNBSElRMERRQ0FFSUFrZ0VXb29BZ0FpRGlBRElCRnFLQUlBSUFNZ0RHb29BZ0FpRmlBRElCaHFLQUlBSWd0cUlncHJJQXBCQW5ScmFpQURLQUlBSWhBZ0F5QVVRUUowSWhwcUtBSUFJZ3BxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBT2dBd0lBUWdDU0FNYWlnQ0FDSVNJQllnQ2lBTGFpSWNRUVIwYWlBT0lCQnFJaFpyYWlBY0lCWnJRUUowYWtHQUJHcEJDblZCd0RWcUxRQUFPZ0FnSUFRZ0NTZ0NBQ0lXSUJBZ0N5QU9haUljUVFSMGFpQUtJQkpxSWhCcmFpQWNJQkJyUVFKMGFrR0FCR3BCQ25WQndEVnFMUUFBT2dBUUlBUWdDU0FhYWlnQ0FDQUtJQTRnRW1vaURrRUVkR29nQ3lBV2FpSUxhMm9nRGlBTGEwRUNkR3BCZ0FScVFRcDFRY0ExYWkwQUFEb0FBQ0FKUVFScUlRa2dCRUVCYWlFRUlBTkJCR29oQXlBTlFRRnJJZzBOQUFzZ0JDQVhhaUVFSUFNZ0Uyb2hBeUFKSUJOcUlRa2dEMEVCYXlJUERRQUxEQVVMSUFJb0FnQWdCQ0FEUVFKcklBbEJBbXNnRFNBTUlBY2dDRUVCRUJnTUJBc2dBaWdDQUNBRUlBTkJBbXNnQ1NBTklBd2dCeUFJUVFFUUdRd0RDeUFDS0FJQUlBUWdBMEVDYXlBSlFRSnJJQTBnRENBSElBaEJBUkFTREFJTElBSW9BZ0FnQkNBRFFRSnJJQWxCQW1zZ0RTQU1JQWNnQ0VFQkVCY01BUXNnQWlnQ0FDQUVJQU5CQW1zZ0NVRUNheUFOSUF3Z0J5QUlRUU1RRWdzZ0FTNEJBQ0lPUVFOMUlCbEJBWFpxSVE4Z0FTNEJBaUlMUVFOMUlCdEJBWFpxSVFNZ0FpZ0NBQ0FDS0FJRUlnb2dBaWdDQ0NJQ2JFRUlkR29oQVNBQUlBWkJBblJCZUhGcUlBVkJBWFpxUVlBQ2FpRUVJQWhCQVhZaEVTQUhRUUYySVEwZ0MwRUhjU0VRSUFKQkEzUWhBQ0FLUVFOMElRb0NRQUpBSUE1QkIzRWlFa1VOQUNBUVJRMEFJQTFCQVdvaERrRUFJUVVDUUFKQUlBOUJBRWdOQUNBT0lBOXFJQXBMRFFBZ0EwRUFTQTBBSUFNZ0VXcEJBV29nQUVzTkFDQUFJUVlnQ2lFT0lBTWhCUXdCQ3lBQklCVWdEeUFESUFvZ0FDQU9JQkZCQVdvaUJpQU9FQWtnQVNBQUlBcHNhaUFWSUFZZ0RteHFJQThnQXlBS0lBQWdEaUFHSUE0UUNTQVZJUUZCQUNFUEMwRVFJQTFySVJjZ0IwRUNkaUVBUVFnZ0VHc2hBMEVJSUJKcklRa2dEa0VCZENJTUlBMXJJUlFnQVNBRklBNXNhaUFQYWlFTElBUWhDaUFJUVFKMklnY2hBZ05BSUJBZ0N5QU1haTBBQUd3Z0F5QUxJQTVxTFFBQUlnaHNhaUVOSUFnZ0VHd2dBeUFMTFFBQWJHb2hFeUFBSVJFRFFDQUxRUUZxSWdnZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBSUlBNXFMUUFBSWdoc0lBTWdDeTBBQVd4cUloTWdFbXhxUVNCcVFRWjJPZ0FBSUFvZ0NTQU5iQ0FRSUJsc0lBTWdDR3hxSWdnZ0VteHFRU0JxUVFaMk9nQUlJQXN0QUFJaERTQUxRUUpxSWdzZ0RHb3RBQUFoR1NBS0lBa2dFMndnRUNBTElBNXFMUUFBSWh0c0lBTWdEV3hxSWhNZ0VteHFRU0JxUVFaMk9nQUJJQW9nQ0NBSmJDQVFJQmxzSUFNZ0cyeHFJZzBnRW14cVFTQnFRUVoyT2dBSklBcEJBbW9oQ2lBUlFRRnJJaEVOQUFzZ0N5QVVhaUVMSUFvZ0Yyb2hDaUFDUVFGcklnSU5BQXNnQkVGQWF5RUtJQUVnQlNBR2FpQU9iR29nRDJvaEN3TkFJQkFnQ3lBTWFpMEFBR3dnQXlBTElBNXFMUUFBSWdGc2FpRU5JQUVnRUd3Z0F5QUxMUUFBYkdvaEV5QUFJUkVEUUNBTFFRRnFJZ0VnREdvdEFBQWhBaUFLSUFrZ0Uyd2dFQ0FCSUE1cUxRQUFJZ0ZzSUFNZ0N5MEFBV3hxSWdRZ0VteHFRU0JxUVFaMk9nQUFJQW9nQ1NBTmJDQUNJQkJzSUFFZ0EyeHFJZ0VnRW14cVFTQnFRUVoyT2dBSUlBc3RBQUloQWlBTFFRSnFJZ3NnREdvdEFBQWhCU0FLSUFRZ0NXd2dFQ0FMSUE1cUxRQUFJZ1JzSUFJZ0EyeHFJaE1nRW14cVFTQnFRUVoyT2dBQklBb2dBU0FKYkNBRklCQnNJQU1nQkd4cUlnMGdFbXhxUVNCcVFRWjJPZ0FKSUFwQkFtb2hDaUFSUVFGckloRU5BQXNnQ3lBVWFpRUxJQW9nRjJvaENpQUhRUUZySWdjTkFBc01BUXNnRWdSQUlBMUJBV29oQzBFQUlRSUNRQUpBSUE5QkFFZ05BQ0FMSUE5cUlBcExEUUFnQTBFQVNBMEFJQU1nRVdvZ0FFc05BQ0FBSVJFZ0NpRUxJQU1oQWd3QkN5QUJJQlVnRHlBRElBb2dBQ0FMSUJFZ0N4QUpJQUVnQUNBS2JHb2dGU0FMSUJGc2FpQVBJQU1nQ2lBQUlBc2dFU0FMRUFrZ0ZTRUJRUUFoRHd0QkVDQU5heUVHSUFkQkFuWWhBRUVJSUJKcklRTWdDMEVCZENBTmF5RUhJQUVnQWlBTGJHb2dEMm9oQ1NBRUlRd2dDRUVDZGlJVUlRVURRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUWdnQ1NBTGFpMEFBQ0VLSUF3Z0VpQUpMUUFCSWcxc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQ0NBU2JDQURJQXBzYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFvZ0NVRUNhaUlKSUF0cUxRQUFJUk1nRENBS0lCSnNJQU1nRFd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnRWlBVGJDQURJQWhzYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnQlVFQmF5SUZEUUFMSUFSQlFHc2hEQ0FCSUFJZ0VXb2dDMnhxSUE5cUlRa0RRQ0FBSVE0RFFDQUpRUUZxSUF0cUxRQUFJUUVnQ1NBTGFpMEFBQ0VDSUF3Z0VpQUpMUUFCSWdSc0lBTWdDUzBBQUd4cVFRTjBRU0JxUVFaMk9nQUFJQXdnQVNBU2JDQUNJQU5zYWtFRGRFRWdha0VHZGpvQUNDQUpMUUFDSVFJZ0NVRUNhaUlKSUF0cUxRQUFJUVVnRENBQ0lCSnNJQU1nQkd4cVFRTjBRU0JxUVFaMk9nQUJJQXdnQlNBU2JDQUJJQU5zYWtFRGRFRWdha0VHZGpvQUNTQU1RUUpxSVF3Z0RrRUJheUlPRFFBTElBY2dDV29oQ1NBR0lBeHFJUXdnRkVFQmF5SVVEUUFMREFFTElCQUVRRUVBSVFJQ1FBSkFJQTlCQUVnTkFDQU5JQTlxSUFwTERRQWdBMEVBU0EwQUlBTWdFV3BCQVdvZ0FFc05BQ0FBSVFVZ0F5RUNEQUVMSUFFZ0ZTQVBJQU1nQ2lBQUlBMGdFVUVCYWlJRklBMFFDU0FCSUFBZ0NteHFJQlVnQlNBTmJHb2dEeUFESUFvZ0FDQU5JQVVnRFJBSklCVWhBU0FOSVFwQkFDRVBDMEVRSUExcklSRWdCMEVDZGlFQVFRZ2dFR3NoQXlBS1FRRjBJZ1lnRFdzaEJ5QUJJQUlnQ214cUlBOXFJUWtnQkNFTUlBaEJBbllpQ3lFVUEwQWdBQ0VPQTBBZ0JpQUphaTBBQUNFSUlBd2dBeUFKTFFBQWJDQVFJQWtnQ21vdEFBQWlEV3hxUVFOMFFTQnFRUVoyT2dBQUlBd2dBeUFOYkNBSUlCQnNha0VEZEVFZ2FrRUdkam9BQ0NBSlFRRnFJZ2dnQm1vdEFBQWhEU0FNSUFNZ0NTMEFBV3dnRUNBSUlBcHFMUUFBSWdoc2FrRURkRUVnYWtFR2Rqb0FBU0FNSUFNZ0NHd2dEU0FRYkdwQkEzUkJJR3BCQm5ZNkFBa2dERUVDYWlFTUlBbEJBbW9oQ1NBT1FRRnJJZzROQUFzZ0J5QUphaUVKSUF3Z0VXb2hEQ0FVUVFGckloUU5BQXNnQkVGQWF5RU1JQUVnQWlBRmFpQUtiR29nRDJvaENRTkFJQUFoRGdOQUlBWWdDV290QUFBaEFTQU1JQU1nQ1MwQUFHd2dFQ0FKSUFwcUxRQUFJZ0pzYWtFRGRFRWdha0VHZGpvQUFDQU1JQUlnQTJ3Z0FTQVFiR3BCQTNSQklHcEJCblk2QUFnZ0NVRUJhaUlCSUFacUxRQUFJUUlnRENBRElBa3RBQUZzSUJBZ0FTQUthaTBBQUNJQmJHcEJBM1JCSUdwQkJuWTZBQUVnRENBQklBTnNJQUlnRUd4cVFRTjBRU0JxUVFaMk9nQUpJQXhCQW1vaERDQUpRUUpxSVFrZ0RrRUJheUlPRFFBTElBY2dDV29oQ1NBTUlCRnFJUXdnQzBFQmF5SUxEUUFMREFFTElBRWdCQ0FQSUFNZ0NpQUFJQTBnRVVFSUVBa2dBU0FBSUFwc2FpQUVRVUJySUE4Z0F5QUtJQUFnRFNBUlFRZ1FDUXNnRlVHQURtb2tBQXYxRndFZ2Z5TUFRZEFEYXlJR0pBQWdBU0FCS0FJQUlnb2dBU2dDQkNJSUlBSnNJaFFnQTJvaUJ5QUljQ0lMUVFSMGFpQUhJQXRySWdsQkNIUnFOZ0lNSUFFZ0NpQUlJQUVvQWdnaUIyd2lERUVJZEdvaUhDQUpRUVowYWlBTFFRTjBhaUlMTmdJUUlBRWdDeUFNUVFaMElpSnFOZ0lVSUFCQ0FEY0NEQ0FBUWlnM0FoUWdBRUVBTmdJSUlBQkJCallDQUNBRFFRUjBJUXNDUUFKQUFrQWdCRUVDYXc0R0FRQUFBQUFCQUFzZ0JrRUFOZ0lNSUFZZ0J6WUNHQ0FHSUFnMkFoUWdCaUFGTmdJUUlBVkZCRUFNQVFzZ0JrSFFBR29pQUNBR1FReHFJQVpCRUdvZ0N5QUNRUVIwUVFCQkFFRVFRUkFRRENBQklBQVFEd3dCQ3lBR1FkQUFha0VBUVlBREVBTWFJQW9nRkVFSWRHb2dDMm9oRENBR1FnQTNBMGdnQmtGQWEwSUFOd01BSUFaQ0FEY0RPQ0FHUWdBM0F6QWdCa0lBTndNb0lBWkNBRGNESUNBR1FnQTNBeGdnQmtJQU53TVFRUUFoQlVFQUlRa0Nmd0pBSUFJRVFDQUFJQWhCcUg1c2FpZ0N4QUVOQVF0QkFDRUxRUUFNQVFzZ0JpQU1JQWhCQkhScklnUXRBQVVnQkMwQUJHb2dCQzBBQm1vZ0JDMEFCMm9pRmlBRUxRQURJQVF0QUFJZ0JDMEFBU0FFTFFBQWFtcHFJaFZxSWdvZ0JDMEFEeUFFTFFBT0lBUXRBQTBnQkMwQURHcHFhaUlZSUFRdEFBc2dCQzBBQ2lBRUxRQUpJQVF0QUFocWFtb2lGMm9pQkdzaUNUWUNGQ0FHSUFRZ0Ntb2lDellDRUVFQklSbEJBUXNoQkFKQUlBZEJBV3NnQWtZTkFDQUFJQWhCMkFGc2FpZ0N4QUZGQkVBTUFRc2dCaUFNSUFoQkNIUnFJZ0l0QUFVZ0FpMEFCR29nQWkwQUJtb2dBaTBBQjJvaUhTQUNMUUFESUFJdEFBSWdBaTBBQVNBQ0xRQUFhbXBxSWg1cUlnVWdBaTBBRHlBQ0xRQU9JQUl0QUEwZ0FpMEFER3BxYWlJZklBSXRBQXNnQWkwQUNpQUNMUUFKSUFJdEFBaHFhbW9pSUdvaUFtc2dDV29pQ1RZQ0ZDQUdJQUlnQldvZ0Myb2lDellDRUVFQklRVWdCRUVCYWlFRUN3Si9Ba0FnQTBVTkFDQUFRUlJyS0FJQVJRMEFJQVlnREVFQmF5SUNJQWhCQm5RaUVHb2lDaUFJUVFSMElnZHFMUUFBSUFvdEFBQnFJQW9nQ0VFRmRDSU5haTBBQUdvZ0NpQUlRVEJzSWc5cUxRQUFhaUlhSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lHMm9pRVNBS0lCQnFJZ0lnRUdvaUNpQUhhaTBBQUNBS0xRQUFhaUFLSUExcUxRQUFhaUFLSUE5cUxRQUFhaUlRSUFJZ0Qyb3RBQUFnQWlBTmFpMEFBQ0FDSUFkcUxRQUFJQUl0QUFCcWFtb2lEMm9pQW1zaUJ6WUNJQ0FHSUFJZ0VXb2dDMm9pQ3pZQ0VFRUJJUkVnQkVFQmFpRUtRUUVNQVF0QkFDRUhJQVFoQ2tFQUN5RUNBa0FDUUFKQUFrQUNRQ0FESUFoQkFXdEhCRUFnQUNnQ25BTU5BUXNnQkEwQkRBSUxJQWNnREVFUWFpSUhJQWhCQm5RaUUyb2lBQ0FJUVFSMElnMXFMUUFBSUFBdEFBQnFJQUFnQ0VFRmRDSVNhaTBBQUdvZ0FDQUlRVEJzSWc1cUxRQUFhaUFISUE1cUxRQUFJQWNnRW1vdEFBQWdCeUFOYWkwQUFDQU1MUUFRYW1wcWFpSU1JQUFnRTJvaUFDQVRhaUlISUExcUxRQUFJQWN0QUFCcUlBY2dFbW90QUFCcUlBY2dEbW90QUFCcUloTWdBQ0FPYWkwQUFDQUFJQkpxTFFBQUlBQWdEV290QUFBZ0FDMEFBR3BxYWlJQWFpSU5hMm9oQnlBTUlBMXFJQXRxSVF0QkFTRVNJQUpCQVdvaEFpQUtRUUZxSVFvZ0VVVWdCRUVBUjNKRkJFQWdHaUFiYWlBUGFpQVFhaUFBSUF4cUlCTnFhMEVGZFNFSkRBTUxJQVJGRFFJTElBa2dCRUVEYW5VaENRc2dHU0FDUlhFZ0JYRUVRQ0FWSUJacUlCZHFJQmhxSUI4Z0lHb2dIV29nSG1wclFRVjFJUWNNQWdzZ0FrVU5BUXNnQnlBQ1FRTnFkU0VIQ3lBR0FuOENRQUpBQWtBQ1FDQUtRUUZyRGdNQUFRSURDeUFMUVFSMkRBTUxJQXRCQlhZTUFnc2dDMEVWYkVFS2Rnd0JDeUFMUVFaMkN5SUFOZ0lRQW44Z0J5QUpja1VFUUNBR0lBQTJBa2dnQmlBQU5nSk1JQVlnQURZQ1JDQUdJQUEyQWtBZ0JpQUFOZ0k4SUFZZ0FEWUNPQ0FHSUFBMkFqUWdCaUFBTmdJd0lBWWdBRFlDTENBR0lBQTJBaWdnQmlBQU5nSWtJQVlnQURZQ0lDQUdJQUEyQWh3Z0JpQUFOZ0lZSUFZZ0FEWUNGQ0FHUWRBQWFpRUhJQVpCRUdvaENVRUFEQUVMSUFZZ0FDQUphaUlFSUFkck5nSkFJQVlnQkNBSFFRRjFJZ0pyTmdJd0lBWWdBaUFFYWpZQ0lDQUdJQVFnQjJvMkFoQWdCaUFBSUFscklnUWdCMnMyQWt3Z0JpQUVJQUpyTmdJOElBWWdBaUFFYWpZQ0xDQUdJQVFnQjJvMkFod2dCaUFBSUFsQkFYVWlDbW9pQkNBSGF6WUNSQ0FHSUFRZ0FtczJBalFnQmlBQ0lBUnFOZ0lrSUFZZ0JDQUhhallDRkNBR0lBQWdDbXNpQUNBSGF6WUNTQ0FHSUFBZ0FtczJBamdnQmlBQUlBSnFOZ0lvSUFZZ0FDQUhhallDR0NBR1FkQUFhaUVISUFaQkVHb2hDVUVBQ3lFQUEwQWdCeUFKSUFCQkRIRnFLQUlBSWdKQi93RWdBa0gvQVVnYklnSkJBQ0FDUVFCS0d5SUNPZ0FCSUFjZ0Fqb0FBQ0FIUVFKcUlRY2dDU0FBUVFKcUlnQkJQbkZGUVFSMGFpRUpJQUJCZ0FKSERRQUxJQndnRkVFR2RHb2dBMEVEZEdvaEF5QUlRUVIwSVEwZ0NFRUdkQ0VVUVFBZ0NFRURkQ0lNYXlFVElBWkIwQUpxSVJ3Z0JrRkFheUVqUVFBaEMwRUFJUW9EUUNBR1FnQTNBMGdnSTBJQU53TUFJQVpDQURjRE9DQUdRZ0EzQXpBZ0JrSUFOd01vSUFaQ0FEY0RJQ0FHUWdBM0F4Z2dCa0lBTndNUVFRQWhDVUVBSVFCQkFDRUNJQmtFUUNBR0lBTWdFMm9pQUMwQUF5QUFMUUFDYWlJV0lBQXRBQUVnQUMwQUFHb2lGV29pQWlBQUxRQUhJQUF0QUFacUloZ2dBQzBBQlNBQUxRQUVhaUlYYWlJQWF5SUpOZ0lVSUFZZ0FDQUNhaUlBTmdJUVFRRWhBZ3NnQlFSQUlBWWdBeUFVYWlJRUxRQURJQVF0QUFKcUloMGdCQzBBQVNBRUxRQUFhaUllYWlJSUlBUXRBQWNnQkMwQUJtb2lIeUFFTFFBRklBUXRBQVJxSWlCcUlnUnJJQWxxSWdrMkFoUWdCaUFFSUFocUlBQnFJZ0EyQWhBZ0FrRUJhaUVDQzBFQUlRY0NmeUFSUlFSQUlBSWhDRUVBREFFTElBWWdBMEVCYXlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUdpQUVJQXhxTFFBQUlBUXRBQUJxSWh0cUlnNGdDQ0FOYWlJRUlBMXFJZ2dnREdvdEFBQWdDQzBBQUdvaUVDQUVJQXhxTFFBQUlBUXRBQUJxSWc5cUlnUnJJZ2MyQWlBZ0JpQUVJQTVxSUFCcUlnQTJBaEFnQWtFQmFpRUlRUUVMSVFRQ1FBSkFBa0FDUUNBU1JRUkFJQUlOQVF3Q0N5QUhJQU5CQ0dvaURpQU5haUlISUF4cUxRQUFJQWN0QUFCcUlBd2dEbW90QUFBZ0F5MEFDR3BxSWc0Z0J5QU5haUlISUExcUlpRWdER290QUFBZ0lTMEFBR29pSVNBSElBeHFMUUFBSUFjdEFBQnFJaVJxSWlWcmFpRUhJQTRnSldvZ0FHb2hBQ0FFUVFGcUlRUWdDRUVCYWlFSUlCRkZJQUpCQUVkeVJRUkFJQm9nRzJvZ0Qyb2dFR29nRGlBa2FpQWhhbXRCQkhVaENRd0RDeUFDUlEwQ0N5QUpJQUpCQW1wMUlRa0xJQmtnQkVWeElBVnhCRUFnRlNBV2FpQVhhaUFZYWlBZklDQnFJQjFxSUI1cWEwRUVkU0VIREFJTElBUkZEUUVMSUFjZ0JFRUNhblVoQndzZ0JnSi9Ba0FDUUFKQUFrQWdDRUVCYXc0REFBRUNBd3NnQUVFRGRnd0RDeUFBUVFSMkRBSUxJQUJCRld4QkNYWU1BUXNnQUVFRmRnc2lBRFlDRUFKQUlBY2dDWEpGQkVBZ0JpQUFOZ0pJSUFZZ0FEWUNUQ0FHSUFBMkFrUWdCaUFBTmdKQUlBWWdBRFlDUENBR0lBQTJBamdnQmlBQU5nSTBJQVlnQURZQ01DQUdJQUEyQWl3Z0JpQUFOZ0lvSUFZZ0FEWUNKQ0FHSUFBMkFpQWdCaUFBTmdJY0lBWWdBRFlDR0NBR0lBQTJBaFFNQVFzZ0JpQUFJQWxxSWdRZ0IyczJBa0FnQmlBRUlBZEJBWFVpQW1zMkFqQWdCaUFDSUFScU5nSWdJQVlnQkNBSGFqWUNFQ0FHSUFBZ0NXc2lCQ0FIYXpZQ1RDQUdJQVFnQW1zMkFqd2dCaUFDSUFScU5nSXNJQVlnQkNBSGFqWUNIQ0FHSUFBZ0NVRUJkU0lJYWlJRUlBZHJOZ0pFSUFZZ0JDQUNhellDTkNBR0lBSWdCR28yQWlRZ0JpQUVJQWRxTmdJVUlBWWdBQ0FJYXlJQUlBZHJOZ0pJSUFZZ0FDQUNhellDT0NBR0lBQWdBbW8yQWlnZ0JpQUFJQWRxTmdJWUN5QUtJQnhxSVFCQkFDRUhJQVpCRUdvaENRTkFJQUFnQ1NBSFFRRjBRUXh4YWlnQ0FDSUNRZjhCSUFKQi93RklHeUlDUVFBZ0FrRUFTaHNpQWpvQUFTQUFJQUk2QUFBZ0FFRUNhaUVBSUFrZ0IwRUNhaUlIUVE1eFJVRUVkR29oQ1NBSFFjQUFSdzBBQ3lBRElDSnFJUU1nQ3lFQVFjQUFJUXBCQVNFTElBQkZEUUFMSUFFZ0JrSFFBR29RRHdzZ0JrSFFBMm9rQUF0U0FRSi9RWURBQUNnQ0FDSUJJQUJCQTJwQmZIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkd3MEFJQUEvQUVFUWRFc0VRQ0FBRUFCRkRRRUxRWURBQUNBQU5nSUFJQUVQQzBHRXdBQkJNRFlDQUVGL0M3VUZBUVIvSUFBb0FoUWhBeUFBS0FJUUlRUWdBQ2dDQkNFRklBQW9BZ3dpQWlBQktRSUFOd0lBSUFJZ0FTa0NDRGNDQ0NBQ0lBVkJCSFFpQUdvaUFpQUJLUUlRTndJQUlBSWdBU2tDR0RjQ0NDQUFJQUpxSWdJZ0FTa0NJRGNDQUNBQ0lBRXBBaWczQWdnZ0FDQUNhaUlDSUFFcEFqQTNBZ0FnQWlBQktRSTROd0lJSUFBZ0Ftb2lBaUFCS1FKQU53SUFJQUlnQVNrQ1NEY0NDQ0FBSUFKcUlnSWdBU2tDVURjQ0FDQUNJQUVwQWxnM0FnZ2dBQ0FDYWlJQ0lBRXBBbUEzQWdBZ0FpQUJLUUpvTndJSUlBQWdBbW9pQWlBQktRSndOd0lBSUFJZ0FTa0NlRGNDQ0NBQUlBSnFJZ0lnQVNrQ2dBRTNBZ0FnQWlBQktRS0lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ2tBRTNBZ0FnQWlBQktRS1lBVGNDQ0NBQUlBSnFJZ0lnQVNrQ29BRTNBZ0FnQWlBQktRS29BVGNDQ0NBQUlBSnFJZ0lnQVNrQ3NBRTNBZ0FnQWlBQktRSzRBVGNDQ0NBQUlBSnFJZ0lnQVNrQ3dBRTNBZ0FnQWlBQktRTElBVGNDQ0NBQUlBSnFJZ0lnQVNrQzBBRTNBZ0FnQWlBQktRTFlBVGNDQ0NBQUlBSnFJZ0lnQVNrQzRBRTNBZ0FnQWlBQktRTG9BVGNDQ0NBQUlBSnFJZ0FnQVNrQzhBRTNBZ0FnQUNBQktRTDRBVGNDQ0NBRUlBRXBBb0FDTndJQUlBUWdCVUVEZENJQWFpSUVJQUVwQW9nQ053SUFJQUFnQkdvaUJDQUJLUUtRQWpjQ0FDQUFJQVJxSWdRZ0FTa0NtQUkzQWdBZ0FDQUVhaUlFSUFFcEFxQUNOd0lBSUFBZ0JHb2lCQ0FCS1FLb0FqY0NBQ0FBSUFScUlnUWdBU2tDc0FJM0FnQWdBQ0FFYWlBQktRSzRBamNDQUNBRElBRXBBc0FDTndJQUlBQWdBMm9pQXlBQktRTElBamNDQUNBQUlBTnFJZ01nQVNrQzBBSTNBZ0FnQUNBRGFpSURJQUVwQXRnQ053SUFJQUFnQTJvaUF5QUJLUUxnQWpjQ0FDQUFJQU5xSWdNZ0FTa0M2QUkzQWdBZ0FDQURhaUlESUFFcEF2QUNOd0lBSUFBZ0Eyb2dBU2tDK0FJM0FnQUxid0VCZnlNQVFSQnJJZ0lrQUNBQ1FRQTJBZ3dnQUNBQ1FReHFFQUloQUFKL0lBRUNmeUFDS0FJTUlnRkJmMFlFUUVHQWdJQ0FlQ0FBRFFFYVFRRU1BZ3RCQVNBQURRRWFJQUZCQVdwQkFYWWlBRUVBSUFCcklBRkJBWEViQ3pZQ0FFRUFDeUVBSUFKQkVHb2tBQ0FBQ3pZQUlBSUVRQ0FBSUFFUUFnOExRUUVoQWlBQklBQkJBUkFVSWdBMkFnQWdBRUYvUndSL0lBRWdBRUVCY3pZQ0FFRUFCVUVCQ3d2YUJ3RU5meU1BUWNBRGF5SVJKQUFnQmtFRmFpRUpBa0FDUUNBQ1FRQklEUUFnQWlBSmFpQUVTdzBBSUFOQkFFZ05BQ0FESUFkcVFRVnFJQVZMRFFBZ0JDRUpJQU1oQ2d3QkN5QUFJQkVnQWlBRElBUWdCU0FKSUFkQkJXb2dDUkFKSUJFaEFFRUFJUUlMSUFBZ0NTQUtiQ0FDYW1vaUFDQUpJQWhCQVhaQkFYRkJBbkpzYWtFRmFpRUNRUkFnQm1zaERDQUpJQVpySVE0Z0JrRUNkaUVTSUFoQkFYRWhGQ0FBSUFscUlSVWdCeUVQQTBBZ0FrRUJheTBBQUNFQUlBSkJBbXN0QUFBaENDQUNRUU5yTFFBQUlRUWdBa0VFYXkwQUFDRUtJQUpCQldzdEFBQWhDeUFTSVEwRFFDQUJJQUl0QUFBaUF5QUxJQVFnQ0dvaUJVRUVkR29nQUNBS2FpSUxheUFGSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQU9nQUFJQUVnQWkwQUFTSUZJQW9nQUNBSWFpSUxRUVIwYWlBRElBUnFJZ3ByYWlBTElBcHJRUUowYWtFUWFrRUZkVUhBTldvdEFBQTZBQUVnQVNBQ0xRQUNJaEFnQkNBQUlBTnFJZ3BCQkhScUlBVWdDR29pQkd0cUlBb2dCR3RCQW5ScVFSQnFRUVYxUWNBMWFpMEFBRG9BQWlBQklBSXRBQU1pRXlBSUlBTWdCV29pQkVFRWRHb2dBQ0FRYWlJSWEyb2dCQ0FJYTBFQ2RHcEJFR3BCQlhWQndEVnFMUUFBT2dBRElBRkJCR29oQVNBQ1FRUnFJUUlnQUNFTElBTWhDaUFGSVFRZ0VDRUlJQk1oQUNBTlFRRnJJZzBOQUFzZ0FTQU1haUVCSUFJZ0Rtb2hBaUFQUVFGcklnOE5BQXNnRkNBVmFrRUNhaUlJSUFsQkJXeHFJUUFnQjBFQ2RpRUtRY0FBSUFacklSSWdDVUVCZENFUElBRWdCMEVFZEdzaEFpQUpRUUowSUFacklRZEJBQ0FKYXlJTFFRRjBJUk1EUUNBR0lRRURRQ0FDSUFnZ0Qyb3RBQUFpQXlBQUlBOXFMUUFBSUFBZ0NXb3RBQUFpRENBQUlCTnFMUUFBSWdScUlnVnJJQVZCQW5ScmFpQUFMUUFBSWcwZ0FDQUxhaTBBQUNJRmFrRVViR3BCRUdwQkJYVkJ3RFZxTFFBQUlBSXRBREJxUVFGcVFRRjJPZ0F3SUFJZ0NDQUphaTBBQUNJUUlBd2dCQ0FGYWlJT1FRUjBhaUFESUExcUlneHJJQTRnREd0QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0FpMEFJR3BCQVdwQkFYWTZBQ0FnQWlBSUxRQUFJZ3dnRFNBRElBUnFJZzVCQkhScUlBVWdFR29pRFdzZ0RpQU5hMEVDZEdwcVFSQnFRUVYxUWNBMWFpMEFBQ0FDTFFBUWFrRUJha0VCZGpvQUVDQUNJQWdnQzJvdEFBQWdCU0FESUJCcUlnTkJCSFJxSUFRZ0RHb2lCR3NnQXlBRWEwRUNkR3BxUVJCcVFRVjFRY0ExYWkwQUFDQUNMUUFBYWtFQmFrRUJkam9BQUNBSVFRRnFJUWdnQWtFQmFpRUNJQUJCQVdvaEFDQUJRUUZySWdFTkFBc2dBaUFTYWlFQ0lBQWdCMm9oQUNBSElBaHFJUWdnQ2tFQmF5SUtEUUFMSUJGQndBTnFKQUFMNXdZQkRIOENRQ0FCUVFSUEJFQWdBMEVDZGtFQ2FpRUxRUVFoQVFOQUFrQWdBRUVCYXlJR0xRQUFJZ2NnQUMwQUFDSUlheUlDSUFKQkgzVWlBbW9nQW5NaUFpQURUdzBBSUFCQkFtc2lEeTBBQUNJS0lBZHJJZ2tnQ1VFZmRTSUphaUFKY3lBRVR3MEFJQUF0QUFFaURDQUlheUlKSUFsQkgzVWlDV29nQ1hNZ0JFOE5BQUovQWtBZ0FpQUxTUVJBSUFBdEFBSWhEZ0ovSUFRZ0FFRURheUlKTFFBQUlnSWdCMnNpRFNBTlFSOTFJZzFxSUExelN3UkFJQVlnRENBSElBaHFJQXBxSWdaQkFYUnFJQUpxUVFScVFRTjJPZ0FBSUE4Z0FpQUdha0VDYWtFQ2Rqb0FBQ0FHSUFKQkEyeHFJQUJCQkdzdEFBQkJBWFJxUVFScVFRTjJEQUVMSUFZaENTQUhJQXhxSUFwQkFYUnFRUUpxUVFKMkN5RUNJQWtnQWpvQUFDQU9JQWhySWdJZ0FrRWZkU0lDYWlBQ2N5QUVUdzBCSUFBZ0J5QU1haUFJYWlJR0lBNXFRUUpxUVFKMk9nQUJJQUFnQ2lBR1FRRjBhaUFPYWtFRWFrRURkam9BQUNBR0lBNUJBMnhxSUFBdEFBTkJBWFJxUVFScVFRTjJJUVlnQUVFQ2Fnd0NDeUFHSUFjZ0RHb2dDa0VCZEdwQkFtcEJBblk2QUFBTElBZ2dDbW9nREVFQmRHcEJBbXBCQW5ZaEJpQUFDeUFHT2dBQUN5QUFJQVZxSVFBZ0FVRUJheUlCRFFBTERBRUxJQUVnQW1wQkFXc3RBQUFpQmtFQmFpRUpRUUFnQm1zaENrRUVJUUVEUUFKQUlBQkJBV3NpRHkwQUFDSUhJQUF0QUFBaUNHc2lBaUFDUVI5MUlnSnFJQUp6SUFOUERRQWdBRUVDYXlJTkxRQUFJZ3dnQjJzaUFpQUNRUjkxSWdKcUlBSnpJQVJQRFFBZ0FDMEFBU0lPSUFocklnSWdBa0VmZFNJQ2FpQUNjeUFFVHcwQUlBQXRBQUloQ3lBR0lRSWdCQ0FBUVFOckxRQUFJaEVnQjJzaUVDQVFRUjkxSWhCcUlCQnpTd1JBSUEwZ0RDQUtJQVlnQnlBSWFrRUJha0VCZGlBTVFRRjBheUFSYWtFQmRTSUNJQUlnQmtvYklBSWdDa2diYWpvQUFDQUpJUUlMSUE4Z0J3Si9JQVFnQ3lBSWF5SU5JQTFCSDNVaURXb2dEWE5MQkVBZ0FDQU9JQW9nQmlBSElBaHFRUUZxUVFGMklBNUJBWFJySUF0cVFRRjFJZ3NnQmlBTFNCc2dDaUFMU2h0cU9nQUJJQUpCQVdvaEFndEJBQ0FDYXlJTEN5QUNJQXdnRG1zZ0NDQUhhMEVDZEdwQkJHcEJBM1VpQnlBQ0lBZElHeUFISUF0SUd5SUNha0hBTldvdEFBQTZBQUFnQUNBSUlBSnJRY0ExYWkwQUFEb0FBQXNnQUNBRmFpRUFJQUZCQVdzaUFRMEFDd3NMaUFJQkIzOGdBQ2dDQkNFRUFrQWdBQ2dDREVFRGRDSUhJQUFvQWhBaUNHc2lBa0VnVGdSQUlBUW9BQUFpQTBFWWRDQURRUWgwUVlDQS9BZHhjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJUU1nQUNnQ0NDSUNSUTBCSUFNZ0FuUWdCQzBBQkVFSUlBSnJkbkloQXd3QkN5QUNRUUZJQkVBTUFRc2dCQzBBQUNBQUtBSUlJZ1ZCR0dvaUJuUWhBeUFDSUFWcVFRaHJJZ0pCQVVnTkFBTkFJQVF0QUFFZ0JrRUlheUlHZENBRGNpRURJQUpCQ0VvaEJTQUVRUUZxSVFRZ0FrRUlheUVDSUFVTkFBc0xJQUFnQVNBSWFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0VGL0lRSWdCQ0FIVFFSL0lBQWdBQ2dDQUNBRVFRTjJhallDQkNBRFFTQWdBV3QyQlVGL0N3c0RBQUVMeHdFQkJIOGdBQ2dDQkNFQ0FrQWdBQ2dDREVFRGRDQUFLQUlRYXlJRFFTQk9CRUFnQWlnQUFDSUJRUmgwSUFGQkNIUkJnSUQ4QjNGeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JaEFTQUFLQUlJSWdCRkRRRWdBU0FBZENBQ0xRQUVRUWdnQUd0MmNnOExJQU5CQVVnRVFFRUFEd3NnQWkwQUFDQUFLQUlJSWdCQkdHb2lCSFFoQVNBQUlBTnFRUWhySWdCQkFVZ05BQU5BSUFJdEFBRWdCRUVJYXlJRWRDQUJjaUVCSUFCQkNFb2hBeUFDUVFGcUlRSWdBRUVJYXlFQUlBTU5BQXNMSUFFTDh3Y0JFbjhqQUVHQURtc2lEeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFrRUZhaUFGU3cwQUlBTWhDZ3dCQ3lBQUlBOUJ3QXBxSWdBZ0FpQURJQVFnQlNBSklBZEJCV29nQ1JBSklBa2hCRUVBSVFJTElBQWdCQ0FLYkNBQ2Ftb2dCR29pQUNBRVFRVnNhaUVDSUFSQkFYUWhFQ0FIUVFKMklSSkJBQ0FFYXlJTFFRRjBJUllnQkVFQ2RDQUdhMEVGYXlFVElBOGdDVUVDZENJWGFpRURJQWxCQTNRaEdFRjdJQVpyUVFKMElSa2dDVUVEYkVFQ2RDRWFBMEFnQ1NFRkEwQWdBeUFZYWlBQUlCQnFMUUFBSWdvZ0FpQVFhaTBBQUNBQ0lBUnFMUUFBSWhFZ0FpQVdhaTBBQUNJTWFpSU5heUFOUVFKMGEyb2dBaTBBQUNJT0lBSWdDMm90QUFBaURXcEJGR3hxTmdJQUlBTWdGMm9nQUNBRWFpMEFBQ0lWSUJFZ0RDQU5haUlVUVFSMGFpQUtJQTVxSWhGcmFpQVVJQkZyUVFKMGFqWUNBQ0FESUFBdEFBQWlFU0FPSUFvZ0RHb2lGRUVFZEdvZ0RTQVZhaUlPYTJvZ0ZDQU9hMEVDZEdvMkFnQWdBeUFaYWlBQUlBdHFMUUFBSUEwZ0NpQVZhaUlLUVFSMGFpQU1JQkZxSWd4cmFpQUtJQXhyUVFKMGFqWUNBQ0FBUVFGcUlRQWdBMEVFYWlFRElBSkJBV29oQWlBRlFRRnJJZ1VOQUFzZ0FpQVRhaUVDSUFBZ0Uyb2hBQ0FESUJwcUlRTWdFa0VCYXlJU0RRQUxRUkFnQm1zaERpQUdRUUoySVJJZ0R5QUlRUUowYWtFSWFpRUlJQTlCRkdvaEJBTkFJQVJCQkdzb0FnQWhBaUFFUVFocktBSUFJUUFnQkVFTWF5Z0NBQ0VGSUFSQkVHc29BZ0FoQ1NBRVFSUnJLQUlBSVF3Z0VpRU5BMEFnQVNBRUlnc29BZ0FpQmlBTUlBQWdCV29pQTBFRWRHb2dBaUFKYWlJRWF5QURJQVJyUVFKMGFtcEJnQVJxUVFwMVFjQTFhaTBBQUNBSUlnTW9BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQUFDQUJJQXNvQWdRaUNpQUpJQUFnQW1vaUJFRUVkR29nQlNBR2FpSUlheUFFSUFoclFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQURLQUlFUVJCcVFRVjFRY0ExYWkwQUFHcEJBV3BCQVhZNkFBRWdBU0FMS0FJSUloQWdCU0FDSUFacUlnUkJCSFJxSUFBZ0Ntb2lCV3NnQkNBRmEwRUNkR3BxUVlBRWFrRUtkVUhBTldvdEFBQWdBeWdDQ0VFUWFrRUZkVUhBTldvdEFBQnFRUUZxUVFGMk9nQUNJQUVnQ3lnQ0RDSVRJQUFnQmlBS2FpSUVRUVIwYWlBQ0lCQnFJZ0JySUFRZ0FHdEJBblJxYWtHQUJHcEJDblZCd0RWcUxRQUFJQU1vQWd4QkVHcEJCWFZCd0RWcUxRQUFha0VCYWtFQmRqb0FBeUFCUVFScUlRRWdBMEVRYWlFSUlBdEJFR29oQkNBQ0lRd2dCaUVKSUFvaEJTQVFJUUFnRXlFQ0lBMUJBV3NpRFEwQUN5QUJJQTVxSVFFZ0EwRWthaUVJSUF0QkpHb2hCQ0FIUVFGcklnY05BQXNnRDBHQURtb2tBQXZnQndFTmZ5TUFRWUFPYXlJUkpBQWdCa0VGYWlFSkFrQUNRQ0FDUVFCSURRQWdBaUFKYWlBRVN3MEFJQU5CQUVnTkFDQUhRUVZxSWc0Z0Eyb2dCVXNOQUNBRUlRa2dBeUVLREFFTElBQWdFVUhBQ21vaUFDQUNJQU1nQkNBRklBa2dCMEVGYWlJT0lBa1FDVUVBSVFJTElBNEVRQ0FKSUFacklSTWdCa0VDZGlFU0lBQWdDU0FLYkNBQ2FtcEJCV29oQWlBUklRQURRQ0FDUVFGckxRQUFJUWtnQWtFQ2F5MEFBQ0VESUFKQkEyc3RBQUFoQlNBQ1FRUnJMUUFBSVFvZ0FrRUZheTBBQUNFTElCSWhEUU5BSUFBZ0FpMEFBQ0lFSUFzZ0F5QUZhaUlNUVFSMGFpQUpJQXBxSWd0cklBd2dDMnRCQW5ScWFqWUNBQ0FBSUFJdEFBRWlEQ0FLSUFNZ0NXb2lDMEVFZEdvZ0JDQUZhaUlLYTJvZ0N5QUthMEVDZEdvMkFnUWdBQ0FDTFFBQ0lnOGdCU0FFSUFscUlnVkJCSFJxSUFNZ0RHb2lDbXRxSUFVZ0NtdEJBblJxTmdJSUlBQWdBaTBBQXlJVUlBTWdCQ0FNYWlJRFFRUjBhaUFKSUE5cUlnVnJhaUFESUFWclFRSjBhallDRENBQVFSQnFJUUFnQWtFRWFpRUNJQWtoQ3lBRUlRb2dEQ0VGSUE4aEF5QVVJUWtnRFVFQmF5SU5EUUFMSUFJZ0Uyb2hBaUFPUVFGcklnNE5BQXNMSUJFZ0JrRUNkQ0lFYWlJSklBWkJGR3hxSVFJZ0NTQUlRUUpxSUFac1FRSjBhaUVBSUFkQkFuWWhDRUhBQUNBR2F5RVVRUUFnQm1zaURrRURkQ0VUSUFaQkEzUWhCU0FHUVFOc1FRSjBJUWNEUUNBR0lRTURRQ0FCSUFVZ0NXb29BZ0FpQ2lBQ0lBVnFLQUlBSUFJZ0JHb29BZ0FpRUNBQ0lCTnFLQUlBSWd4cUlndHJJQXRCQW5ScmFpQUNLQUlBSWcwZ0FpQU9RUUowSWc5cUtBSUFJZ3RxUVJSc2FrR0FCR3BCQ25WQndEVnFMUUFBSUFBZ0JXb29BZ0JCRUdwQkJYVkJ3RFZxTFFBQWFrRUJha0VCZGpvQU1DQUJJQVFnQ1dvb0FnQWlFaUFRSUFzZ0RHb2lGVUVFZEdvZ0NpQU5haUlRYXlBVklCQnJRUUowYW1wQmdBUnFRUXAxUWNBMWFpMEFBQ0FBSUFScUtBSUFRUkJxUVFWMVFjQTFhaTBBQUdwQkFXcEJBWFk2QUNBZ0FTQUpLQUlBSWhBZ0RTQUtJQXhxSWhWQkJIUnFJQXNnRW1vaURXc2dGU0FOYTBFQ2RHcHFRWUFFYWtFS2RVSEFOV290QUFBZ0FDZ0NBRUVRYWtFRmRVSEFOV290QUFCcVFRRnFRUUYyT2dBUUlBRWdDU0FQYWlnQ0FDQUxJQW9nRW1vaUNrRUVkR29nRENBUWFpSU1heUFLSUF4clFRSjBhbXBCZ0FScVFRcDFRY0ExYWkwQUFDQUFJQTlxS0FJQVFSQnFRUVYxUWNBMWFpMEFBR3BCQVdwQkFYWTZBQUFnQUVFRWFpRUFJQWxCQkdvaENTQUJRUUZxSVFFZ0FrRUVhaUVDSUFOQkFXc2lBdzBBQ3lBQklCUnFJUUVnQUNBSGFpRUFJQUlnQjJvaEFpQUhJQWxxSVFrZ0NFRUJheUlJRFFBTElCRkJnQTVxSkFBTHBnUUJDWDhqQUVIQUEyc2lDeVFBSUFaQkJXb2hDUUpBQWtBZ0FrRUFTQTBBSUFJZ0NXb2dCRXNOQUNBRFFRQklEUUFnQXlBSGFpQUZTdzBBSUFRaENTQURJUW9NQVFzZ0FDQUxJQUlnQXlBRUlBVWdDU0FISUFrUUNTQUxJUUJCQUNFQ0MwRVFJQVpySVE0Z0NTQUdheUVQSUFaQkFuWWhFQ0FBSUFrZ0Ntd2dBbXBxUVFWcUlRQURRQ0FBUVFGckxRQUFJUWtnQUVFQ2F5MEFBQ0VDSUFCQkEyc3RBQUFoQXlBQVFRUnJMUUFBSVFvZ0FFRUZheTBBQUNFR0lCQWhEQU5BSUFFZ0FDMEFBQ0lFSUFZZ0FpQURhaUlGUVFSMGFpQUpJQXBxSWdacklBVWdCbXRCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQWlBRElBZ2Jha0VCYWtFQmRqb0FBQ0FCSUFBdEFBRWlCU0FLSUFJZ0NXb2lCa0VFZEdvZ0F5QUVhaUlLYTJvZ0JpQUthMEVDZEdwQkVHcEJCWFZCd0RWcUxRQUFJQWtnQWlBSUcycEJBV3BCQVhZNkFBRWdBU0FBTFFBQ0lnMGdBeUFFSUFscUlnWkJCSFJxSUFJZ0JXb2lBMnRxSUFZZ0EydEJBblJxUVJCcVFRVjFRY0ExYWkwQUFDQUVJQWtnQ0J0cVFRRnFRUUYyT2dBQ0lBRWdBQzBBQXlJUklBSWdCQ0FGYWlJRFFRUjBhaUFKSUExcUlnSnJhaUFESUFKclFRSjBha0VRYWtFRmRVSEFOV290QUFBZ0JTQUVJQWdiYWtFQmFrRUJkam9BQXlBQlFRUnFJUUVnQUVFRWFpRUFJQWtoQmlBRUlRb2dCU0VESUEwaEFpQVJJUWtnREVFQmF5SU1EUUFMSUFFZ0Rtb2hBU0FBSUE5cUlRQWdCMEVCYXlJSERRQUxJQXRCd0FOcUpBQUx6UVFCREg4akFFSEFBMnNpRHlRQUFrQUNRQ0FDUVFCSURRQWdBaUFHYWlBRVN3MEFJQU5CQUVnTkFDQURJQWRxUVFWcUlBVkxEUUFnQXlFSkRBRUxJQUFnRHlBQ0lBTWdCQ0FGSUFZZ0IwRUZhaUFHRUFrZ0R5RUFJQVloQkVFQUlRSUxJQUFnQkNBSmJDQUNhbW9nQkdvaUFDQUVRUVZzYWlFQ0lBQWdCQ0FJUVFKcWJHb2hBeUFIUVFKMklSRkJ3QUFnQm1zaEV5QUVRUUYwSVFjZ0JFRUNkQ0FHYXlFSVFRQWdCR3NpQ1VFQmRDRVVBMEFnQmlFRkEwQWdBU0FBSUFkcUxRQUFJZ29nQWlBSGFpMEFBQ0FDSUFScUxRQUFJZ3NnQWlBVWFpMEFBQ0lNYWlJTmF5QU5RUUowYTJvZ0FpMEFBQ0lPSUFJZ0NXb3RBQUFpRFdwQkZHeHFRUkJxUVFWMVFjQTFhaTBBQUNBRElBZHFMUUFBYWtFQmFrRUJkam9BTUNBQklBQWdCR290QUFBaUVpQUxJQXdnRFdvaUVFRUVkR29nQ2lBT2FpSUxheUFRSUF0clFRSjBhbXBCRUdwQkJYVkJ3RFZxTFFBQUlBTWdCR290QUFCcVFRRnFRUUYyT2dBZ0lBRWdBQzBBQUNJTElBNGdDaUFNYWlJUVFRUjBhaUFOSUJKcUlnNXJJQkFnRG10QkFuUnFha0VRYWtFRmRVSEFOV290QUFBZ0F5MEFBR3BCQVdwQkFYWTZBQkFnQVNBQUlBbHFMUUFBSUEwZ0NpQVNhaUlLUVFSMGFpQUxJQXhxSWd4cklBb2dER3RCQW5ScWFrRVFha0VGZFVIQU5Xb3RBQUFnQXlBSmFpMEFBR3BCQVdwQkFYWTZBQUFnQTBFQmFpRURJQUJCQVdvaEFDQUJRUUZxSVFFZ0FrRUJhaUVDSUFWQkFXc2lCUTBBQ3lBQklCTnFJUUVnQXlBSWFpRURJQUlnQ0dvaEFpQUFJQWhxSVFBZ0VVRUJheUlSRFFBTElBOUJ3QU5xSkFBTDZnWUJDSDhDUUNBQUtBSUFJZ0VvQWhSRkRRQWdBVUVBTmdJVUlBRW9BaGdOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ1BFVU5BQ0FCUVFBMkFqd2dBVUZBYXlnQ0FBMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUprUlEwQUlBRkJBRFlDWkNBQktBSm9EUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQW93QlJRMEFJQUZCQURZQ2pBRWdBU2dDa0FFTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0N0QUZGRFFBZ0FVRUFOZ0swQVNBQktBSzRBUTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMY0FVVU5BQ0FCUVFBMkF0d0JJQUVvQXVBQkRRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9Bb1FDUlEwQUlBRkJBRFlDaEFJZ0FTZ0NpQUlOQUNBQUlBQW9BaXhCQVdzMkFpd0xBa0FnQVNnQ3JBSkZEUUFnQVVFQU5nS3NBaUFCS0FLd0FnMEFJQUFnQUNnQ0xFRUJhellDTEFzQ1FDQUJLQUxVQWtVTkFDQUJRUUEyQXRRQ0lBRW9BdGdDRFFBZ0FDQUFLQUlzUVFGck5nSXNDd0pBSUFFb0F2d0NSUTBBSUFGQkFEWUMvQUlnQVNnQ2dBTU5BQ0FBSUFBb0FpeEJBV3MyQWl3TEFrQWdBU2dDcEFORkRRQWdBVUVBTmdLa0F5QUJLQUtvQXcwQUlBQWdBQ2dDTEVFQmF6WUNMQXNDUUNBQktBTE1BMFVOQUNBQlFRQTJBc3dESUFFb0F0QUREUUFnQUNBQUtBSXNRUUZyTmdJc0N3SkFJQUVvQXZRRFJRMEFJQUZCQURZQzlBTWdBU2dDK0FNTkFDQUFJQUFvQWl4QkFXczJBaXdMQWtBZ0FTZ0NuQVJGRFFBZ0FVRUFOZ0tjQkNBQktBS2dCQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc0NRQ0FCS0FMRUJFVU5BQ0FCUVFBMkFzUUVJQUVvQXNnRURRQWdBQ0FBS0FJc1FRRnJOZ0lzQ3dKQUlBRW9BdXdFUlEwQUlBRkJBRFlDN0FRZ0FTZ0M4QVFOQUNBQUlBQW9BaXhCQVdzMkFpd0xJQUFvQWpnaEJnTkFBa0FnQmcwQUlBQW9BaHdoQjBFQUlRSkIvLy8vL3djaEEwRUFJUVFEUUNBQklBUkJLR3hxSWdVb0FoZ0VRQ0FGSUFJZ0JTZ0NFQ0lGSUFOSUlnZ2JJUUlnQlNBRElBZ2JJUU1MSUFSQkFXb2lCQ0FIVFEwQUN5QUNSUTBBSUFBb0Fnd2dBQ2dDRUNJRVFRUjBhaUlESUFJb0FnQTJBZ0FnQXlBQ0tBSWtOZ0lNSUFNZ0FpZ0NIRFlDQkNBRElBSW9BaUEyQWdnZ0FDQUVRUUZxTmdJUUlBSkJBRFlDR0NBQ0tBSVVEUUVnQUNBQUtBSXNRUUZyTmdJc0RBRUxDeUFBUVFBMkFqQWdBRUwvL3dNM0FpUUwyUThCQ244Z0FpQUFLQUlJSWdrb0FnQkdCRUFnQUVFQU5nSTBJQUFvQWpnaUFrVWhFUUpBSUFGRkJFQWdDU0FETmdJTUlBbEJBRFlDRkNBSklCRTJBaGdnQ1NBRU5nSVFJQWtnQXpZQ0NDQUNEUUVnQUNBQUtBSXNRUUZxTmdJc0RBRUxJQVVFUUNBQVFnQTNBaEFnQUJBYkFrQWdBU2dDQUVVRVFDQUFLQUk0UlEwQkN5QUFRZ0EzQWhBTElBQW9BZ2dpQWtFRFFRSWdBU2dDQkNJQkd6WUNGQ0FBUVFCQi8vOERJQUViTmdJa0lBSWdFVFlDR0NBQ1FRQTJBaEFnQWtJQU53SUlJQUJDZ1lDQWdCQTNBaWdNQVFzQ1FBSkFJQUVvQWdnRVFFRUFJUWtEUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUVnQ1VFVWJHb2lBaWdDREVFQmF3NEdBQUVDQXdRRkNRc2dBQ2dDR0NJS1JRMElJQU1nQWlnQ0VHc2hDeUFBS0FJQUlReEJBQ0VDQTBBQ1FDQU1JQUpCS0d4cUlnZ29BaFJCQVd0QkFVMEVRQ0FJS0FJSUlBdEdEUUVMSUFKQkFXb2lBaUFLUncwQkRBb0xDeUFDUVFCSURRZ2dDRUVBTmdJVUlBQWdBQ2dDS0VFQmF6WUNLQ0FJS0FJWURRVWdBQ0FBS0FJc1FRRnJOZ0lzSUFsQkFXb2hDUXdHQ3lBQUtBSVlJZ3BGRFFjZ0FpZ0NGQ0VMSUFBb0FnQWhERUVBSVFJRFFBSkFJQXdnQWtFb2JHb2lDQ2dDRkVFRFJnUkFJQWdvQWdnZ0MwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNRc0xJQUpCQUVnTkJ5QUlRUUEyQWhRZ0FDQUFLQUlvUVFGck5nSW9JQWdvQWhnTkJDQUFJQUFvQWl4QkFXczJBaXdnQ1VFQmFpRUpEQVVMSUFBb0FpUWlDRUgvL3dOR0RRWWdDQ0FDS0FJWUlndEpEUVlnQUNnQ0dDSUlSUTBHSUFJb0FoQWhEeUFBS0FJQUlReEJBQ0VDQTBBQ1FBSkFJQXdnQWtFb2JHb2lDaWdDRkVFRFJ3MEFJQW9vQWdnZ0MwY05BQ0FLUVFBMkFoUWdBQ0FBS0FJb1FRRnJOZ0lvSUFvb0FoZ05BU0FBSUFBb0FpeEJBV3MyQWl3TUFRc2dBa0VCYWlJQ0lBaEhEUUVMQ3lBSVFRRWdDRUVCU3hzaENpQURJQTlySVE5QkFDRUNBMEFDUUNBTUlBSkJLR3hxSWdnb0FoUWlEVUVCYTBFQlRRUkFJQWdvQWdnZ0QwWU5BUXNnQWtFQmFpSUNJQXBIRFFFTUNBc0xJQUpCQUVnTkJpQU5RUUpKRFFZZ0NFRUROZ0lVSUFnZ0N6WUNDQ0FKUVFGcUlRa01CQXNnQUNBQ0tBSWNJZ28yQWlRZ0FDZ0NHQ0lMUlEwQ0lBQW9BZ0FoREVFQUlRSWdDa0gvL3dOR0JFQURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFNQkFzQUN3TkFBa0FnRENBQ1FTaHNhaUlJS0FJVVFRTkhEUUFnQ0NnQ0NDQUtUUTBBSUFoQkFEWUNGQ0FBSUFBb0FpaEJBV3MyQWlnZ0NDZ0NHQTBBSUFBZ0FDZ0NMRUVCYXpZQ0xBc2dBa0VCYWlJQ0lBdEhEUUFMREFJTElBQVFHeUFBUVFFMkFqUkJBQ0VESUFsQkFXb2hDUXdDQ3lBQUtBSWtJZ2hCLy84RFJnMERJQWdnQWlnQ0dDSUtTUTBEQWtBZ0FDZ0NHQ0lMUlEwQUlBQW9BZ0FoREVFQUlRSURRQUpBSUF3Z0FrRW9iR29pQ0NnQ0ZFRURSdzBBSUFnb0FnZ2dDa2NOQUNBSVFRQTJBaFFnQUNBQUtBSW9RUUZyTmdJb0lBZ29BaGdOQWlBQUlBQW9BaXhCQVdzMkFpd01BZ3NnQWtFQmFpSUNJQXRIRFFBTEN5QUFLQUlvSWdnZ0MwOE5BeUFBS0FJSUlnSkJBellDRkNBQ0lBUTJBaEFnQWlBS05nSUlJQUlnQXpZQ0RDQUNJQUFvQWpoRk5nSVlRUUVoRGlBQUlBaEJBV28yQWlnZ0FDQUFLQUlzUVFGcU5nSXNDeUFKUVFGcUlRa01BQXNBQ3lBQUtBSW9JZ2dnQUNnQ0dDSUxTUTBCSUFoRkJFQkJBQ0VJREFJTElBQW9BZ0FoQ2tFQUlRbEJmeUVCQWtBZ0NFRUJSd1JBSUFoQkFYRWhEMEVBSVFJZ0NFRitjU0lPSVF3RFFDQUtJQUpCS0d4cUlnMG9BaFJCQVd0QkFVMEVRQ0FOS0FJSUlnMGdDU0FCUVg5R0lBa2dEVXB5SWcwYklRa2dBaUFCSUEwYklRRUxJQW9nQWtFQmNpSU5RU2hzYWlJUUtBSVVRUUZyUVFKSkJFQWdFQ2dDQ0NJUUlBa2dBVUYvUmlBSklCQktjaUlRR3lFSklBMGdBU0FRR3lFQkN5QUNRUUpxSVFJZ0RFRUNheUlNRFFBTElBOUZEUUVMSUFvZ0RrRW9iR29pQWlnQ0ZFRUJhMEVCU3cwQUlBNGdEaUFCSUFGQmYwWWJJQUlvQWdnZ0NVZ2JJUUVMSUFGQkFFZ05BU0FLSUFGQktHeHFJZ0ZCQURZQ0ZDQUFJQWhCQVdzaUNEWUNLQ0FCS0FJWURRRWdBQ0FBS0FJc1FRRnJOZ0lzREFFTElBNE5BU0FBS0FJWUlRc2dBQ2dDS0NFSUN5QUlJQXRQRFFBZ0FDZ0NDQ0lCSUJFMkFoZ2dBVUVDTmdJVUlBRWdCRFlDRUNBQklBTTJBZ2dnQVNBRE5nSU1JQUFnQ0VFQmFqWUNLQ0FBSUFBb0FpeEJBV28yQWl3TElBQW9BZ2dpQVNBSE5nSWdJQUVnQmpZQ0hDQUJJQVUyQWlRQ1FDQUFLQUk0UlFSQUlBQW9BaXdpQVNBQUtBSWNJZ05ORFFFZ0FDZ0NBQ0VHQTBCQi8vLy8vd2NoQlVFQUlRbEJBQ0VDQTBBZ0JpQUNRU2hzYWlJRUtBSVlCRUFnQkNBSklBUW9BaEFpQkNBRlNDSUhHeUVKSUFRZ0JTQUhHeUVGQ3lBQ1FRRnFJZ0lnQTAwTkFBc0NRQ0FKUlEwQUlBQW9BZ3dnQUNnQ0VDSUVRUVIwYWlJQ0lBa29BZ0EyQWdBZ0FpQUpLQUlrTmdJTUlBSWdDU2dDSERZQ0JDQUNJQWtvQWlBMkFnZ2dBQ0FFUVFGcU5nSVFJQWxCQURZQ0dDQUpLQUlVRFFBZ0FDQUJRUUZySWdFMkFpd0xJQUVnQTBzTkFBc01BUXNnQVNnQ0FDRUNJQUFvQWd3Z0FDZ0NFQ0lEUVFSMGFpSUJJQVUyQWd3Z0FTQUNOZ0lBSUFFZ0J6WUNDQ0FCSUFZMkFnUWdBQ0FEUVFGcU5nSVFJQUFvQWh3aEF3c2dBQ2dDQUNBRFFRRnFFQjBMQzhjRUFneC9BbjVCQnlFRkl3QkJFR3NpQ3lFTUEwQWdBU0FGU3dSQVFRQWdCV3NoQnlBRklRWURRQ0FBSUFaQktHeHFJZ0lvQWhnaERTQUNLUUlNSVE0Z0FpZ0NDQ0VJSUFJcEFnQWhEeUFDS0FJVUlRa2dEQ0FDS0FJa05nSUlJQXNnQWlrQ0hEY0RBQUpBSUFZaUFpQUZTUTBBSUFsRkJFQWdEVVVOQVFOQUlBQWdBa0VvYkdvaUJDQUhRU2hzYWlJREtBSVVEUUlnQXlnQ0dBMENJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBc01BUXNnQ1VFQmEwRUJUUVJBQTBBQ1FDQUFJQUpCS0d4cUlnUWdCMEVvYkdvaUF5Z0NGQ0lLUlEwQUlBcEJBV3RCQVVzTkFDQURLQUlJSUFoT0RRTUxJQVFnQUNBQ0lBVnJJZ0pCS0d4cUlnTXBBZ0EzQWdBZ0JDQURLUUlnTndJZ0lBUWdBeWtDR0RjQ0dDQUVJQU1wQWhBM0FoQWdCQ0FES1FJSU53SUlJQUlnQlU4TkFBd0NDd0FMQTBBZ0FDQUNRU2hzYWlJRUlBZEJLR3hxSWdNb0FoUWlDZ1JBSUFwQkFXdEJBa2tOQWlBREtBSUlJQWhNRFFJTElBUWdBQ0FDSUFWcklnSkJLR3hxSWdNcEFnQTNBZ0FnQkNBREtRSWdOd0lnSUFRZ0F5a0NHRGNDR0NBRUlBTXBBaEEzQWhBZ0JDQURLUUlJTndJSUlBSWdCVThOQUFzTElBQWdBa0VvYkdvaUFpQU5OZ0lZSUFJZ0NUWUNGQ0FDSUE0M0Fnd2dBaUFJTmdJSUlBSWdEemNDQUNBQ0lBc3BBd0EzQWh3Z0FpQU1LQUlJTmdJa0lBWkJBV29pQmlBQlJ3MEFDd3NnQlVFQlN5RUdJQVZCQVhZaEJTQUdEUUFMQzlZTEFRcC9RUUVoQndKQUlBQWdBUkFDRFFBZ0FTQUJLQUlBUVFGcUlnbzJBZ0FnQ2tFZ1N3MEFJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDQ0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQURBRUxJQVF0QUFBZ0FDZ0NDQ0lKUVJocUlnVjBJUUlnQXlBSmFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRa2dCRUVCYWlFRUlBTkJDR3NoQXlBSkRRQUxDeUFBSUFaQkJHb2lCVFlDRUNBQUlBVkJCM0VpQXpZQ0NDQUZJQWhMRFFBZ0FDQUFLQUlBSWdrZ0JVRURkbW9pQkRZQ0JDQUJJQUpCSEhZMkFnUUNRQ0FJSUFWcklndEJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQXRCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnVjBJUUlnQXlBTGFrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBVkJDR3NpQlhRZ0FuSWhBaUFEUVFoS0lRc2dCRUVCYWlFRUlBTkJDR3NoQXlBTERRQUxDeUFBSUFaQkIzRTJBZ2dnQUNBR1FRaHFJZ1UyQWhBZ0JTQUlTdzBBSUFBZ0NTQUZRUU4yYWlJRU5nSUVJQUVnQWtFY2RqWUNDQ0FLQkVCQkFDRUlBMEFnQUNBQklBaEJBblJxSWdVaUFrRU1haEFDQkVCQkFROExJQUlvQWd3aUJFRi9SZ1JBUVFFUEN5QUNJQVJCQVdvaUJEWUNEQ0FDSUFRZ0FTZ0NCRUVHYW5RMkFnd2dBQ0FGUVl3QmFoQUNEUUlnQlNnQ2pBRWlBa0YvUmcwQ0lBVWdBa0VCYWlJQ05nS01BU0FGSUFJZ0FTZ0NDRUVFYW5RMkFvd0JJQUFvQWdRaEJBSkFJQUFvQWd4QkEzUWlDU0FBS0FJUUlnWnJJZ05CSUU0RVFDQUVLQUFBSWdKQkdIUWdBa0VJZEVHQWdQd0hjWElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUVDSUFBb0FnZ2lBMFVOQVNBQ0lBTjBJQVF0QUFSQkNDQURhM1p5SVFJTUFRc2dBMEVCU0FSQVFRQWhBZ3dCQ3lBRUxRQUFJQUFvQWdnaUNrRVlhaUlIZENFQ0lBTWdDbXBCQ0dzaUEwRUJTQTBBQTBBZ0JDMEFBU0FIUVFocklnZDBJQUp5SVFJZ0EwRUlTaUVLSUFSQkFXb2hCQ0FEUVFocklRTWdDZzBBQ3d0QkFTRUhJQUFnQmtFQmFpSUVOZ0lRSUFBZ0JFRUhjVFlDQ0NBRUlBbExEUUlnQUNBQUtBSUFJZ2tnQkVFRGRtb2lCRFlDQkNBRklBSkJIM1kyQW93Q0lBaEJBV29pQ0NBQktBSUFTUTBBQ3lBQUtBSU1RUU4wSVFnZ0FDZ0NFQ0VGQ3dKQUlBZ2dCV3NpQTBFZ1RnUkFJQVFvQUFBaUFrRVlkQ0FDUVFoMFFZQ0EvQWR4Y2lBQ1FRaDJRWUQrQTNFZ0FrRVlkbkp5SVFJZ0FDZ0NDQ0lEUlEwQklBSWdBM1FnQkMwQUJFRUlJQU5yZG5JaEFnd0JDeUFEUVFGSUJFQkJBQ0VDREFFTElBUXRBQUFnQUNnQ0NDSUdRUmhxSWdkMElRSWdBeUFHYWtFSWF5SURRUUZJRFFBRFFDQUVMUUFCSUFkQkNHc2lCM1FnQW5JaEFpQURRUWhLSVFZZ0JFRUJhaUVFSUFOQkNHc2hBeUFHRFFBTEN5QUFJQVZCQldvaUJqWUNFQ0FBSUFaQkIzRWlBellDQ0VFQklRY2dCaUFJU3cwQUlBQWdDU0FHUVFOMmFpSUVOZ0lFSUFFZ0FrRWJka0VCYWpZQ2pBTUNRQ0FJSUFacklnWkJJRTRFUUNBRUtBQUFJZ0pCR0hRZ0FrRUlkRUdBZ1B3SGNYSWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpRUNJQU5GRFFFZ0FpQURkQ0FFTFFBRVFRZ2dBMnQyY2lFQ0RBRUxJQVpCQVVnRVFFRUFJUUlNQVFzZ0JDMEFBQ0FEUVJoeUlnZDBJUUlnQXlBR2FrRUlheUlEUVFGSURRQURRQ0FFTFFBQklBZEJDR3NpQjNRZ0FuSWhBaUFEUVFoS0lRWWdCRUVCYWlFRUlBTkJDR3NoQXlBR0RRQUxDeUFBSUFWQkNtb2lCRFlDRUNBQUlBUkJCM0UyQWdoQkFTRUhJQVFnQ0VzTkFDQUFJQWtnQkVFRGRtbzJBZ1FnQVNBQ1FSdDJRUUZxTmdLUUF5QUFRUVVRRkNJQ1FYOUdEUUFnQVNBQ1FRRnFOZ0tVQXlBQVFRVVFGQ0lBUVg5R0RRQWdBU0FBTmdLWUEwRUFJUWNMSUFjTHFBd0JDbjhDUUNBQlFRUlBCRUJCQUNBRGF5SU1RUUYwSVFzQ1FDQUNLQUlFSWdFZ0FDQURheUlHTFFBQUlnY2dBQzBBQUNJSWF5SUtJQXBCSDNVaUNtb2dDbk5ORFFBZ0FpZ0NDQ0lGSUFBZ0Myb3RBQUFpQ2lBSGF5SUpJQWxCSDNVaUNXb2dDWE5ORFFBZ0JTQUFJQU5xTFFBQUlnVWdDR3NpQ1NBSlFSOTFJZ2xxSUFselRRMEFJQVlnQlNBSGFpQUtRUUYwYWtFQ2FrRUNkam9BQUNBQUlBZ2dCVUVCZEdvZ0NtcEJBbXBCQW5ZNkFBQWdBaWdDQkNFQkN3SkFJQUJCQVdvaUJ5QU1haUlKTFFBQUlnZ2dBQzBBQVNJS2F5SUZJQVZCSDNVaUJXb2dCWE1nQVU4TkFDQUNLQUlJSWdZZ0J5QUxhaTBBQUNJRklBaHJJZ1FnQkVFZmRTSUVhaUFFYzAwTkFDQUdJQU1nQjJvdEFBQWlCaUFLYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQ1NBR0lBaHFJQVZCQVhScVFRSnFRUUoyT2dBQUlBY2dDaUFHUVFGMGFpQUZha0VDYWtFQ2Rqb0FBQ0FDS0FJRUlRRUxBa0FnQUVFQ2FpSUhJQXhxSWdrdEFBQWlDQ0FBTFFBQ0lncHJJZ1VnQlVFZmRTSUZhaUFGY3lBQlR3MEFJQUlvQWdnaUJpQUhJQXRxTFFBQUlnVWdDR3NpQkNBRVFSOTFJZ1JxSUFSelRRMEFJQVlnQXlBSGFpMEFBQ0lHSUFwcklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBSklBWWdDR29nQlVFQmRHcEJBbXBCQW5ZNkFBQWdCeUFLSUFaQkFYUnFJQVZxUVFKcVFRSjJPZ0FBSUFJb0FnUWhBUXNDUUNBQVFRTnFJZ2NnREdvaUNTMEFBQ0lJSUFBdEFBTWlDbXNpQlNBRlFSOTFJZ1ZxSUFWeklBRlBEUUFnQWlnQ0NDSUdJQWNnQzJvdEFBQWlCU0FJYXlJRUlBUkJIM1VpQkdvZ0JITk5EUUFnQmlBRElBZHFMUUFBSWdZZ0Ntc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBa2dCaUFJYWlBRlFRRjBha0VDYWtFQ2Rqb0FBQ0FISUFvZ0JrRUJkR29nQldwQkFtcEJBblk2QUFBZ0FpZ0NCQ0VCQ3dKQUlBQkJCR29pQnlBTWFpSUpMUUFBSWdnZ0FDMEFCQ0lLYXlJRklBVkJIM1VpQldvZ0JYTWdBVThOQUNBQ0tBSUlJZ1lnQnlBTGFpMEFBQ0lGSUFocklnUWdCRUVmZFNJRWFpQUVjMDBOQUNBR0lBTWdCMm90QUFBaUJpQUtheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdDU0FHSUFocUlBVkJBWFJxUVFKcVFRSjJPZ0FBSUFjZ0NpQUdRUUYwYWlBRmFrRUNha0VDZGpvQUFDQUNLQUlFSVFFTEFrQWdBRUVGYWlJSElBeHFJZ2t0QUFBaUNDQUFMUUFGSWdwcklnVWdCVUVmZFNJRmFpQUZjeUFCVHcwQUlBSW9BZ2dpQmlBSElBdHFMUUFBSWdVZ0NHc2lCQ0FFUVI5MUlnUnFJQVJ6VFEwQUlBWWdBeUFIYWkwQUFDSUdJQXBySWdRZ0JFRWZkU0lFYWlBRWMwME5BQ0FKSUFZZ0NHb2dCVUVCZEdwQkFtcEJBblk2QUFBZ0J5QUtJQVpCQVhScUlBVnFRUUpxUVFKMk9nQUFJQUlvQWdRaEFRc0NRQ0FBUVFacUlnY2dER29pQ1MwQUFDSUlJQUF0QUFZaUNtc2lCU0FGUVI5MUlnVnFJQVZ6SUFGUERRQWdBaWdDQ0NJR0lBY2dDMm90QUFBaUJTQUlheUlFSUFSQkgzVWlCR29nQkhOTkRRQWdCaUFESUFkcUxRQUFJZ1lnQ21zaUJDQUVRUjkxSWdScUlBUnpUUTBBSUFrZ0JpQUlhaUFGUVFGMGFrRUNha0VDZGpvQUFDQUhJQW9nQmtFQmRHb2dCV3BCQW1wQkFuWTZBQUFnQWlnQ0JDRUJDeUFCSUFCQkIyb2lBU0FNYWlJSExRQUFJZ3dnQUMwQUJ5SUFheUlJSUFoQkgzVWlDR29nQ0hOTkRRRWdBaWdDQ0NJSUlBRWdDMm90QUFBaUFpQU1heUlMSUF0QkgzVWlDMm9nQzNOTkRRRWdBU0FEYWkwQUFDSURJQUJySWdzZ0MwRWZkU0lMYWlBTGN5QUlUdzBCSUFjZ0F5QU1haUFDUVFGMGFrRUNha0VDZGpvQUFDQUJJQUFnQTBFQmRHb2dBbXBCQW1wQkFuWTZBQUFQQzBFQUlBTnJJZ3BCQVhRaEJTQUJJQUlvQWdCcVFRRnJMUUFBSWdGQmYzTWhCeUFCUVFGcUlRaEJDQ0VCQTBBQ1FDQUNLQUlFSUFBZ0Ntb2lCaTBBQUNJTElBQXRBQUFpREdzaUNTQUpRUjkxSWdscUlBbHpUUTBBSUFJb0FnZ2lDU0FBSUFWcUxRQUFJZ1FnQzJzaURTQU5RUjkxSWcxcUlBMXpUUTBBSUFrZ0FDQURhaTBBQUNJSklBeHJJZzBnRFVFZmRTSU5haUFOYzAwTkFDQUdJQXNnQnlBSUlBd2dDMnRCQW5RZ0NXc2dCR3BCQkdwQkEzVWlDeUFJSUF0SUd5QUhJQXRLR3lJTGFrSEFOV290QUFBNkFBQWdBQ0FNSUF0clFjQTFhaTBBQURvQUFBc2dBRUVCYWlFQUlBRkJBV3NpQVEwQUN3c0xCZ0FnQUJBRUN3Y0FRY1FhRUFnTHlBTUJBMzhEUUNBQUlBSkJBblJxSWdGQkZHb29BZ0FpQXdSQUlBTW9BaWdRQkNBQktBSVVRUUEyQWlnZ0FTZ0NGQ2dDVkJBRUlBRW9BaFJCQURZQ1ZDQUJLQUlVRUFRZ0FVRUFOZ0lVQ3lBQ1FRRnFJZ0pCSUVjTkFBdEJBQ0VDQTBBZ0FDQUNRUUowYWlJQlFaUUJhaWdDQUNJREJFQWdBeWdDRkJBRUlBRW9BcFFCUVFBMkFoUWdBU2dDbEFFb0FoZ1FCQ0FCS0FLVUFVRUFOZ0lZSUFFb0FwUUJLQUljRUFRZ0FTZ0NsQUZCQURZQ0hDQUJLQUtVQVNnQ0xCQUVJQUVvQXBRQlFRQTJBaXdnQVNnQ2xBRVFCQ0FCUVFBMkFwUUJDeUFDUVFGcUlnSkJnQUpIRFFBTElBQW9BckFhRUFSQkFDRUNJQUJCQURZQ3NCb2dBQ2dDdkFrUUJDQUFRUUEyQXJ3SklBQW9BcFFKRUFRZ0FFRUFOZ0tVQ1NBQUtBSzhHaUlEQkVBZ0F4QUVJQUJCQURZQ3ZCb0xBa0FnQUNnQ3hBa2lBMFVOQUNBQVFlQUphaWdDQUVGL1JnUkFJQU1oQWd3QkMwRUFJUUVnQXlFQ0EwQWdBaUFCUVNoc0lnTnFLQUlFRUFRZ0FDZ0N4QWtpQWlBRGFrRUFOZ0lFSUFGQkFXb2lBU0FBS0FMZ0NVRUJha2tOQUFzTElBSVFCQ0FBUVFBMkFzUUpJQUJCeUFscUlnTW9BZ0FRQkNBRFFRQTJBZ0FnQUVIUUNXb2lBQ2dDQUJBRUlBQkJBRFlDQUF2TjN3UUNhSDhDZmlNQVFmQUJheUlMSkFBZ0FFSHNER29oVkNBQVFiUVNhaUZWSUFCQjJBcHFJVllnQUVIRUNXb2hPQ0FBUWJnS2FpRXJJQUJCbkJwcUlUd2dDMEcwQVdvaFZ5QUxRYkFCYWlGWUlBdEJyQUZxSVZrZ0MwR29BV29oV2lBTFFaUUJhaUZiSUF0QmpBRnFJVndnQzBId0FHb2hYU0FMUVRCcUlWNGdDMEVnYWtFRWNpRmZBMEFnQVNBeWFpRUJJQUlnTW1zaEFnSkFBa0FDUUFKQUlBQW9BcEFhUlEwQUlBQW9BcFFhSUFGSERRQWdDeUE4S0FJUU5nSVlJQXNnUENrQ0NEY0RFQ0E4S1FJQUlXNUJBQ0VLSUF0QkFEWUNHQ0FMUVFBMkFoQWdDeUJ1TndNSUlBc2diajRDRENBQUtBS1lHaUV5SUFzb0FoUWhCZ3dCQ3dKQUFrQWdBa0VFU1EwQUlBRXRBQUFOQUNBQkxRQUJEUUFnQVMwQUFpSU5RUUZMRFFCQkF5RUhJQUZCQTJvaENVRUNJVElEUUNBSklRWUNRQ0FOUWY4QmNTSUlSUVJBSURKQkFXb2hNZ3dCQzBFQUlRa2dDRUVCUndSQVFRQWhNZ3dCQ3lBeVFRRkxJUWhCQUNFeUlBaEZEUUFnQnlFeVFRQWhHRUVBSVJJRFFFRUJJQmdnQ1NBR0xRQUFJZ3BGYWlJSVFRSkdHeUFZSUFwQkEwWWJJUmdDUUNBS1FRRkhEUUFnQ0VFQ1NRMEFJQXNnTWlBSElBaHFheUlHTmdJVVFRQWdDRUVEYXlJSklBZ2dDVWtiSVFrTUJRdEJBQ0FJSUFvYklRbEJBU0FTSUFoQkFrc2JJQklnQ2hzaEVpQUdRUUZxSVFZZ01rRUJhaUl5SUFKSERRQUxJQXNnQWlBSElBbHFheUlHTmdJVURBTUxJQVpCQVdvaENTQUdMUUFBSVExQkF5RU1RUUFoQ2lBSFFRRnFJZ2NnQWtjTkFBc2dBaUV5REFRTElBc2dBallDRkVFQklSaEJBQ0VISUFJaEJrRUFJUWxCQUNFU0MwRUFJUW9nQzBFQU5nSVlJQXRCQURZQ0VDQUxJQUVnQjJvaURUWUNEQ0FMSUEwMkFnZ2dCeUFKYWlBR2FpRXlRUU1oRENBU0RRSWdHQVJBSUEwaEJ5QUxJQVlFZndOQUlBWkJBV3NoQmlBSExRQUFJUWdDZnlBS1FRSkdCRUFnQ0VFRFJnUkFJQVpGQkVCQkFDRUtEQWtMUVFBaUNpQUhMUUFCUVFOTkRRSWFEQWdMSUFoQkEwa05CZ3NnRFNBSU9nQUFJQTFCQVdvaERVRUFJQXBCQVdvZ0NCc0xJUW9nQjBFQmFpRUhJQVlOQUFzZ0N5Z0NHQ0VLSUFzb0FoUUZRUUFMSUEwZ0IydHFJZ1kyQWhRTElEd2dDeWtEQ0RjQ0FDQThJQXNvQWhnMkFoQWdQQ0FMS1FNUU53SUlJQUFnQVRZQ2xCb2dBQ0F5TmdLWUdnc2dBRUVBTmdLUUdnSkFJQVpCQTNRaUdDQUtheUlHUVFGclFSNUxEUUFnQmlBTEtBSVFha0VJYXlJR1FRRklEUUFEUUNBR1FRaEtJUWNnQmtFSWF5RUdJQWNOQUFzTElBc2dDa0VCYWlJSE5nSVlJQXNnQjBFSGNTSUlOZ0lRSUFjZ0dFc0VRRUVESVF4QkFDRUtEQUlMSUFzZ0N5Z0NDQ0lPSUFkQkEzWnFJZ1kyQWd3Q1FDQVlJQWRySWcxQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSklBaEZEUUVnQ1NBSWRDQUdMUUFFUVFnZ0NHdDJjaUVKREFFTElBMUJBVWdFUUVFQUlRa01BUXNnQmkwQUFDQUlRUmh5SWd4MElRa2dCaUVISUFnZ0RXcEJDR3NpRFVFQlNBMEFBMEFnQnkwQUFTQU1RUWhySWd4MElBbHlJUWtnRFVFSVNpRUlJQWRCQVdvaEJ5QU5RUWhySVEwZ0NBMEFDd3NnQ3lBS1FRTnFJZ2cyQWhnZ0N5QUlRUWR4SWdjMkFoQkJmeUVTSUFnZ0dFMEVRQ0FMSUE0Z0NFRURkbW9pQmpZQ0RDQUpRUjUySVJJTEFrQWdHQ0FJYXlJSVFTQk9CRUFnQmlnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERTQUhSUTBCSUEwZ0IzUWdCaTBBQkVFSUlBZHJkbkloRFF3QkN5QUlRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdCMEVZY2lJSmRDRU5JQWNnQ0dwQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBSlFRaHJJZ2wwSUExeUlRMGdCMEVJU2lFSUlBWkJBV29oQmlBSFFRaHJJUWNnQ0EwQUN3c2dDeUFLUVFkeE5nSVFJQXNnQ2tFSWFpSUdOZ0lZUVFBaENpQUdJQmhMQkVCQkFDRU1EQUlMSUFzZ0RpQUdRUU4yYWpZQ0RDQU5RUnQySWhwQkFtdEJBMGtFUUVFRElRd01BZ3NDUUNBYVFReExEUUJCQVNBYWRDSUdRY0E4Y1VVRVFDQUdRYUFEY1VVTkFTQVNSUVJBUVFNaERBd0VDeUFhUVFaSERRRkJBeUVNREFNTElCSkZEUUJCQXlFTURBSUxJQnBCQVdzaUUwRUxTd1JBUVFBaERBd0NDd0pBSUJwQkVrc05BQUpBQWtCQkFTQWFkQ0lHUWNEZkgzRkZCRUFnQmtFaWNVVU5BeUFBS0FLMENnUi9JQUJCQURZQ3RBcEJBUVZCQUFzaENpQUxJQXNvQWhnMkF1QUJJQXNnQ3lrRENEY0QwQUVnQ3lBTFFSQnFJaGdwQXdBM0E5Z0JJQXRCMEFGcUlBdEI3QUZxRUFJaUJnMEJJQXRCMEFGcUlBdEI3QUZxRUFJTkJDQUxRZEFCYWlBTFFld0JhaEFDRFFRZ0N5Z0M3QUVpQmtIL0FVc05CQ0FBSUFaQkFuUnFLQUtVQVNJTlJRMENJQUFnRFNnQ0JDSUdRUUowYWlnQ0ZDSUhSUTBDQWtBZ0FDZ0NDQ0lJUVNCR0RRQWdCaUFJUmcwQUlCcEJCVWNOQXdzZ0NpQUtRUUVnRWh0QkFTQUFLQUtZQ2lJR0d5QUdJQkpHR3lFS0FrQUNRQ0FBS0FLVUNrRUZSZ1JBSUJwQkJVY05BUXdDQ3lBYVFRVkhEUUVMUVFFaENnc2dCeWdDRENFR0lBc2dDeWdDR0RZQzRBRWdDeUFZS1FNQU53UFlBU0FMSUFzcEF3ZzNBOUFCSUF0QjBBRnFJQXRCN0FGcUVBSU5CQ0FMUWRBQmFpQUxRZXdCYWhBQ0RRUWdDMEhRQVdvZ0MwSHNBV29RQWcwRVFSOGdCbWNpQ1dzaEp5QUxLQUxVQVNFT0FrQWdDeWdDM0FGQkEzUWlEQ0FMS0FMZ0FTSVVheUlHUVNCT0JFQWdEaWdBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloRHlBTEtBTFlBU0lHUlEwQklBOGdCblFnRGkwQUJFRUlJQVpyZG5JaER3d0JDeUFHUVFGSUJFQkJBQ0VQREFFTElBNHRBQUFnQ3lnQzJBRWlFVUVZYWlJSWRDRVBJQVlnRVdwQkNHc2lFVUVCU0EwQUEwQWdEaTBBQVNBSVFRaHJJZ2gwSUE5eUlROGdFVUVJU2lFR0lBNUJBV29oRGlBUlFRaHJJUkVnQmcwQUN3c2dGQ0FuYWlBTVN3MEVJQThnQ1VFQmFuWWlCa0YvUmcwRUlBWWdBQ2dDbkFwSEJFQWdBQ0FHTmdLY0NrRUJJUW9MSUJwQkJVY2lGRVVFUUNBSEtBSU1JUVlnQ3lBTEtBSVlOZ0xnQVNBTElCZ3BBd0EzQTlnQklBc2dDeWtEQ0RjRDBBRWdDMEhRQVdvZ0MwSHNBV29RQWcwRklBdEIwQUZxSUF0QjdBRnFFQUlOQlNBTFFkQUJhaUFMUWV3QmFoQUNEUVZCSHlBR1p5SU1heUVPSUFzb0F0UUJJUkVDUUNBTEtBTGNBVUVEZENJY0lBc29BdUFCSWhkcklnbEJJRTRFUUNBUktBQUFJZ1pCR0hRZ0JrRUlkRUdBZ1B3SGNYSWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpRUlJQXNvQXRnQklnWkZEUUVnQ0NBR2RDQVJMUUFFUVFnZ0JtdDJjaUVJREFFTElBbEJBVWdFUUVFQUlRZ01BUXNnRVMwQUFDQUxLQUxZQVNJblFSaHFJZ1owSVFnZ0NTQW5ha0VJYXlJUFFRRklEUUFEUUNBUkxRQUJJQVpCQ0dzaUJuUWdDSEloQ0NBUFFRaEtJU2NnRVVFQmFpRVJJQTlCQ0dzaER5QW5EUUFMQ3lBTElBNGdGMm9pQmpZQzRBRWdDeUFHUVFkeE5nTFlBU0FHSUJ4TERRVWdDeUFMS0FMUUFTQUdRUU4yYWpZQzFBRWdDQ0FNUVFGcWRrRi9SZzBGSUF0QjBBRnFJQXRCeUFGcUVBSU5CUUpBSUFBb0FwUUtRUVZIQkVBZ0N5Z0N5QUVoRVF3QkN5QUtRUUVnQ3lnQ3lBRWlFU0FBS0FLZ0NrWWJJUW9MSUFBZ0VUWUNvQW9MQWtBQ1FBSkFJQWNvQWhBT0FnQUJBZ3NnQ3lBTEtBSVlOZ0xnQVNBTElBc3BBd2czQTlBQklBc2dHQ2tEQURjRDJBRWdDMEhRQVdvZ0MwSHNBV29RQWcwR0lBdEIwQUZxSUF0QjdBRnFFQUlOQmlBTFFkQUJhaUFMUWV3QmFoQUNEUVpCSHlBSEtBSU1aeUlNYXlFY0lBc29BdFFCSVJFQ1FDQUxLQUxjQVVFRGRDSU9JQXNvQXVBQkloZHJJZ2xCSUU0RVFDQVJLQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVJSUFzb0F0Z0JJZ1pGRFFFZ0NDQUdkQ0FSTFFBRVFRZ2dCbXQyY2lFSURBRUxJQWxCQVVnRVFFRUFJUWdNQVFzZ0VTMEFBQ0FMS0FMWUFTSW5RUmhxSWdaMElRZ2dDU0FuYWtFSWF5SVBRUUZJRFFBRFFDQVJMUUFCSUFaQkNHc2lCblFnQ0hJaENDQVBRUWhLSVNjZ0VVRUJhaUVSSUE5QkNHc2hEeUFuRFFBTEN5QUxJQmNnSEdvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBNUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFpSVJOZ0xVQVNBSUlBeEJBV3AyUVg5R0RRWWdGRVVFUUNBTFFkQUJhaUFMUWV3QmFoQUNEUWNnQ3lnQzFBRWhFU0FMS0FMY0FVRURkQ0VPSUFzb0F1QUJJUVlMUVI4Z0J5Z0NGR2NpREdzaEhBSkFJQTRnQm1zaUNVRWdUZ1JBSUJFb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRZ2dDeWdDMkFFaUNVVU5BU0FJSUFsMElCRXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFSTFFBQUlBc29BdGdCSWc5QkdHb2lKM1FoQ0NBSklBOXFRUWhySWc5QkFVZ05BQU5BSUJFdEFBRWdKMEVJYXlJbmRDQUljaUVJSUE5QkNFb2hDU0FSUVFGcUlSRWdEMEVJYXlFUElBa05BQXNMSUFZZ0hHb2dEa3NOQmlBSUlBeEJBV3AySWdaQmYwWU5CaUFHSUFBb0FxUUtSd1JBSUFBZ0JqWUNwQXBCQVNFS0N5QU5LQUlJUlEwQklBc2dDeWdDR0RZQzRBRWdDeUFMS1FNSU53UFFBU0FMSUJncEF3QTNBOWdCSUF0QjBBRnFJQXRCekFGcUVBSU5CaUFMUWRBQmFpQUxRY3dCYWhBQ0RRWWdDMEhRQVdvZ0MwSE1BV29RQWcwR1FSOGdCeWdDREdjaUoyc2hDQ0FMS0FMVUFTRU5Ba0FnQ3lnQzNBRkJBM1FpRHlBTEtBTGdBU0lPYXlJR1FTQk9CRUFnRFNnQUFDSUdRUmgwSUFaQkNIUkJnSUQ4QjNGeUlBWkJDSFpCZ1A0RGNTQUdRUmgyY25JaERDQUxLQUxZQVNJR1JRMEJJQXdnQm5RZ0RTMEFCRUVJSUFacmRuSWhEQXdCQ3lBR1FRRklCRUJCQUNFTURBRUxJQTB0QUFBZ0N5Z0MyQUVpQ1VFWWFpSVlkQ0VNSUFZZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnRFMwQUFTQVlRUWhySWhoMElBeHlJUXdnQ1VFSVNpRUdJQTFCQVdvaERTQUpRUWhySVFrZ0JnMEFDd3NnQ3lBSUlBNXFJaGcyQXVBQklBc2dHRUVIY1RZQzJBRWdEeUFZU1EwR0lBc2dDeWdDMEFFZ0dFRURkbW9pRFRZQzFBRWdEQ0FuUVFGcWRrRi9SZzBHSUJSRkJFQWdDMEhRQVdvZ0MwSE1BV29RQWcwSElBc29BdHdCUVFOMElROGdDeWdDNEFFaEdDQUxLQUxVQVNFTkMwRWZJQWNvQWhSbklnZHJJUWdDUUNBUElCaHJJZ1pCSUU0RVFDQU5LQUFBSWdaQkdIUWdCa0VJZEVHQWdQd0hjWElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUVNSUFzb0F0Z0JJZ1pGRFFFZ0RDQUdkQ0FOTFFBRVFRZ2dCbXQyY2lFTURBRUxJQVpCQVVnRVFFRUFJUXdNQVFzZ0RTMEFBQ0FMS0FMWUFTSUpRUmhxSWc1MElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQU5MUUFCSUE1QkNHc2lEblFnREhJaERDQUpRUWhLSVFZZ0RVRUJhaUVOSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnR0dvaUJqWUM0QUVnQ3lBR1FRZHhOZ0xZQVNBR0lBOUxEUVlnQ3lBTEtBTFFBU0FHUVFOMmFqWUMxQUVnRENBSFFRRnFka0YvUmcwR0lBdEJBRFlDN0FFZ0MwSFFBV29nQzBIc0FXb1FBaUVHQWtBZ0N5Z0M3QUVpQjBGL1JnUkFRWUNBZ0lCNElRa2dCa1VOQ0F3QkN5QUdEUWNnQjBFQmFrRUJkaUlHUVFBZ0Jtc2dCMEVCY1JzaENRc2dBQ2dDcUFvZ0NVWU5BU0FBSUFrMkFxZ0tRUUVoQ2d3QkN5QUhLQUlZRFFBZ0RTZ0NDQ0VPSUFzZ0N5Z0NHRFlDNEFFZ0N5QVlLUU1BTndQWUFTQUxJQXNwQXdnM0E5QUJJQXRCMEFGcUlBdEJ6QUZxRUFJTkJTQUxRZEFCYWlBTFFjd0JhaEFDRFFVZ0MwSFFBV29nQzBITUFXb1FBZzBGUVI4Z0J5Z0NER2NpQjJzaEVTQUxLQUxVQVNFSkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSW5heUlHUVNCT0JFQWdDU2dBQUNJR1FSaDBJQVpCQ0hSQmdJRDhCM0Z5SUFaQkNIWkJnUDREY1NBR1FSaDJjbkloR0NBTEtBTFlBU0lHUlEwQklCZ2dCblFnQ1MwQUJFRUlJQVpyZG5JaEdBd0JDeUFHUVFGSUJFQkJBQ0VZREFFTElBa3RBQUFnQ3lnQzJBRWlERUVZYWlJSWRDRVlJQVlnREdwQkNHc2lERUVCU0EwQUEwQWdDUzBBQVNBSVFRaHJJZ2gwSUJoeUlSZ2dERUVJU2lFR0lBbEJBV29oQ1NBTVFRaHJJUXdnQmcwQUN3c2dDeUFSSUNkcUlnWTJBdUFCSUFzZ0JrRUhjVFlDMkFFZ0JpQVBTdzBGSUFzZ0N5Z0MwQUVnQmtFRGRtbzJBdFFCSUJnZ0IwRUJhblpCZjBZTkJTQVVSUVJBSUF0QjBBRnFJQXRCekFGcUVBSU5CZ3NnQzBFQU5nTHNBU0FMUWRBQmFpQUxRZXdCYWhBQ0lRWUNRQ0FMS0FMc0FTSUhRWDlHQkVCQmdJQ0FnSGdoRENBR1JRMEhEQUVMSUFZTkJpQUhRUUZxUVFGMklnWkJBQ0FHYXlBSFFRRnhHeUVNQ3dKQUlBNUZCRUFnWUNFSkRBRUxJQXRCQURZQzdBRWdDMEhRQVdvZ0MwSHNBV29RQWlFWUlBc29BdXdCSWdaQmYwWUVRRUdBZ0lDQWVDRUpJQmhGRFFjTUFRc2dHQTBHSUFaQkFXcEJBWFlpR0VFQUlCaHJJQVpCQVhFYklRa0xJQXdnQUNnQ3JBcEhCRUFnQUNBTU5nS3NDa0VCSVFvTEFrQWdEU2dDQ0VVTkFDQUFLQUt3Q2lBSlJnMEFJQUFnQ1RZQ3NBcEJBU0VLQ3lBSklXQUxJQUFnR3EwZ0VxMUNJSWFFTndLVUNnd0RDMEVCSVFvTUFnc2dCa1VOQVNBR1FmRC9BMGNOQWd0QkJDRU1RUUFoQ2d3Q0N3SkFJQW9FUUFKQUlBQW9BcUFKUlEwQUlBQW9BaEJGRFFCQkFDRUtJQUFvQXJRYUJFQkJBeUVNREFVTEFrQWdBQ2dDcEFsRkJFQWdBQ0FBS0FMRUNTSUhJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tJQUFvQXV3SklnaEZCRUJCQUNFSkRBSUxJQWhCQTNFaENrRUFJUWxCQUNFR0FrQWdDRUVCYTBFRFNRMEFJQWhCZkhFaERRTkFJQUFvQXNnSklBWkJBblJxSUFjZ0JrRW9iR28yQWdBZ0FDZ0N5QWtnQmtFQmNpSUhRUUowYWlBQUtBTEVDU0FIUVNoc2FqWUNBQ0FBS0FMSUNTQUdRUUp5SWdkQkFuUnFJQUFvQXNRSklBZEJLR3hxTmdJQUlBQW9Bc2dKSUFaQkEzSWlCMEVDZEdvZ0FDZ0N4QWtnQjBFb2JHbzJBZ0FnQmtFRWFpRUdJQTFCQkdzaURVVU5BU0E0S0FJQUlRY01BQXNBQ3lBS1JRMEJBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3dCQ3lBQUtBTGNDaUVKQzBFQUlRZEJBQ0VNUVFBaERRSkFBa0FDUUNBSkRnWUJBQUFBQUFFQUN5QUFLQUs0R2cwQURBRUxJQUJCeUFscUtBSUFJUWdEUUFKL1FRQWdDQ0FIUVFKMGFpZ0NBQ0lHUlEwQUdrRUFJQVlvQWhSQkFra05BQm9nQmlnQ0FBc2hEQ0FIUVE1TERRRWdCMEVCYWlFSElBeEZEUUFMQ3lBcktBSUlJUkVnS3lnQ0JDRU9Ba0FDUUFKQUlBQW9BcGdKSWdoRkJFQkJBQ0VHUVFBaEJ3d0JDeUFBS0FLOENTRUtRUUFoQjBFQUlRWURRQ0FLSUFkQjJBRnNhaWdDeEFFTkFVRUFJQVpCQVdvaUJpQUdJQTVHSWhJYklRWWdEU0FTYWlFTklBZEJBV29pQnlBSVJ3MEFDd3dCQ3lBSElBaEdEUUFnQUNnQ3ZBa2dEU0FPYkVIWUFXeHFJUWdnQmdSQUlBWWhCd05BSUFnZ0IwRUJheUlIUWRnQmJHb2lDaUFySUEwZ0J5QUpJQXdRRFNBS1FRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWNOQUFzTElBNGdCa0VCYWlJSFN3UkFBMEFnQ0NBSFFkZ0JiR29pQmlnQ3hBRkZCRUFnQmlBcklBMGdCeUFKSUF3UURTQUdRUUUyQXNRQklBQWdBQ2dDdEFsQkFXbzJBclFKQ3lBSFFRRnFJZ2NnRGtjTkFBc0xJQTBFUUNBT1JRMENJQTFCQW1zaENrRUFJUkpCQUNBT2F5RVVJQTFCQVdzaUR5QU9iRUhZQVd3aEV3TkFJQUFvQXJ3SklCTnFJQkpCMkFGc2FpSUdJQ3NnRHlBU0lBa2dEQkFOSUFaQkFUWUN4QUVnQUNBQUtBSzBDVUVCYWpZQ3RBa0NRQ0FQUlEwQUlBWWdGRUhZQVd3aUdtb2lDQ0FySUFvZ0VpQUpJQXdRRFNBS0lRY0RRQ0FHSUJwcVFRRTJBc1FCSUFBZ0FDZ0N0QWxCQVdvMkFyUUpJQWRGRFFFZ0NDSUdJQnBxSWdnZ0t5QUhRUUZySWdjZ0VpQUpJQXdRRFF3QUN3QUxJQkpCQVdvaUVpQU9SdzBBQ3dzZ0RVRUJhaUlHSUJGUERRRWdEa1VOQVFOQUlBQW9BcndKSUFZZ0RteEIyQUZzYWlFS1FRQWhCd05BSUFvZ0IwSFlBV3hxSWdnb0FzUUJSUVJBSUFnZ0t5QUdJQWNnQ1NBTUVBMGdDRUVCTmdMRUFTQUFJQUFvQXJRSlFRRnFOZ0swQ1FzZ0IwRUJhaUlISUE1SERRQUxJQVpCQVdvaUJpQVJSdzBBQ3d3QkN3SkFBa0FDUUFKQUFrQWdDVUVDYXc0R0FBRUJBUUVBQVFzZ0FDZ0N1QnBGRFFFTElBd05BUXNnS3lnQ0FFR0FBU0FPSUJGc1FZQURiQkFER2d3QkN5QXJLQUlBSUF3Z0RpQVJiRUdBQTJ3UUJ4b0xJQUFnQUNnQ21Ba2lDVFlDdEFrZ0NVVU5BQ0FKUVFkeElRWWdBQ2dDdkFraENFRUFJUWNnQ1VFQmEwRUhUd1JBSUFsQmVIRWhEQU5BSUFnZ0IwSFlBV3hxUVFFMkFnZ2dDQ0FIUVFGeVFkZ0JiR3BCQVRZQ0NDQUlJQWRCQW5KQjJBRnNha0VCTmdJSUlBZ2dCMEVEY2tIWUFXeHFRUUUyQWdnZ0NDQUhRUVJ5UWRnQmJHcEJBVFlDQ0NBSUlBZEJCWEpCMkFGc2FrRUJOZ0lJSUFnZ0IwRUdja0hZQVd4cVFRRTJBZ2dnQ0NBSFFRZHlRZGdCYkdwQkFUWUNDQ0FIUVFocUlRY2dERUVJYXlJTURRQUxDeUFHUlEwQUEwQWdDQ0FIUWRnQmJHcEJBVFlDQ0NBSFFRRnFJUWNnQmtFQmF5SUdEUUFMQ3lBQVFRRTJBcEFhUVFBaEJrRUFJVElNQWdzZ0FFRUFOZ0tjQ1NBQVFRQTJBcVFKQzBFQUlRcEJBQ0VNQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJNT0NBSUxDd3NDQ3dBQkN3c2dDMEhvQUdwQkFFSGNBQkFER2lBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWdnZ0N5Z0NHQ0lKYXlJS1FTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdwRkRRRWdCeUFLZENBR0xRQUVRUWdnQ210MmNpRUhEQUVMSUFwQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ3hCR0dvaURYUWhCeUFLSUF4cVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaERDQUdRUUZxSVFZZ0NrRUlheUVLSUF3TkFBc0xJQXNnQ1VFSGNTSU1OZ0lRSUFzZ0NVRUlhaUlHTmdJWUlBWWdDRXNOQnlBTElBZEJHSFkyQW1nZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0NVRUphaUlHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3lBTElBbEJDbW9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTkJFQWdDeUFPSUFaQkEzWnFOZ0lNQ3dKQUlBZ2dCbXNpQmtFQmEwRWVTdzBBSUFZZ0IycEJDR3NpQmtFQlNBMEFBMEFnQmtFSVNpRUhJQVpCQ0dzaEJpQUhEUUFMQ3lBTElBbEJDMm9pQmpZQ0dDQUxJQVpCQjNFaUJ6WUNFQ0FHSUFoTERRY2dDeUFPSUFaQkEzWnFOZ0lNQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSGFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0REWUNFQ0FMSUFsQkVHb2lCellDR0NBSElBaExEUWNnQ3lBT0lBZEJBM1pxSWdZMkFnd0NRQ0FJSUFkcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lSSWdCa0VCYWlFR0lBcEJDR3NoQ2lBU0RRQUxDeUFMSUF3MkFoQWdDeUFKUVJocUlnWTJBaGdnQmlBSVN3MEhJQXNnQjBFWWRqWUNiQ0FMSUE0Z0JrRURkbW8yQWd3Z0MwRUlhaUJkRUFJTkJ5QUxLQUp3UVI5TERRY2dDMEVJYWlBTFFld0JhaEFDRFFjZ0N5Z0M3QUVpQmtFTVN3MEhJQXRCQVNBR1FRUnFkRFlDZENBTFFRaHFJQXRCN0FGcUVBSU5CeUFMS0FMc0FTSUdRUUpMRFFjZ0N5QUdOZ0o0QWtBQ1FBSkFJQVlPQWdBQkFnc2dDMEVJYWlBTFFld0JhaEFDRFFrZ0N5Z0M3QUVpQmtFTVN3MEpJQXRCQVNBR1FRUnFkRFlDZkF3QkN5QUxLQUlNSVFZQ1FDQUxLQUlVUVFOMElna2dDeWdDR0NJTWF5SUlRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFMS0FJUUlnaEZEUUVnQnlBSWRDQUdMUUFFUVFnZ0NHdDJjaUVIREFFTElBaEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUxLQUlRSWdwQkdHb2lEWFFoQnlBSUlBcHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdEVUVJYXlJTmRDQUhjaUVISUFwQkNFb2hDQ0FHUVFGcUlRWWdDa0VJYXlFS0lBZ05BQXNMSUFzZ0RFRUJhaUlHTmdJWUlBc2dCa0VIY1RZQ0VDQUdJQWxMRFFnZ0N5QUhRUjkyTmdLQUFTQUxJQXNvQWdnZ0JrRURkbW8yQWd3Z0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCaUFMQW44Z0N5Z0MwQUVpQjBGL1JnUkFRWUNBZ0lCNElBWU5BUm9NQ2dzZ0JnMEpJQWRCQVdwQkFYWWlCa0VBSUFacklBZEJBWEViQ3pZQ2hBRWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQmlBTEFuOGdDeWdDMEFFaUIwRi9SZ1JBUVlDQWdJQjRJQVlOQVJvTUNnc2dCZzBKSUFkQkFXcEJBWFlpQmtFQUlBWnJJQWRCQVhFYkN6WUNpQUVnQzBFSWFpQmNFQUlOQ0NBTEtBS01BU0lHUWY4QlN3MElJQVlFUUNBTElBWkJBblFRQ0NJSE5nS1FBU0FIUlEwSlFRQWhCZ05BSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRZ2dCeUFHUVFKMGFnSi9JQXNvQXRBQklnZEJmMFlFUUVHQWdJQ0FlQ0FJRFFFYURBd0xJQWdOQ3lBSFFRRnFRUUYySWdoQkFDQUlheUFIUVFGeEd3czJBZ0FnQmtFQmFpSUdJQXNvQW93QlR3MENJQXNvQXBBQklRY01BQXNBQ3lBTFFRQTJBcEFCQ3lBTFFRaHFJRnNRQWcwSElBc29BcFFCUVJCTERRY2dDeWdDRENFR0FrQWdDeWdDRkVFRGRDSUpJQXNvQWhnaURHc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJS1FSaHFJZzEwSVFjZ0NDQUtha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBeEJBV29pQmpZQ0dDQUxJQVpCQjNFMkFoQWdCaUFKU3cwSElBc2dCMEVmZGpZQ21BRWdDeUFMS0FJSUlBWkJBM1pxTmdJTUlBdEJDR29nQzBIc0FXb1FBZzBISUFzZ0N5Z0M3QUZCQVdvMkFwd0JJQXRCQ0dvZ0MwSHNBV29RQWcwSElBc2dDeWdDN0FGQkFXb2lHRFlDb0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0VpQ1RZQ0VDQUdJQWhMRFFjZ0N5QUxLQUlJSWc0Z0JrRURkbW8yQWd3Z0IwRi9TZzBIQWtBZ0NDQUdheUlHUVFGclFSNUxEUUFnQmlBSmFrRUlheUlHUVFGSURRQURRQ0FHUVFoS0lRY2dCa0VJYXlFR0lBY05BQXNMSUFzZ0RFRUNhaUlITmdJWUlBc2dCMEVIY1NJSk5nSVFJQWNnQ0VzTkJ5QUxJQTRnQjBFRGRtb2lCallDREFKQUlBZ2dCMnNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUFoTERRY2dDeUFIUVI5Mk5nS2tBU0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUhRUUJPQkVBZ0N5Z0NuQUVoRFF3QkN5QUxRUWhxSUZvUUFnMElJQXRCQ0dvZ1dSQUNEUWdnQzBFSWFpQllFQUlOQ0NBTFFRaHFJRmNRQWcwSUlBc29BcWdCSUFzb0Fxd0JRWDl6SUFzb0Fwd0JJZzFCQTNScVNnMElJQXNvQXJBQklBc29BclFCUVg5eklBc29BcUFCSWhoQkEzUnFTZzBJQzBIakFDRUtRWUNrQ1NFSFFmLy8vLzhISVFZQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ3lnQ2JFRUthdzRxQ2dBQkFRc0xDd3NMQ3dFQ0F3c0xDd3NMQ3dzREJBVUxDd3NMQ3dzTEJnWUhDd3NMQ3dzTEN3Z0pDd3RCakFNaENrR0FqQlVoQnd3SkMwR01BeUVLUVlEWU55RUhEQWdMUVpnR0lRcEJnTER2QUNFSERBY0xRZFFNSVFwQmdPeTlBU0VIREFZTFFaQWNJUXBCZ1BDbEF5RUhEQVVMUVlBb0lRcEJnSURnQXlFSERBUUxRWURBQUNFS1FZQ0FnQVloQnd3REMwR0F4QUFoQ2tHQWdMQUdJUWNNQWd0QndLd0JJUXBCZ01DYkZDRUhEQUVMUVlDZ0FpRUtRWUNBNENFaEJ3c2dDaUFOSUJoc0lnaEpEUUFnQnlBSVFZQURiRzRpQmtFUUlBWkJFRWtiSVFZTElBc2dDeWdDbEFFaUJ5QUhJQVlnQmlBSFNSc2dCa0gvLy8vL0IwWWJJZ1kyQXV3QklBc2dCallDd0FFZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSklBc29BaGdpREdzaUNFRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSVJRMEJJQWNnQ0hRZ0JpMEFCRUVJSUFocmRuSWhCd3dCQ3lBSVFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ0NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQUpTdzBISUFzZ0IwRWZkallDdUFFZ0N5QUxLQUlJSUFaQkEzWnFOZ0lNQWtBZ0IwRi9TZzBBSUF0QnVBY1FDQ0lHTmdLOEFTQUdSUTBJSUFaQkFFRzRCeEFESVFnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJU0lBc29BaGdpRVdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUJGQkFXb2lEVFlDR0NBTElBMUJCM0VpRERZQ0VDQU5JQkpMRFFnZ0N5QUxLQUlJSWc0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFnQUNRQ0FIUVg5S0RRQUNRQ0FTSUExcklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnMTBJUWNnQ1NBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF3MkFoQWdDeUFSUVFscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVZZGlJSE5nSUVJQWRCL3dGSERRQUNRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkIzRWlDVFlDRUNBTElCRkJHV29pRERZQ0dDQU1JQkpMRFFrZ0N5QU9JQXhCQTNacUlnWTJBZ3dnQ0NBSFFSQjJOZ0lJQWtBZ0VpQU1heUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUWR4SWd3MkFoQWdDeUFSUVNscUlnMDJBaGdnRFNBU1N3MEpJQXNnRGlBTlFRTjJhaUlHTmdJTUlBZ2dCMEVRZGpZQ0RBc0NRQ0FTSUExcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXhGRFFFZ0J5QU1kQ0FHTFFBRVFRZ2dER3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FNUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQkFXb2lDVFlDR0NBTElBbEJCM0VpQ2pZQ0VDQUpJQkpMRFFnZ0N5QU9JQWxCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0lRSUFkQmYwd0VRQUpBSUJJZ0NXc2lERUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ2tVTkFTQUhJQXAwSUFZdEFBUkJDQ0FLYTNaeUlRY01BUXNnREVFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFwQkdISWlDWFFoQnlBS0lBeHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hEQ0FHUVFGcUlRWWdDa0VJYXlFS0lBd05BQXNMSUFzZ0RVRUNhaUlKTmdJWUlBc2dDVUVIY1NJS05nSVFJQWtnRWtzTkNTQUxJQTRnQ1VFRGRtb2lCallDRENBSUlBZEJIM1kyQWhRTEFrQWdFaUFKYXlJTVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUtSUTBCSUFjZ0NuUWdCaTBBQkVFSUlBcHJkbkloQnd3QkN5QU1RUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDa0VZY2lJTmRDRUhJQW9nREdwQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFTUlBWkJBV29oQmlBS1FRaHJJUW9nREEwQUN3c2dDeUFKUVFGcUlnMDJBaGdnQ3lBTlFRZHhJZ28yQWhBZ0RTQVNTdzBJSUFzZ0RpQU5RUU4yYWlJR05nSU1JQWdnQjBFZmRqWUNHQ0FJQW44Q1FDQUhRWDlNQkVBQ1FDQVNJQTFySWd4QklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElBeEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFNYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQkdvaUREWUNHQ0FMSUF4QkIzRWlDallDRUNBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVIxMk5nSWNBa0FnRWlBTWF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBSlFRVnFJZ3cyQWhnZ0N5QU1RUWR4SWdvMkFoQWdEQ0FTU3cwTElBc2dEaUFNUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDSUFKQUlCSWdER3NpREVFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NrVU5BU0FISUFwMElBWXRBQVJCQ0NBS2EzWnlJUWNNQVFzZ0RFRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBcEJHSElpRFhRaEJ5QUtJQXhxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oRENBR1FRRnFJUVlnQ2tFSWF5RUtJQXdOQUFzTElBc2dDVUVHYWlJTk5nSVlJQXNnRFVFSGNTSUtOZ0lRSUEwZ0Vrc05DeUFMSUE0Z0RVRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFpUWdCMEYvU2cwQkFrQWdFaUFOYXlJSFFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaERTQUtSUTBCSUEwZ0NuUWdCaTBBQkVFSUlBcHJkbkloRFF3QkN5QUhRUUZJQkVCQkFDRU5EQUVMSUFZdEFBQWdDa0VZY2lJTWRDRU5JQWNnQ21wQkNHc2lCMEVCU0EwQUEwQWdCaTBBQVNBTVFRaHJJZ3gwSUExeUlRMGdCMEVJU2lFUklBWkJBV29oQmlBSFFRaHJJUWNnRVEwQUN3c2dDeUFLTmdJUUlBc2dDVUVPYWlJTU5nSVlJQXdnRWtzTkN5QUxJQTRnREVFRGRtb2lCallDRENBSUlBMUJHSFkyQWlnQ1FDQVNJQXhySWhGQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBcEZEUUVnQnlBS2RDQUdMUUFFUVFnZ0NtdDJjaUVIREFFTElCRkJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQUtRUmh5SWcxMElRY2dDaUFSYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVJFZ0JrRUJhaUVHSUFwQkNHc2hDaUFSRFFBTEN5QUxJQXhCQjNFaUNqWUNFQ0FMSUFsQkZtb2lERFlDR0NBTUlCSkxEUXNnQ3lBT0lBeEJBM1pxSWdZMkFnd2dDQ0FIUVJoMk5nSXNBa0FnRWlBTWF5SVJRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFSUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSU5kQ0VISUFvZ0VXcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRVJJQVpCQVdvaEJpQUtRUWhySVFvZ0VRMEFDd3NnQ3lBTVFRZHhJZ28yQWhBZ0N5QUpRUjVxSWcwMkFoZ2dEU0FTU3cwTElBc2dEaUFOUVFOMmFpSUdOZ0lNSUFkQkdIWU1BZ3NnQ0VFRk5nSWNDeUFJUW9LQWdJQWdOd01vUVFJTE5nSXdBa0FnRWlBTmF5SU1RU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFLUlEwQklBY2dDblFnQmkwQUJFRUlJQXByZG5JaEJ3d0JDeUFNUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ2tFWWNpSUpkQ0VISUFvZ0RHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBTlFRRnFJZzAyQWhnZ0N5QU5RUWR4TmdJUUlBMGdFa3NOQ0NBTElBNGdEVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBalFnQjBGL1RBUkFJQXRCQ0dvZ0NFRTRhaEFDRFFrZ0NDZ0NPRUVGU3cwSklBdEJDR29nQ0VFOGFoQUNEUWtnQ0NnQ1BFRUZTdzBKSUFzb0FoUkJBM1FoRWlBTEtBSVlJUTBnQ3lnQ0RDRUdDd0pBSUJJZ0RXc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUpSUTBCSUFjZ0NYUWdCaTBBQkVFSUlBbHJkbkloQnd3QkN5QUtRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJTVFSaHFJZ2wwSVFjZ0NpQU1ha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQWxCQ0dzaUNYUWdCM0loQnlBS1FRaEtJUXdnQmtFQmFpRUdJQXBCQ0dzaENpQU1EUUFMQ3lBTElBMUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUdEWUNFQ0FKSUJKTERRZ2dDeUFMS0FJSUlnNGdDVUVEZG1vaUJqWUNEQ0FJSUFkQkgzWTJBa0FnQjBGL1RBUkFBa0FnRWlBSmF5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFZUlEwQklBY2dHSFFnQmkwQUJFRUlJQmhyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnR0VFWWNpSUpkQ0VISUFvZ0dHcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQUpRUWhySWdsMElBZHlJUWNnQ2tFSVNpRU1JQVpCQVdvaEJpQUtRUWhySVFvZ0RBMEFDd3NnQ3lBWU5nSVFJQXNnRFVFaGFpSU1OZ0lZSUF3Z0Vrc05DU0FMSUE0Z0RFRURkbW9pQmpZQ0RDQUhSUTBKSUFnZ0J6WUNSQUpBSUJJZ0RHc2lDa0VnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnR0VVTkFTQUhJQmgwSUFZdEFBUkJDQ0FZYTNaeUlRY01BUXNnQ2tFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUJoQkdISWlDWFFoQnlBS0lCaHFRUWhySWdwQkFVZ05BQU5BSUFZdEFBRWdDVUVJYXlJSmRDQUhjaUVISUFwQkNFb2hFU0FHUVFGcUlRWWdDa0VJYXlFS0lCRU5BQXNMSUFzZ0RFRUhjU0lLTmdJUUlBc2dEVUhCQUdvaUNUWUNHQ0FKSUJKTERRa2dDeUFPSUFsQkEzWnFJZ1kyQWd3Z0IwVU5DU0FJSUFjMkFrZ0NRQ0FTSUFscklneEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQXBGRFFFZ0J5QUtkQ0FHTFFBRVFRZ2dDbXQyY2lFSERBRUxJQXhCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FLUVJoeUlnbDBJUWNnQ2lBTWFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBbEJDR3NpQ1hRZ0IzSWhCeUFLUVFoS0lRd2dCa0VCYWlFR0lBcEJDR3NoQ2lBTURRQUxDeUFMSUExQndnQnFJZ2syQWhnZ0N5QUpRUWR4SWhnMkFoQWdDU0FTU3cwSklBc2dEaUFKUVFOMmFpSUdOZ0lNSUFnZ0IwRWZkallDVEFzQ1FDQVNJQWxySWdwQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElCaEZEUUVnQnlBWWRDQUdMUUFFUVFnZ0dHdDJjaUVIREFFTElBcEJBVWdFUUVFQUlRY01BUXNnQmkwQUFDQVlRUmh5SWcxMElRY2dDaUFZYWtFSWF5SUtRUUZJRFFBRFFDQUdMUUFCSUExQkNHc2lEWFFnQjNJaEJ5QUtRUWhLSVF3Z0JrRUJhaUVHSUFwQkNHc2hDaUFNRFFBTEN5QUxJQWxCQVdvaUREWUNHQ0FMSUF4QkIzRTJBaEFnRENBU1N3MElJQXNnRGlBTVFRTjJhaUlHTmdJTUlBZ2dCMEVmZGpZQ1VBSkFJQWRCZjB3RVFDQUxRUWhxSUFoQjFBQnFFQjROQ2lBTEtBSVVRUU4wSVJJZ0N5Z0NHQ0VNSUFzb0Fnd2hCZ3dCQ3lBSVFwaUFnSUNBQXpjRDZBTWdDRUtZZ0lDQWdBTTNBK0FESUFoQmdaQ3FpUUUyQXVBQklBaEJnWkNxaVFFMkFtQWdDRUVCTmdKVUN3SkFJQklnREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQVNTdzBJSUFzZ0N5Z0NDQ0FHUVFOMmFqWUNEQ0FJSUFkQkgzWTJBdkFEQWtBZ0IwRi9UQVJBSUF0QkNHb2dDRUgwQTJvUUhrVU5BUXdLQ3lBSVFwaUFnSUNBQXpjRGlBY2dDRUtZZ0lDQWdBTTNBNEFISUFoQmdiaTQ4Z0EyQW9BRklBaEJnYmk0OGdBMkFvQUVJQWhCQVRZQzlBTUxBa0FDUUNBSUtBSlFEUUFnQ0NnQzhBTU5BQ0FMS0FJVVFRTjBJUklnQ3lnQ0dDRU1JQXNvQWd3aEJnd0JDeUFMS0FJTUlRWUNRQ0FMS0FJVVFRTjBJaElnQ3lnQ0dDSU1heUlKUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBTEtBSVFJZ2xGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FMS0FJUUlncEJHR29pRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVCYWlJTU5nSVlJQXNnREVFSGNUWUNFQ0FNSUJKTERRa2dDeUFMS0FJSUlBeEJBM1pxSWdZMkFnd2dDQ0FIUVI5Mk5nS1FCd3NDUUNBU0lBeHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUUZxSWdvMkFoZ2dDeUFLUVFkeElnazJBaEFnQ2lBU1N3MElJQXNnQ3lnQ0NDSU9JQXBCQTNacUlnWTJBZ3dnQ0NBSFFSOTJOZ0tVQndKQUlCSWdDbXNpQ2tFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NVVU5BU0FISUFsMElBWXRBQVJCQ0NBSmEzWnlJUWNNQVFzZ0NrRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBbEJHSElpRFhRaEJ5QUpJQXBxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ1NBR1FRRnFJUVlnQ2tFSWF5RUtJQWtOQUFzTElBc2dERUVDYWlJS05nSVlJQXNnQ2tFSGNTSUpOZ0lRSUFvZ0Vrc05DQ0FMSUE0Z0NrRURkbW9pQmpZQ0RDQUlJQWRCSDNZMkFwZ0hBa0FnQjBGL1RBUkFBa0FnRWlBS2F5SUtRU0JPQkVBZ0JpZ0FBQ0lIUVJoMElBZEJDSFJCZ0lEOEIzRnlJQWRCQ0haQmdQNERjU0FIUVJoMmNuSWhCeUFKUlEwQklBY2dDWFFnQmkwQUJFRUlJQWxyZG5JaEJ3d0JDeUFLUVFGSUJFQkJBQ0VIREFFTElBWXRBQUFnQ1VFWWNpSU5kQ0VISUFrZ0NtcEJDR3NpQ2tFQlNBMEFBMEFnQmkwQUFTQU5RUWhySWcxMElBZHlJUWNnQ2tFSVNpRUpJQVpCQVdvaEJpQUtRUWhySVFvZ0NRMEFDd3NnQ3lBTVFRTnFJZ1kyQWhnZ0N5QUdRUWR4TmdJUUlBWWdFa3NOQ2lBTElBNGdCa0VEZG1vMkFnd2dDQ0FIUVI5Mk5nS2NCeUFMUVFocUlBaEJvQWRxRUFJTkNpQUlLQUtnQjBFUVN3MEtJQXRCQ0dvZ0NFR2tCMm9RQWcwS0lBZ29BcVFIUVJCTERRb2dDMEVJYWlBSVFhZ0hhaEFDRFFvZ0NDZ0NxQWRCRUVzTkNpQUxRUWhxSUFoQnJBZHFFQUlOQ2lBSUtBS3NCMEVRU3cwS0lBdEJDR29nQ0VHd0Iyb1FBZzBLSUF0QkNHb2dDRUcwQjJvUUFnMEtEQUVMSUFoQkVEWUN0QWNnQ0VLUWdJQ0FnQUkzQXF3SElBaENnWUNBZ0lBQ053S2tCeUFJUW9HQWdJQWdOd0tjQndzZ0N5Z0N2QUVpQnlnQ21BZEZEUUFnQnlnQ3RBY2lCaUFIS0FLd0Iwa05DQ0FHSUFzb0FwUUJTUTBJSUFZZ0N5Z0N3QUZMRFFnZ0N5QUdRUUVnQmhzMkFzQUJDMEVJSUFzb0FoQWlCbXNoQndKQUlBc29BaFJCQTNRaUNDQUxLQUlZSWdscklncEJBV3RCSGtzTkFDQUdJQXBxUVFocklnWkJBVWdOQUFOQUlBWkJDRW9oQ2lBR1FRaHJJUVlnQ2cwQUN3c2dDeUFISUFscUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUFzb0FnZ2dCa0VEZG1vMkFnd0xBa0FnQUNBTEtBSndJZ1pCQW5ScUlnY29BaFFpQ0VVRVFDQUhRZHdBRUFnaUJqWUNGQ0FHRFFFTUNBc2dBQ2dDQ0NBR1JnUkFBa0FDUUNBTEtBSm9JQUFvQWhBaUJpZ0NBRWNOQUNBTEtBSnNJQVlvQWdSSERRQWdDeWdDZENBR0tBSU1SdzBBSUFzb0FuZ2lDU0FHS0FJUVJ3MEFJQXNvQXBRQklBWW9BaXhIRFFBZ0N5Z0NtQUVnQmlnQ01FY05BQ0FMS0FLY0FTQUdLQUkwUncwQUlBc29BcUFCSUFZb0FqaEhEUUFnQ3lnQ3BBRWlDaUFHS0FJOFJ3MEFJQXNvQXJnQklBWW9BbEJIRFFBQ1FBSkFBa0FnQ1E0Q0FRQUNDeUFMS0FLQUFTQUdLQUlZUncwQ0lBc29Bb1FCSUFZb0FoeEhEUUlnQ3lnQ2lBRWdCaWdDSUVjTkFpQUxLQUtNQVNJSklBWW9BaVJIRFFJZ0NVVU5BU0FHS0FJb0lReEJBQ0VOSUFzb0FwQUJJUTREUUNBT0lBMUJBblFpRW1vb0FnQWdEQ0FTYWlnQ0FFY05BeUFKSUExQkFXb2lEVWNOQUFzTUFRc2dDeWdDZkNBR0tBSVVSdzBCQ3lBS1JRMEJJQXNvQXFnQklBWW9Ba0JIRFFBZ0N5Z0NyQUVnQmlnQ1JFY05BQ0FMS0FLd0FTQUdLQUpJUncwQUlBc29BclFCSUFZb0FreEdEUUVMSUFnb0FpZ1FCQ0FIS0FJVVFRQTJBaWdnQnlnQ0ZDZ0NWQkFFSUFjb0FoUkJBRFlDVkNBQVFRQTJBaEFnQUVHQkFqWUNCQ0FBUWlFM0FnZ01BZ3NnQ3lnQ2tBRVFCRUVBSVFvZ0MwRUFOZ0tRQVNBTEtBSzhBUkFFSUF0QkFEWUN2QUZCQUNFTURBd0xJQWdvQWlnUUJDQUhLQUlVUVFBMkFpZ2dCeWdDRkNnQ1ZCQUVJQWNvQWhSQkFEWUNWQXNnQnlnQ0ZDQUxRZWdBYWtIY0FCQUhHZ3dHQ3lBTFFTQnFJZ1pCQUVISUFCQURHaUFMUVFocUlBWVFBZzBDSUFzb0FpQkIvd0ZMRFFJZ0MwRUlhaUJmRUFJTkFpQUxLQUlrUVI5TERRSWdDeWdDRENFR0FrQWdDeWdDRkVFRGRDSU1JQXNvQWhnaURtc2lDRUVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWNnQ3lnQ0VDSUlSUTBCSUFjZ0NIUWdCaTBBQkVFSUlBaHJkbkloQnd3QkN5QUlRUUZJQkVCQkFDRUhEQUVMSUFZdEFBQWdDeWdDRUNJSlFSaHFJZzEwSVFjZ0NDQUpha0VJYXlJS1FRRklEUUFEUUNBR0xRQUJJQTFCQ0dzaURYUWdCM0loQnlBS1FRaEtJUWdnQmtFQmFpRUdJQXBCQ0dzaENpQUlEUUFMQ3lBTElBNUJBV29pQ1RZQ0dDQUxJQWxCQjNFaUNEWUNFQ0FKSUF4TERRSWdDeUFMS0FJSUloSWdDVUVEZG1vaUJqWUNEQ0FIUVFCSURRSUNRQ0FNSUFscklnbEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWhGRFFFZ0J5QUlkQ0FHTFFBRVFRZ2dDR3QyY2lFSERBRUxJQWxCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FJUVJoeUlnMTBJUWNnQ0NBSmFrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRZ2dCa0VCYWlFR0lBcEJDR3NoQ2lBSURRQUxDeUFMSUE1QkFtb2lCallDR0NBTElBWkJCM0UyQWhBZ0JpQU1TdzBDSUFzZ0IwRWZkallDS0NBTElCSWdCa0VEZG1vMkFnd2dDMEVJYWlBTFFld0JhaEFDRFFJZ0N5QUxLQUxzQVVFQmFpSUdOZ0lzSUFaQkNFc05BaUFHUVFKSkRRRWdDMEVJYWlCZUVBSU5BaUFMS0FJd0lnWkJCa3NOQWdKQUFrQUNRQUpBSUFZT0J3QUZBUUlDQWdNRkN5QUxJQXNvQWl3aUIwRUNkQkFJSWdnMkFqUWdDRVVOQlVFQUlRWWdCMFVOQkFOQUlBdEJDR29nQzBIc0FXb1FBZzBHSUFnZ0JrRUNkR29nQ3lnQzdBRkJBV28yQWdBZ0JrRUJhaUlHSUFkSERRQUxEQVFMSUFzZ0N5Z0NMQ0lHUVFKMFFRUnJJZ2dRQ0NJSE5nSTRJQXNnQ0JBSUlnZzJBandnQjBVTkJDQUlSUTBFSUFaQkFVWU5BeUFHUVFGcklRbEJBQ0VHQTBBZ0MwRUlhaUFMUWV3QmFoQUNEUVVnQnlBR1FRSjBJZ3BxSUFzb0F1d0JOZ0lBSUF0QkNHb2dDMEhzQVdvUUFnMEZJQWdnQ21vZ0N5Z0M3QUUyQWdBZ0JrRUJhaUlHSUFsSERRQUxEQU1MSUFzb0Fnd2hCZ0pBSUFzb0FoUkJBM1FpQ1NBTEtBSVlJZ3hySWdoQklFNEVRQ0FHS0FBQUlnZEJHSFFnQjBFSWRFR0FnUHdIY1hJZ0IwRUlka0dBL2dOeElBZEJHSFp5Y2lFSElBc29BaEFpQ0VVTkFTQUhJQWgwSUFZdEFBUkJDQ0FJYTNaeUlRY01BUXNnQ0VFQlNBUkFRUUFoQnd3QkN5QUdMUUFBSUFzb0FoQWlDa0VZYWlJTmRDRUhJQWdnQ21wQkNHc2lDa0VCU0EwQUEwQWdCaTBBQVNBTlFRaHJJZzEwSUFkeUlRY2dDa0VJU2lFSUlBWkJBV29oQmlBS1FRaHJJUW9nQ0EwQUN3c2dDeUFNUVFGcUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NVc05BeUFMSUFkQkgzWTJBa0FnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXRCQ0dvZ0MwSHNBV29RQWcwRElBc2dDeWdDN0FGQkFXbzJBa1FNQWdzZ0MwRUlhaUFMUWV3QmFoQUNEUUlnQ3lBTEtBTHNBU0lPUVFGcUlnWTJBa2dnQ3lBR1FRSjBFQWdpQ0RZQ1RDQUlSUTBDSUFaRkRRRkJJQ0FMS0FJc0loSkJBblJCbkRGcUtBSUFJaEZySVE5QkFDRU1JQXNvQWd3aEJpQUxLQUlJSVJvRFFBSkFJQXNvQWhSQkEzUWlGQ0FMS0FJWUloaHJJZ2xCSUU0RVFDQUdLQUFBSWdkQkdIUWdCMEVJZEVHQWdQd0hjWElnQjBFSWRrR0EvZ054SUFkQkdIWnljaUVISUFzb0FoQWlDVVVOQVNBSElBbDBJQVl0QUFSQkNDQUphM1p5SVFjTUFRc2dDVUVCU0FSQVFRQWhCd3dCQ3lBR0xRQUFJQXNvQWhBaUNrRVlhaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QVJJQmhxSWdZMkFoZ2dDeUFHUVFkeE5nSVFJQVlnRkVzRVFDQUlJQXhCQW5ScVFYODJBZ0FNQkFzZ0N5QWFJQVpCQTNacUlnWTJBZ3dnQ0NBTVFRSjBhaUFISUE5MklnYzJBZ0FnQnlBU1R3MERJQXdnRGtZaEJ5QU1RUUZxSVF3Z0IwVU5BQXNNQVFzZ0FDZ0NuQWtOQ0NBQVFRRTJBcUFKQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NwQWtOQUNBQVFnQTNBclFKSUFzZ0N5Z0NHRFlDNEFFZ0N5QUxLUU1RTndQWUFTQUxJQXNwQXdnM0E5QUJBa0FnQzBIUUFXb2dDMEhzQVdvUUFnMEFJQXRCMEFGcUlBdEI3QUZxRUFJTkFDQUxRZEFCYWlBTFFld0JhaEFDRFFBZ1BTQUxLQUxzQVNJR0lBWkIvd0ZMR3lFOUMwRUVJUXdnQUNBOVFRSjBhaWdDbEFFaUJrVU5DU0FBSUFZb0FnUWlDRUVDZEdvaUNTZ0NGQ0lIUlEwSklBQW9BZ2doRHdKQUlBWW9BZ3dpRGtFQ1NRMEFJQWNvQWpRaURTQUhLQUk0YkNFSEFrQUNRQUpBQWtBZ0JpZ0NFQ0lSRGdNQkF3QURDeUFPUVFGcklSRWdCaWdDSENFVUlBWW9BaGdoSnd3QkN5QUdLQUlVSVEwRFFDQU5JQXBCQW5ScUtBSUFJQWRMRFEwZ0RpQUtRUUZxSWdwSERRQUxEQUlMQTBBZ0p5QUtRUUowSWc1cUtBSUFJaGdnRGlBVWFpZ0NBQ0lPU3cwTUlBY2dEazBORENBWUlBMXdJQTRnRFhCTERRd2dFU0FLUVFGcUlncEhEUUFMREFFTElCRkJBMnRCQWswRVFDQUdLQUlrSUFkTERRc01BUXNnRVVFR1J3MEFJQVlvQWlnZ0Iwa05DZ3NDUUFKQUlBQW9BZ1FpQjBHQUFrWUVRQ0FBSUFZMkFnd2dBQ0E5TmdJRUlBQWdDRFlDQ0NBQUlBa29BaFFpQmpZQ0VDQUdLQUkwSVFjZ0JpZ0NPQ0VHSUFCQkFUWUN0Qm9nQUNBR05nTEFDaUFBSUFjMkFyd0tJQUFnQmlBSGJEWUNtQWtNQVFzZ0FDZ0N0Qm9FUUNBQVFRQTJBclFhSUFBb0Fyd0pFQVFnQUVFQU5nSzhDU0FBS0FLVUNSQUVJQUFnQUNnQ21Ba2lEa0hZQVd3aUJ4QUlJZ1kyQXJ3SklBQWdEa0VDZEJBSUlnZzJBcFFKUVFVaERDQUdSUTBNSUFoRkRRd2dCa0VBSUFjUUF5RVJJQUFvQWhBaENpQU9CRUJCQVNBS0tBSTBJZ2hySVJRZ0NFRUJheUVZUVFBZ0NHc2hFeUFSUWRnQmF5RWNJQkVnQ0VGL2MwSFlBV3hxSVJkQkFDRUhRUUFoRFVFQUlRa0RRQ0FSSUFsQjJBRnNJZ3BxSWdZZ0NpQWNha0VBSUFjYk5nTElBU0FHQW44Z0RVVUVRQ0FHUWdBM0Fzd0JRUUFNQVFzZ0JpQUdJQk5CMkFGc2FqWUN6QUVnQmlBR0lCUkIyQUZzYWtFQUlBY2dHRWtiTmdMUUFTQUtJQmRxUVFBZ0J4c0xOZ0xVQVVFQUlBZEJBV29pQmlBR0lBaEdJZ1liSVFjZ0JpQU5haUVOSUFsQkFXb2lDU0FPUncwQUN5QUFLQUlRSVFvTFFRRWhHRUVBSVFjQ2YwRUFJQUFvQXNBSkRRQWFRUUFnQ2lnQ0VFRUNSZzBBR2dKQUlBb29BbEJGRFFBZ0NpZ0NWQ0lHS0FLWUIwVU5BRUVBSUFZb0FyQUhSUTBCR2d0QkFDRVlRUUVMSVFrZ0NpZ0NOQ0VuSUFvb0FqZ2hEaUFLS0FJTUlRMGdDaWdDTENFSUlBb29BbGdoRVFKQUlEZ29BZ0FpQmtVTkFFRUFJUW9nQmlFSElBQW9BdUFKUVg5R0RRQURRQ0FISUFwQktHd2lCbW9vQWdRUUJDQUFLQUxFQ1NJSElBWnFRUUEyQWdRZ0NrRUJhaUlLSUFBb0F1QUpRUUZxU1EwQUN3c2dCeEFFSUFCQkFEWUN4QWtnQUNnQ3lBa1FCQ0FBUVFBMkFzZ0pJQUFvQXRBSkVBUWdBRUgvL3dNMkF1Z0pJQUJCQURZQzBBa2dBQ0FZTmdMOENTQUFJQTAyQXVRSklBQWdFU0FJUVFFZ0NFRUJTeHNpQnlBSkd5SUdOZ0xnQ1NBQUlBYzJBdHdKSUFCQkFEWUM5QWtnQUVJQU53THNDU0FBUWFnRkVBZ2lCellDeEFrZ0IwVU5ERUVBSVFvZ0IwRUFRYWdGRUFNaENDQUdRWDlIQkVBZ0RpQW5iRUdBQTJ4QkwzSWhDUU5BSUFnZ0NrRW9iR29pRGlBSkVBZ2lCellDQkNBSFJRME9JQTRnQjBFQUlBZHJRUWh4YWpZQ0FDQUdJQXBISVFjZ0NrRUJhaUVLSUFjTkFBc0xJQUJCeEFBUUNDSUhOZ0xJQ1NBQUlBWkJCSFJCRUdvUUNDSUdOZ0xRQ1NBR1JRME1JQWRGRFF3Z0IwRUFRY1FBRUFNYUlBQkNBRGNDMUFrZ0FDZ0NDQ0VJREFFTElBY2dQVVlOQXlBSUlBOUdEUUVnR2tFRlJ3MExJQUFnQmpZQ0RDQUFJRDAyQWdRZ0FDQUlOZ0lJSUFBZ0NTZ0NGQ0lHTmdJUUlBWW9BalFoQnlBR0tBSTRJUVlnQUVFQk5nSzBHaUFBSUFZMkFzQUtJQUFnQnpZQ3ZBb2dBQ0FHSUFkc05nS1lDUXNnQ0NBUFJnMEJRUUFoQ2lBQUtBSUFJZ1pCSDAwRVFDQUFJQVpCQW5ScUtBSVVJUW9MSUFBb0FoQWhCeUFBUVFFMkFwQWFJQnBCQlVjTkJ5QUFLQUlNSVFnZ0N5QUxLQUlZTmdMZ0FTQUxJQXNwQXhBM0E5Z0JJQXNnQ3lrRENEY0QwQUZCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlFUUVFQklRME1Cd3NnQzBIUUFXb2dDMEhNQVdvUUFnUkFRUUVoRFF3SEN5QUxRZEFCYWlBTFFjd0JhaEFDQkVCQkFTRU5EQWNMUVI4Z0J5Z0NER2NpRG1zaEVTQUxLQUxVQVNFTkFrQWdDeWdDM0FGQkEzUWlEeUFMS0FMZ0FTSWFheUlKUVNCT0JFQWdEU2dBQUNJSlFSaDBJQWxCQ0hSQmdJRDhCM0Z5SUFsQkNIWkJnUDREY1NBSlFSaDJjbkloRENBTEtBTFlBU0lKUlEwQklBd2dDWFFnRFMwQUJFRUlJQWxyZG5JaERBd0JDeUFKUVFGSUJFQkJBQ0VNREFFTElBMHRBQUFnQ3lnQzJBRWlGRUVZYWlJU2RDRU1JQWtnRkdwQkNHc2lDVUVCU0EwQUEwQWdEUzBBQVNBU1FRaHJJaEowSUF4eUlRd2dDVUVJU2lFVUlBMUJBV29oRFNBSlFRaHJJUWtnRkEwQUN3c2dDeUFSSUJwcUlnazJBdUFCSUFzZ0NVRUhjVFlDMkFGQkFTRU5JQWtnRDBzTkJpQUxJQXNvQXRBQklBbEJBM1pxTmdMVUFTQU1JQTVCQVdwMlFYOUdEUVlnQzBIUUFXb2dDMEhNQVdvUUFnMEdJQWNvQWhBaUJnMEVRUjhnQnlnQ0ZHY2lEbXNoRVNBTEtBTFVBU0VHQWtBZ0N5Z0MzQUZCQTNRaUR5QUxLQUxnQVNJYWF5SUpRU0JPQkVBZ0JpZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEQ0FMS0FMWUFTSUpSUTBCSUF3Z0NYUWdCaTBBQkVFSUlBbHJkbkloREF3QkN5QUpRUUZJQkVCQkFDRU1EQUVMSUFZdEFBQWdDeWdDMkFFaUZFRVlhaUlTZENFTUlBa2dGR3BCQ0dzaUNVRUJTQTBBQTBBZ0JpMEFBU0FTUVFockloSjBJQXh5SVF3Z0NVRUlTaUVVSUFaQkFXb2hCaUFKUVFocklRa2dGQTBBQ3dzZ0N5QVJJQnBxSWdZMkF1QUJJQXNnQmtFSGNUWUMyQUVnQmlBUFN3UkFRUUVoQmd3SEN5QUxJQXNvQXRBQklBWkJBM1pxTmdMVUFVRUJJUVlnRENBT1FRRnFka0YvUmcwR0lBZ29BZ2hGRFFVZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUWtDUUNBTEtBTHNBVUYvUmdSQUlBbEZEUUVNQlFzZ0NVVU5CQXNNQmdzZ0FDQUdOZ0lNSUFBZ1BUWUNCQXRCQUNFS0lBQW9BclFhUlEwQVFRTWhEQXdSQ3lBQUtBSU1JUWNnQUNnQ0VDRUdJRlZCQUVIY0J4QURJUk1nQmlnQ05DRUlJQVlvQWpnaENTQUxRUWhxSUF0QnpBRnFFQUlORHlBVElBc29Bc3dCSWdvMkFnQWdDaUFJSUFsc0lnMVBEUThnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s0RWdKQUFrQWdDQTRJQUJFQkVSRUFFUUVSQ3lBYVFRVkdEUkFnQmlnQ0xFVU5FQXNnQzBFSWFpQUxRY3dCYWhBQ0RROGdBQ0FMS0FMTUFTSUlOZ0s4RWlBSUlBY29BZ0JIRFE5Qkh5QUdLQUlNWnlJbmF5RU1JQXNvQWd3aENRSkFJQXNvQWhSQkEzUWlFU0FMS0FJWUlnOXJJZ3BCSUU0RVFDQUpLQUFBSWdoQkdIUWdDRUVJZEVHQWdQd0hjWElnQ0VFSWRrR0EvZ054SUFoQkdIWnljaUVPSUFzb0FoQWlDRVVOQVNBT0lBaDBJQWt0QUFSQkNDQUlhM1p5SVE0TUFRc2dDa0VCU0FSQVFRQWhEZ3dCQ3lBSkxRQUFJQXNvQWhBaUZFRVlhaUlJZENFT0lBb2dGR3BCQ0dzaUdFRUJTQTBBQTBBZ0NTMEFBU0FJUVFocklnaDBJQTV5SVE0Z0dFRUlTaUVLSUFsQkFXb2hDU0FZUVFocklSZ2dDZzBBQ3dzZ0N5QU1JQTlxSWdnMkFoZ2dDeUFJUVFkeE5nSVFJQWdnRVVzTkR5QUxJQXNvQWdnZ0NFRURkbW8yQWd3Z0RpQW5RUUZxZGlJSVFYOUdEUThnR2tFRlJ5SUtRUUVnQ0J0RkRROGdBQ0FJTmdMQUVpQUtSUVJBSUF0QkNHb2dDMEhNQVdvUUFnMFFJQUFnQ3lnQ3pBRWlDRFlDeEJJZ0NFSC8vd05MRFJBTEFrQWdCaWdDRUNJSUJIOGdDQVZCSHlBR0tBSVVaeUlNYXlFUElBc29BZ3doQ1FKQUlBc29BaFJCQTNRaUZDQUxLQUlZSWlkcklnaEJJRTRFUUNBSktBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRU9JQXNvQWhBaUNFVU5BU0FPSUFoMElBa3RBQVJCQ0NBSWEzWnlJUTRNQVFzZ0NFRUJTQVJBUVFBaERnd0JDeUFKTFFBQUlBc29BaEFpR0VFWWFpSVJkQ0VPSUFnZ0dHcEJDR3NpR0VFQlNBMEFBMEFnQ1MwQUFTQVJRUWhySWhGMElBNXlJUTRnR0VFSVNpRUlJQWxCQVdvaENTQVlRUWhySVJnZ0NBMEFDd3NnQ3lBUElDZHFJZ2cyQWhnZ0N5QUlRUWR4TmdJUUlBZ2dGRXNORVNBTElBc29BZ2dnQ0VFRGRtbzJBZ3dnRGlBTVFRRnFkaUlJUVg5R0RSRWdBQ0FJTmdMSUVpQUhLQUlJQkVBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhDQUpBSUFzb0F0QUJJZ2xCZjBZRVFFR0FnSUNBZUNFWUlBaEZEUlFNQVFzZ0NBMFRJQWxCQVdwQkFYWWlDRUVBSUFocklBbEJBWEViSVJnTElBQWdHRFlDekJJTElBcEZCRUFnQUNnQ3lCSWlDQ0FHS0FJVVFRRjJTdzBTSUFoQkFDQUFLQUxNRWlJSlFSOTFJQWx4YTBjTkVnc2dCaWdDRUF0QkFVY05BQ0FHS0FJWURRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQ0FKQUlBc29BdEFCSWdsQmYwWUVRRUdBZ0lDQWVDRVlJQWhGRFJJTUFRc2dDQTBSSUFsQkFXcEJBWFlpQ0VFQUlBaHJJQWxCQVhFYklSZ0xJQUFnR0RZQzBCSWdCeWdDQ0FSQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdDUUNBTEtBTFFBU0lKUVg5R0JFQkJnSUNBZ0hnaEdDQUlSUTBUREFFTElBZ05FaUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3lFWUN5QUFJQmcyQXRRU0N5QUtEUUFnQUNnQzBCSWlDQ0FBS0FMVUVpQUlJQVlvQWlCcWFpSUpJQWdnQ1VnYkRSQUxJQWNvQWtRRVFDQUxRUWhxSUF0QnpBRnFFQUlORUNBQUlBc29Bc3dCSWdnMkF0Z1NJQWhCL3dCTERSQUxBa0FDUUNBQUtBSzRFaUluRGdZQUFRRUJBUUFCQ3lBTEtBSU1JUWtDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lQYXlJSVFTQk9CRUFnQ1NnQUFDSUlRUmgwSUFoQkNIUkJnSUQ4QjNGeUlBaEJDSFpCZ1A0RGNTQUlRUmgyY25JaERpQUxLQUlRSWdoRkRRRWdEaUFJZENBSkxRQUVRUWdnQ0d0MmNpRU9EQUVMSUFoQkFVZ0VRRUVBSVE0TUFRc2dDUzBBQUNBTEtBSVFJaFJCR0dvaUVYUWhEaUFJSUJScVFRaHJJaGhCQVVnTkFBTkFJQWt0QUFFZ0VVRUlheUlSZENBT2NpRU9JQmhCQ0VvaENDQUpRUUZxSVFrZ0dFRUlheUVZSUFnTkFBc0xJQXNnRDBFQmFpSUlOZ0lZSUFzZ0NFRUhjVFlDRUNBSUlBeExEUkFnQ3lBTEtBSUlJQWhCQTNacU5nSU1JQUFnRGtFZmRqWUMzQklDUUNBT1FYOU1CRUFnQzBFSWFpQUxRY3dCYWhBQ0RSSWdDeWdDekFFaUNFRVBTdzBTSUFoQkFXb2hDU0FBS0FLNEVpRW5EQUVMSUFjb0FqQWlDVUVRU3cwUkN5QUFJQWsyQXVBU0N3SkFBa0FnSnc0R0FBRUJBUUVBQVFzZ0N5Z0NEQ0VKQWtBZ0N5Z0NGRUVEZENJTUlBc29BaGdpRDJzaUNFRWdUZ1JBSUFrb0FBQWlDRUVZZENBSVFRaDBRWUNBL0FkeGNpQUlRUWgyUVlEK0EzRWdDRUVZZG5KeUlRNGdDeWdDRUNJSVJRMEJJQTRnQ0hRZ0NTMEFCRUVJSUFocmRuSWhEZ3dCQ3lBSVFRRklCRUJCQUNFT0RBRUxJQWt0QUFBZ0N5Z0NFQ0lVUVJocUloRjBJUTRnQ0NBVWFrRUlheUlZUVFGSURRQURRQ0FKTFFBQklCRkJDR3NpRVhRZ0RuSWhEaUFZUVFoS0lRZ2dDVUVCYWlFSklCaEJDR3NoR0NBSURRQUxDeUFHS0FJTUlSRWdBQ2dDNEJJaEZDQUxJQTlCQVdvaUNEWUNHQ0FMSUFoQkIzRTJBaEFnQ0NBTVN3MFFJQXNnQ3lnQ0NDQUlRUU4yYWpZQ0RDQUFJQTVCSDNZMkF2Z1NJQTVCZjBvTkFFRUFJUWtEUUNBSklCUkxEUkVnQzBFSWFpQUxRZXdCYWhBQ0RSRWdDeWdDN0FFaUNFRURTdzBSSUFBZ0NVRU1iR29pREVIOEVtb2dDRFlDQUNBSVFRRk5CRUFnQzBFSWFpQUxRZEFCYWhBQ0RSSWdDeWdDMEFFaUNDQVJUdzBTSUF4QmdCTnFJQWhCQVdvMkFnQWdDVUVCYWlFSkRBRUxJQWhCQWtZRVFDQUxRUWhxSUF0QjBBRnFFQUlORWlBTVFZUVRhaUFMS0FMUUFUWUNBQ0FKUVFGcUlRa01BUXNMSUFsRkRSQUxBa0FnRWtVTkFDQUxLQUlNSVFnQ1FDQUxLQUlVUVFOMElnOGdDeWdDR0NJbmF5SU1RU0JPQkVBZ0NDZ0FBQ0lKUVJoMElBbEJDSFJCZ0lEOEIzRnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWhEaUFMS0FJUUlnbEZEUUVnRGlBSmRDQUlMUUFFUVFnZ0NXdDJjaUVPREFFTElBeEJBVWdFUUVFQUlRNE1BUXNnQ0MwQUFDQUxLQUlRSWhSQkdHb2lFWFFoRGlBSUlRa2dEQ0FVYWtFSWF5SVlRUUZJRFFBRFFDQUpMUUFCSUJGQkNHc2lFWFFnRG5JaERpQVlRUWhLSVF3Z0NVRUJhaUVKSUJoQkNHc2hHQ0FNRFFBTEN5QUdLQUlzSVJRZ0N5QW5RUUZxSWd3MkFoZ2dDeUFNUVFkeElnWTJBaEJCZnlFSklBd2dEMDBFUUNBTElBc29BZ2dnREVFRGRtb2lDRFlDRENBT1FSOTJJUWtMSUFwRkJFQWdDVUYvUmcwUklBQWdDVFlDeUJRQ1FDQVBJQXhySWdwQklFNEVRQ0FJS0FBQUlnbEJHSFFnQ1VFSWRFR0FnUHdIY1hJZ0NVRUlka0dBL2dOeElBbEJHSFp5Y2lFSklBWkZEUUVnQ1NBR2RDQUlMUUFFUVFnZ0JtdDJjaUVKREFFTElBcEJBVWdFUUVFQUlRa01BUXNnQ0MwQUFDQUdRUmh5SWhoMElRa2dCaUFLYWtFSWF5SUtRUUZJRFFBRFFDQUlMUUFCSUJoQkNHc2lHSFFnQ1hJaENTQUtRUWhLSVFZZ0NFRUJhaUVJSUFwQkNHc2hDaUFHRFFBTEN5QUxJQ2RCQW1vaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBUFN3MFJJQXNnQ3lnQ0NDQUdRUU4yYWpZQ0RDQUFJQWxCSDNZMkFzd1VJQlFOQVNBSlFYOU1EUkVNQVFzZ0NVRi9SZzBRSUFBZ0NUWUMwQlFnQ1VVTkFDQVVRUUYwUVFOcUlROUJBQ0VKUVFBaEowRUFJUTVCQUNFSVFRQWhFUU5BSUFrZ0QwWU5FU0FMUVFocUlBdEI3QUZxRUFJTkVTQUxLQUxzQVNJR1FRWkxEUkVnQUNBSlFSUnNhaUlLUWRRVWFpQUdOZ0lBSUFaQmZYRkJBVVlFUUNBTFFRaHFJQXRCMEFGcUVBSU5FaUFLUWRnVWFpQUxLQUxRQVVFQmFqWUNBQXNDUUFKQUFrQUNRQ0FHUVFKckRnVUFBUUlEQVFNTElBdEJDR29nQzBIUUFXb1FBZzBVSUFwQjNCUnFJQXNvQXRBQk5nSUFEQUlMSUF0QkNHb2dDMEhRQVdvUUFnMFRJQXBCNEJScUlBc29BdEFCTmdJQUlBWkJCRWNOQVFzZ0MwRUlhaUFMUWRBQmFoQUNEUklnQ3lnQzBBRWlEQ0FVU3cwU0lBcEI1QlJxSUF4QkFXdEIvLzhESUF3Yk5nSUFJQ2RCQVdvaEp3c2dDVUVCYWlFSklBZ2dCa0VHUm1vaENDQU9JQVpCQlVacUlRNGdFU0FHUVFGclFRTkphaUVSSUFZTkFBc2dKMEVCU3cwUUlBNUJBVXNORUNBSVFRRkxEUkFnRVVVTkFDQU9EUkFMSUF0QkFEWUMwQUVnQzBFSWFpQUxRZEFCYWhBQ0lRWUNRQ0FMS0FMUUFTSUlRWDlHQkVCQmdJQ0FnSGdoQ1NBR1JRMFJEQUVMSUFZTkVDQUlRUUZxUVFGMklnWkJBQ0FHYXlBSVFRRnhHeUVKQ3lBQUlBazJBdVFTSUFjb0FqUWdDV3BCTTBzTkR3SkFJQWNvQWp4RkRRQWdDMEVJYWlBTFFjd0JhaEFDRFJBZ0FDQUxLQUxNQVNJR05nTG9FaUFHUVFKTERSQWdCa0VCUmcwQUlBdEJBRFlDMEFFZ0MwRUlhaUFMUWRBQmFoQUNJUWdnQ3lnQzBBRWlCa0YvUmcwUUlBZ05FQ0FHUVFGcVFRRjJJZ2hCQUNBSWF5QUdRUUZ4R3lJR1FRWnFRUXhMRFJBZ0FDQUdRUUYwTmdMc0VpQUxRUUEyQXRBQklBdEJDR29nQzBIUUFXb1FBaUVJSUFzb0F0QUJJZ1pCZjBZTkVDQUlEUkFnQmtFQmFrRUJkaUlJUVFBZ0NHc2dCa0VCY1JzaUJrRUdha0VNU3cwUUlBQWdCa0VCZERZQzhCSUxBa0FnQnlnQ0RFRUNTUTBBSUFjb0FoQkJBMnRCQWtzTkFFRUJRUUlnRFNBTklBY29BaVFpQjI0aUJpQUhiRVliSUFacUlRaEJBQ0VLQTBBZ0NDQUtJZ1pCQVdvaUNuWU5BQXNnQ2lBR0lBaEJmeUFHZEVGL2MzRWJJUWdnQ3lnQ0RDRUtBa0FnQ3lnQ0ZFRURkQ0lPSUFzb0FoZ2lFV3NpQmtFZ1RnUkFJQW9vQUFBaUJrRVlkQ0FHUVFoMFFZQ0EvQWR4Y2lBR1FRaDJRWUQrQTNFZ0JrRVlkbkp5SVF3Z0N5Z0NFQ0lHUlEwQklBd2dCblFnQ2kwQUJFRUlJQVpyZG5JaERBd0JDeUFHUVFGSUJFQkJBQ0VNREFFTElBb3RBQUFnQ3lnQ0VDSUpRUmhxSWhoMElRd2dCaUFKYWtFSWF5SUpRUUZJRFFBRFFDQUtMUUFCSUJoQkNHc2lHSFFnREhJaERDQUpRUWhLSVFZZ0NrRUJhaUVLSUFsQkNHc2hDU0FHRFFBTEN5QUxJQWdnRVdvaUJqWUNHQ0FMSUFaQkIzRTJBaEFnQmlBT1N3UkFJQXRCZnpZQ3pBRU1FUXNnQ3lBTEtBSUlJQVpCQTNacU5nSU1JQXhCSUNBSWEzWWlCa0YvUmcwUUlBQWdCallDOUJJZ0JpQUhJQTFxUVFGcklBZHVTdzBRQ3lBQUtBS2tDVVVFUUFKQUlCcEJCVVlOQUNBQUtBSVFLQUl3SVFZZ0FFSUFOd0xVQ1NBR1JRMEFBa0FDUUFKQUFrQWdBQ2dDOUFraUNpQUFLQUxBRWlJblJ3UkFJQ2NnQ2tFQmFpQUFLQUxrQ1NJT2NDSUdSd1JBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaWdDQUNFUkEwQUNRQUpBQWtBQ1FDQUFLQUxzQ1NJS0JFQWdDa0VCY1NFSklBQW9Bc1FKSVFkQkFDRU5Ba0FnQ2tFQlJpSVBSUVJBSUFwQmZuRWhEQU5BSUFjZ0RVRW9iR29pQ0NnQ0ZFRUJhMEVCVFFSQUlBZ2dDQ2dDRENJSUlBNUJBQ0FHSUFoSkcyczJBZ2dMSUFjZ0RVRUJja0VvYkdvaUNDZ0NGRUVCYTBFQ1NRUkFJQWdnQ0NnQ0RDSUlJQTVCQUNBR0lBaEpHMnMyQWdnTElBMUJBbW9oRFNBTVFRSnJJZ3dOQUFzZ0NVVU5BUXNnQnlBTlFTaHNhaUlJS0FJVVFRRnJRUUZMRFFBZ0NDQUlLQUlNSWdnZ0RrRUFJQVlnQ0VrYmF6WUNDQXNnQ2lBQUtBTGNDVWtOQkNBUFJRMEJRUUFoR0VGL0lReEJBQ0VJREFJTFFRQWhDaUFBS0FMY0NRMERRUU1oREF3ZEMwRi9JUXhCQUNFTlFRQWhHQ0FLUVg1eElnZ2hEZ05BSUFjZ0RVRW9iR29pRHlnQ0ZFRUJhMEVCVFFSQUlBOG9BZ2dpRHlBWUlBeEJmMFlnRHlBWVNISWlEeHNoR0NBTklBd2dEeHNoREFzZ0J5QU5RUUZ5SWc5QktHeHFJaFFvQWhSQkFXdEJBa2tFUUNBVUtBSUlJaFFnR0NBTVFYOUdJQlFnR0VoeUloUWJJUmdnRHlBTUlCUWJJUXdMSUExQkFtb2hEU0FPUVFKcklnNE5BQXNnQ1VVTkFRc2dCeUFJUVNoc2FpSUpLQUlVUVFGclFRRkxEUUFnQ0NBSUlBd2dERUYvUmhzZ0NTZ0NDQ0FZU0JzaERBc2dERUVBU0EwWklBY2dERUVvYkdvaUIwRUFOZ0lVSUFBZ0NrRUJheUlLTmdMc0NTQUhLQUlZRFFBZ0FDQUFLQUx3Q1VFQmF6WUM4QWtMQWtBZ0FDZ0M4QWtpQ0NBQUtBTGdDU0lIU1FSQUlBQW9Bc1FKSVE4TUFRc2dBQ2dDL0FrTkJDQUFLQUxFQ1NFUEEwQkJBQ0VZUWYvLy8vOEhJUXhCQUNFTkEwQWdEeUFOUVNoc2FpSUpLQUlZQkVBZ0NTQVlJQWtvQWhBaUNTQU1TQ0lPR3lFWUlBa2dEQ0FPR3lFTUN5QU5RUUZxSWcwZ0IwME5BQXNnR0FSQUlBQW9BdEFKSUFBb0F0UUpJZ3hCQkhScUlna2dHQ2dDQURZQ0FDQUpJQmdvQWlRMkFnd2dDU0FZS0FJY05nSUVJQWtnR0NnQ0lEWUNDQ0FBSUF4QkFXbzJBdFFKSUJoQkFEWUNHQ0FJSUJnb0FoUkZheUVJQ3lBSElBaE5EUUFMQ3lBUElBZEJLR3hxSWdrZ0JqWUNEQ0FKUW9DQWdJQVFOd0lRSUFsQkFEWUNHQ0FKSUFZMkFnZ2dBQ0FLUVFGcU5nTHNDU0FBSUFoQkFXbzJBdkFKSUE4Z0IwRUJhaEFkSUFaQkFXb2dBQ2dDNUFraURuQWlCaUFuUncwQUN5QUFLQUxVQ1NJSVJRMERJQUFvQXNRSklna2dBQ2dDNEFraUJrRW9iR29pRENnQ0FDRUhJQUFvQXRBSklRMUJBQ0VLQTBBZ0J5QU5JQXBCQkhScUtBSUFSd1JBSUFnZ0NrRUJhaUlLUncwQkRBVUxDMEVBSVFvZ0JrVU5Bd05BSUJFZ0NTQUtRU2hzYWlJSUtBSUFSd1JBSUFZZ0NrRUJhaUlLUncwQkRBVUxDeUFJSUFjMkFnQWdEQ0FSTmdJQURBTUxJQklOQkF3REMwRUFJUW9nRWtVTkJFRURJUXdNRmdzRFFBd0FDd0FMSUJJTkFTQUFLQUwwQ1NFS0N5QUtJQ2RHRFFFZ0RpQW5ha0VCYXlBT2NDRW5DeUFBSUNjMkF2UUpDeUFBSUFBb0FzUUpJQUFvQXVBSlFTaHNhaUlHTmdMTUNTQUFJQVlvQWdBMkFyZ0tDeUJXSUJOQjNBY1FCeUV2SUFCQkFUWUNwQWtnQUNBYXJTQVNyVUlnaG9RM0F0QUtJQUFvQWhBaUJpZ0NPQ0lPSUFZb0FqUWlFbXdoR0NBQUtBS1VDU0VQQWtBZ0FDZ0NEQ0lHS0FJTUlncEJBVVlFUUNBUFFRQWdHRUVDZEJBREdnd0JDMEVBSVEwQ1FBSkFJQVlvQWhBaUIwRURhMEVDVFFSQUlBWW9BaVFnQUNnQ21BdHNJZ2dnR0NBSUlCaEpHeUVhSUFZb0FpQWhDQ0FIUVg1eFFRUkhEUUVnR0NBYWF5QWFJQWdiSVEwTEFrQUNRQUpBQWtBQ1FBSkFJQWNPQmdFQ0F3QUZCQUFMSUJoRkRRY2dHRUVEY1NFSklBWW9BaXdoQjBFQUlRWWdHRUVCYTBFRFR3UkFJQmhCZkhFaERBTkFJQThnQmtFQ2RDSUlhaUFISUFocUtBSUFOZ0lBSUE4Z0NFRUVjaUlLYWlBSElBcHFLQUlBTmdJQUlBOGdDRUVJY2lJS2FpQUhJQXBxS0FJQU5nSUFJQThnQ0VFTWNpSUlhaUFISUFocUtBSUFOZ0lBSUFaQkJHb2hCaUFNUVFScklnd05BQXNMSUFsRkRRY0RRQ0FQSUFaQkFuUWlDR29nQnlBSWFpZ0NBRFlDQUNBR1FRRnFJUVlnQ1VFQmF5SUpEUUFMREFjTElBcEZEUVVnQmlnQ0ZDRUlRUUFoQndOQVFRQWhEU0FISUJoUERRY0RRQUpBSUFnZ0RVRUNkR29pRENnQ0FDSUpSUVJBUVFBaENRd0JDMEVBSVFaQkFDQVlJQWRySWc0Z0RpQVlTeHNpRGtVTkFBTkFJQThnQmlBSGFrRUNkR29nRFRZQ0FDQUdRUUZxSWdZZ0RDZ0NBQ0lKVHcwQklBWWdEa2NOQUFzTElBb2dEVUVCYWlJTlMwRUFJQmdnQnlBSmFpSUhTeHNOQUFzZ0J5QVlTUTBBQ3d3R0N5QVlSUTBGUVFBaEJnTkFJQThnQmtFQ2RHb2dCaUFTYmlJSElBcHNRUUYySUFZZ0J5QVNiR3RxSUFwd05nSUFJQVpCQVdvaUJpQVlSdzBBQ3d3RkN5QUdLQUljSVE0Z0JpZ0NHQ0VSQWtBZ0dFVU5BQ0FLUVFGcklRWWdHRUVIY1NFSlFRQWhEU0FZUVFGclFRZFBCRUFnR0VGNGNTRU1BMEFnRHlBTlFRSjBJZ2RxSUFZMkFnQWdEeUFIUVFSeWFpQUdOZ0lBSUE4Z0IwRUljbW9nQmpZQ0FDQVBJQWRCREhKcUlBWTJBZ0FnRHlBSFFSQnlhaUFHTmdJQUlBOGdCMEVVY21vZ0JqWUNBQ0FQSUFkQkdISnFJQVkyQWdBZ0R5QUhRUnh5YWlBR05nSUFJQTFCQ0dvaERTQU1RUWhySWd3TkFBc0xJQWxGRFFBRFFDQVBJQTFCQW5ScUlBWTJBZ0FnRFVFQmFpRU5JQWxCQVdzaUNRMEFDd3NnQ2tFQ2F5RUdBMEFDUUNBUklBWWlCMEVDZENJR2FpZ0NBQ0lJSUJKdUlnd2dCaUFPYWlnQ0FDSUdJQkp1SWhoTERRQWdDQ0FNSUJKc2F5SUlJQVlnRWlBWWJHc2lDVXNOQUFOQUlBd2dFbXdoQ2lBSUlRWURRQ0FQSUFZZ0NtcEJBblJxSUFjMkFnQWdCa0VCYWlJR0lBbE5EUUFMSUF4QkFXb2lEQ0FZVFEwQUN3c2dCMEVCYXlFR0lBY05BQXNNQkFzZ0VrVU5BeUFPUlEwRFFRRWdCaWdDSUNJWWF5RVJJQTVCZm5FaENpQU9RUUZ4SVJwQkFDRUlRUUFoQ1FOQUlBZ2hCa0VBSVFjZ0NpRU1JQTVCQVVjRVFBTkFJQThnQnlBU2JDQUpha0VDZEdvZ0dDQVJJQVlnRFVrYk5nSUFJQThnQjBFQmNpQVNiQ0FKYWtFQ2RHb2dHQ0FSSUFaQkFXb2dEVWtiTmdJQUlBZEJBbW9oQnlBR1FRSnFJUVlnREVFQ2F5SU1EUUFMQ3lBYUJFQWdEeUFISUJKc0lBbHFRUUowYWlBWUlCRWdCaUFOU1JzMkFnQUxJQWdnRG1vaENDQUpRUUZxSWdrZ0VrY05BQXNNQXdzZ0dFVU5Ba0VCSUFZb0FpQWlCMnNoQ0NBWVFRTnhJUXhCQUNFR0lCaEJBV3RCQTA4RVFDQVlRWHh4SVJJRFFDQVBJQVpCQW5ScUlBY2dDQ0FHSUExSkd6WUNBQ0FQSUFaQkFYSWlDVUVDZEdvZ0J5QUlJQWtnRFVrYk5nSUFJQThnQmtFQ2NpSUpRUUowYWlBSElBZ2dDU0FOU1JzMkFnQWdEeUFHUVFOeUloaEJBblJxSUFjZ0NDQU5JQmhMR3pZQ0FDQUdRUVJxSVFZZ0VrRUVheUlTRFFBTEN5QU1SUTBDQTBBZ0R5QUdRUUowYWlBSElBZ2dCaUFOU1JzMkFnQWdCa0VCYWlFR0lBeEJBV3NpREEwQUN3d0NDd0pBSUJoRkRRQWdHRUVIY1NFTlFRQWhCeUFZUVFGclFRZFBCRUFnR0VGNGNTRUpBMEFnRHlBSFFRSjBJZ1pxUVFFMkFnQWdEeUFHUVFSeWFrRUJOZ0lBSUE4Z0JrRUljbXBCQVRZQ0FDQVBJQVpCREhKcVFRRTJBZ0FnRHlBR1FSQnlha0VCTmdJQUlBOGdCa0VVY21wQkFUWUNBQ0FQSUFaQkdISnFRUUUyQWdBZ0R5QUdRUnh5YWtFQk5nSUFJQWRCQ0dvaEJ5QUpRUWhySWdrTkFBc0xJQTFGRFFBRFFDQVBJQWRCQW5ScVFRRTJBZ0FnQjBFQmFpRUhJQTFCQVdzaURRMEFDd3NnR2tVTkFTQVNRUUZySVJRZ0RrRUJheUVUUVFFZ0NFRUJkQ0lHYXlFS0lBWkJBV3NoRENBSVFRRnJJUWRCQUNFSklBNGdDR3RCQVhZaURpRW5JQklnQ0d0QkFYWWlFU0VOSUE0aEdDQVJJUVlEUUNBUElCSWdHR3dnQm1wQkFuUnFJaHdvQWdBaUYwRUJSZ1JBSUJ4QkFEWUNBQXNnRjBFQlJpRWNBa0FDUUNBSFFYOUhEUUFnQmlBTlJ3MEFRUUFoQnlBTUlRZ2dEVUVCSUExQkFVb2JRUUZySWdZaERRd0JDd0pBSUFkQkFVY05BQ0FHSUJGSERRQkJBQ0VISUFvaENDQVJRUUZxSWdZZ0ZDQUdJQlJJR3lJR0lSRU1BUXNDUUNBSVFYOUhEUUFnR0NBblJ3MEFRUUFoQ0NBS0lRY2dKMEVCSUNkQkFVb2JRUUZySWhnaEp3d0JDd0pBSUFoQkFVY05BQ0FPSUJoSERRQkJBQ0VJSUF3aEJ5QU9RUUZxSWc0Z0V5QU9JQk5JR3lJWUlRNE1BUXNnQ0NBWWFpRVlJQVlnQjJvaEJnc2dDU0FjYWlJSklCcEpEUUFMREFFTElCaEZEUUFEUUF3QUN3QUxBa0FnQUNnQzdBa2lDRVVFUUNBQUtBS0VDeUVTSUFBb0F1UUtJUXdNQVFzZ0NFRURjU0VLUVFBaEJpQUlRUUZyUVFOUEJFQWdDRUY4Y1NFSEEwQWdBQ2dDeUFrZ0JrRUNkR29nQUNnQ3hBa2dCa0VvYkdvMkFnQWdBQ2dDeUFrZ0JrRUJjaUlKUVFKMGFpQUFLQUxFQ1NBSlFTaHNhallDQUNBQUtBTElDU0FHUVFKeUlnbEJBblJxSUFBb0FzUUpJQWxCS0d4cU5nSUFJQUFvQXNnSklBWkJBM0lpQ1VFQ2RHb2dBQ2dDeEFrZ0NVRW9iR28yQWdBZ0JrRUVhaUVHSUFkQkJHc2lCdzBBQ3dzZ0NnUkFBMEFnQUNnQ3lBa2dCa0VDZEdvZ0FDZ0N4QWtnQmtFb2JHbzJBZ0FnQmtFQmFpRUdJQXBCQVdzaUNnMEFDd3NnQUNnQ2hBc2hFaUFBS0FMa0NpRU1JQWhGRFFBZ09DZ0NBQ0VKUVFBaEJnTkFJQWtnQmtFb2JHb2lCeWdDRkVFQmEwRUJUUVJBSUFjZ0RDQUhLQUlNSWdkSkJIOGdCeUFBS0FMa0NXc0ZJQWNMTmdJSUN5QUdRUUZxSWdZZ0NFY05BQXNMQWtBZ0FDZ0NuQXRGRFFCQkFDRVlJQXdoQ0NBQUtBS2dDeUlHUVFKTERRQURRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBWU9Bd0FCQXdFTElBZ2dBQ0FZUVF4c2FrR2tDMm9vQWdCcklnaEJmMG9OQVNBQUtBTGtDU0FJYWlFSURBRUxJQUFnR0VFTWJHcEJwQXRxS0FJQUlBaHFJZ1pCQUNBQUtBTGtDU0lISUFZZ0IwZ2JheUVJQ3lBSUlnNGdERXNFUUNBSUlBQW9BdVFKYXlFT0N5QUFLQUxjQ1NJSlJRMFZJRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUWlEVUVCYTBFQlRRUkFJQW9vQWdnZ0RrWU5Bd3RCQUNFS0lBWkJBV29pQmlBSlJ3MEFDMEVESVF3TUZnc2dBQ2dDM0FraUNVVU5GQ0FBSUJoQkRHeHFRYWdMYWlnQ0FDRU9JRGdvQWdBaEIwRUFJUVlEUUNBSElBWkJLR3hxSWdvb0FoUkJBMFlFUUNBS0tBSUlJQTVHRFFNTFFRQWhDaUFHUVFGcUlnWWdDVWNOQUF0QkF5RU1EQlVMUVFBaENpQUdRUUJJQkVCQkF5RU1EQlVMSUExQkFVc05BVUVESVF3TUZBdEJBQ0VLSUFaQkFFNE5BRUVESVF3TUV3c2dFaUFZU3dSQUlCSWlDaUFZYTBFRGNTSUhCRUFEUUNBQUtBTElDU0lKSUFwQkFuUnFJQWtnQ2tFQmF5SUtRUUowYWlnQ0FEWUNBQ0FIUVFGcklnY05BQXNMSUJJZ0dFRi9jMnBCQTA4RVFBTkFJQUFvQXNnSklna2dDa0VDZENJSGFpQUpJQWRCQkdzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCQ0dzaURtb29BZ0EyQWdBZ0FDZ0N5QWtpQ1NBT2FpQUpJQWRCREdzaUIyb29BZ0EyQWdBZ0J5QUFLQUxJQ1NJSmFpQUpJQXBCQkdzaUNrRUNkR29vQWdBMkFnQWdDaUFZU3cwQUN3c2dPQ2dDQUNFSEN5QUFLQUxJQ1NBWVFRSjBhaUFISUFaQktHd2lDV28yQWdBZ0dFRUJhaUlZSVFvZ0VpQVlJZ1pQQkVBRFFDQUFLQUxJQ1NJSElBWkJBblJxS0FJQUlnNGdBQ2dDeEFrZ0NXcEhCRUFnQnlBS1FRSjBhaUFPTmdJQUlBcEJBV29oQ2dzZ0JrRUJhaUlHSUJKTkRRQUxDeUFBSUJoQkRHeHFRYUFMYWlnQ0FDSUdRUU5KRFFBTEN3Si9JQXRCQ0dvaElFRUFJVGxCQUNFMEl3QkI4QU5ySWg4a0FDQXZLQUlBSVNvZ0FDZ0NzQm9oRmlBZlFRQTJBZ3dnQUVHd0NXcEJBRFlDQUNBQUlBQW9BcWdKUVFGcU5nS29DU0FXUVlnUWFpRTJJQlpCeUFwcUlSc2dGa0dJQ21vaE55QVdRY2dKYWlFNklCWkJpQWxxSVQ0Z0ZrSElDR29oUHlBV1FZZ0lhaUZBSUJaQnlBZHFJVUVnRmtHSUIyb2hRaUFXUWNnR2FpRkRJQlpCaUFacUlVUWdGa0hJQldvaFJTQVdRWWdGYWlGR0lCWkJ5QVJxSVVjZ0ZrR0lCR29oU0NBV1FjZ0RhaUZKSUJaQmlBTnFJVW9nRmtISUQyb2hLQ0FXUWNnQ2FpRVVJQlpCbUE5cUlVc2dGa0dJRDJvaFRDQVdRY2dPYWlGTklCWkJER29oVGlBdktBSXdJQUFvQWd3b0FqUnFJUzBnQUNnQ3ZBa2hEaUFXUWN3S2FpRlBJQlpCakF0cUlUc2dGa0dNRUdvaFVDQVdRY3dMYWlGUklCWkJrQkJxSVZJZ0ZrR01ER29oWVNBV1FaUVFhaUZpSUJaQnpBeHFJV01nRmtHWUVHb2haQ0FXUVl3TmFpRmxJQlpCbkJCcUlXWWdGa0hNRFdvaFp5QVdRYUFRYWlGb0lCWkJqQTVxSVdrZ0ZrR2tFR29oYWlBV1FaQUNhaUlqSVdzQ1FBTkFBa0FnTHlnQ0pBMEFJQTRnS2tIWUFXeHFLQUxFQVVVTkFFRUJJUVlNQWdzZ0x5a0NOQ0Z1SUM4b0Fqd2hCeUFBS0FLb0NTRUlJQTRnS2tIWUFXd2lNV29pQmlBQUtBSU1LQUk0TmdJWUlBWWdCellDRUNBR0lHNDNBZ2dnQmlBSU5nSUVBa0FnTHlnQ0JDSUdRUUpHRFFBZ0JrRUhSZzBBSURrTkFFRUJJUVlnSUNBZlFReHFFQUlOQWlBZktBSU1JZ2NnQUNnQ21Ba2dLbXRMRFFJZ0IwVUVRRUVBSVRrTUFRc2dUa0VBUWFRQkVBTWFJQlpCQURZQ0FFRUJJVGtMQWtBZ0h5Z0NEQ0lHQkVBZ0h5QUdRUUZyTmdJTURBRUxJQzhvQWl3aERTQUFLQUs4Q1NFUklDOG9BZ1FoQmlBV1FRQkJxQkFRQXlFS0lDQWdIMEhNQTJvUUFpRUhBa0FDUUFKQUlBWkJBbXNPQmdBQkFRRUJBQUVMUVFFaEJpQWZLQUxNQTBFR2FpSUpRUjlMRFFRZ0IwVU5BUXdFQzBFQklRWWdIeWdDekFOQkFXb2lDVUVmU3cwRElBY05Bd3NnQ2lBSk5nSUFBa0FnQ1VFZlJnUkFJQ0FvQWdnaEV3TkFJQ0FvQWdRaEJpQVRSUVJBUVFBaENpQVVJUWNEUUFKQUlDQW9BZ3hCQTNRaURpQWdLQUlRSWd4cklnbEJJRTRFUUNBR0tBQUFJZ2hCR0hRZ0NFRUlkRUdBZ1B3SGNYSWdDRUVJZGtHQS9nTnhJQWhCR0haeWNpRUlJQ0FvQWdnaUNVVU5BU0FJSUFsMElBWXRBQVJCQ0NBSmEzWnlJUWdNQVFzZ0NVRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlDQW9BZ2dpRFVFWWFpSWFkQ0VJSUFrZ0RXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQWFRUWhySWhwMElBaHlJUWdnQ1VFSVNpRU5JQVpCQVdvaEJpQUpRUWhySVFrZ0RRMEFDd3NnSUNBTVFRZHhOZ0lJSUNBZ0RFRUlhaUlHTmdJUUlBWWdEa3NFUUVFQklRWU1DQXNnSUNBZ0tBSUFJQVpCQTNacUlnWTJBZ1FnQnlBSVFSaDJOZ0lBSUFkQkJHb2hCeUFLUVFGcUlncEJnQU5IRFFBTERBTUxBa0FnSUNnQ0RFRURkQ0lLSUNBb0FoQWlER3NpQjBFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SUJOMElBWXRBQVJCQ0NBVGEzWnlJUWdNQVFzZ0IwRUJTQVJBUVFBaENBd0JDeUFHTFFBQUlCTkJHR29pR25RaENDQUhJQk5xUVFocklnbEJBVWdOQUFOQUlBWXRBQUVnR2tFSWF5SWFkQ0FJY2lFSUlBbEJDRW9oQnlBR1FRRnFJUVlnQ1VFSWF5RUpJQWNOQUFzTFFRRWhCaUFnSUF4QkFXb2lCellDRUNBZ0lBZEJCM0VpRXpZQ0NDQUhJQXBMRFFVZ0lDQWdLQUlBSUFkQkEzWnFOZ0lFSUFoQmYwb05BQXNNQkF0QkFpQUpRUVpISWc4Z0NVRUdTUnNoRWdKQUFrQUNRQ0FKUVg1eFFRUkdCRUFnSUNBZlFkUURhaEFDQkVCQkFTRUlEQVFMSUI4b0F0UURJZ1pCQTBzRVFFRUJJUWdNQkFzZ0NpQUdOZ0t3QVNBZ0lCOUIxQU5xRUFJRVFFRUJJUWdNQkFzZ0h5Z0MxQU1pQmtFRFN3UkFRUUVoQ0F3RUN5QUtJQVkyQXJRQklDQWdIMEhVQTJvUUFnUkFRUUVoQ0F3RUN5QWZLQUxVQXlJR1FRTkxCRUJCQVNFSURBUUxJQW9nQmpZQ3VBRWdJQ0FmUWRRRGFoQUNCRUJCQVNFSURBUUxJQjhvQXRRRElnWkJBMHNFUUVFQklRZ01CQXNnQ2lBR05nSzhBU0FOUVFKSkRRSWdDVUVGUncwQkRBSUxBa0FDZndKQUFrQUNRQ0FTUVFGckRnSUVBUUFMSUNBb0FnUWhCZ0pBSUNBb0FneEJBM1FnSUNnQ0VHc2lCMEVnVGdSQUlBWW9BQUFpQjBFWWRDQUhRUWgwUVlDQS9BZHhjaUFIUVFoMlFZRCtBM0VnQjBFWWRuSnlJUWdnSUNnQ0NDSUhSUTBCSUFnZ0IzUWdCaTBBQkVFSUlBZHJkbkloQ0F3QkN5QUhRUUJNQkVCQkFDRUlJQXBCQURZQ0RBd0RDeUFHTFFBQUlDQW9BZ2dpQ1VFWWFpSVRkQ0VJSUFjZ0NXcEJDR3NpQ1VFQlNBMEFBMEFnQmkwQUFTQVRRUWhySWhOMElBaHlJUWdnQ1VFSVNpRUhJQVpCQVdvaEJpQUpRUWhySVFrZ0J3MEFDd3NnQ2lBSVFSOTJOZ0lNSUFoQmYwb05BU0FJUVFGMElRbEJBQXdDQ3lBTlFRSlBCRUJCQXlFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUdDMEVBSVF3RFFDQUdJUWNDUUNBTlFRSk5CRUFnSUNnQ0JDRUdBa0FnSUNnQ0RFRURkQ0lhSUNBb0FoQWlIR3NpQ0VFZ1RnUkFJQVlvQUFBaUNFRVlkQ0FJUVFoMFFZQ0EvQWR4Y2lBSVFRaDJRWUQrQTNFZ0NFRVlkbkp5SVJNZ0lDZ0NDQ0lJUlEwQklCTWdDSFFnQmkwQUJFRUlJQWhyZG5JaEV3d0JDeUFJUVFGSUJFQkJBQ0VUREFFTElBWXRBQUFnSUNnQ0NDSVhRUmhxSWc1MElSTWdDQ0FYYWtFSWF5SUlRUUZJRFFBRFFDQUdMUUFCSUE1QkNHc2lEblFnRTNJaEV5QUlRUWhLSVJjZ0JrRUJhaUVHSUFoQkNHc2hDQ0FYRFFBTEMwRUJJUWdnSUNBY1FRRnFJZ1kyQWhBZ0lDQUdRUWR4TmdJSUlBWWdHa3NOQ1NBZ0lDQW9BZ0FnQmtFRGRtbzJBZ1FnSHlBVFFYOXpRUjkySWdZMkF0UUREQUVMSUNBZ0gwSFVBMm9RQWdSQVFRRWhDQXdKQ3lBZktBTFVBeUVHQ3lBR0lBMVBCRUJCQVNFSURBZ0xJQW9nREVFQ2RHb2dCallDa0FFZ0IwRUJheUVHSUF4QkFXb2hEQ0FIRFFBTEMwRURJUWhCQUNFR0lBbEJBMDBFUUNBSlFRSjBRZndxYWlnQ0FDRUlDd0pBQWtBRFFDQUlJUWNnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQ0FKL0lCOG9BdGdESWdsQmYwWUVRRUdBZ0lDQWVDQUlEUUVhREFRTElBZ05BeUFKUVFGcVFRRjJJZ2hCQUNBSWF5QUpRUUZ4R3dzaENDQUtJQVpCQW5ScUlna2dDRHNCb0FFZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQUpBbjhnSHlnQzJBTWlDVUYvUmdSQVFZQ0FnSUI0SUFnTkFSb01Bd3NnQ0EwQ0lBbEJBV3BCQVhZaUNFRUFJQWhySUFsQkFYRWJDenNCb2dFZ0IwRUJheUVJSUFaQkFXb2hCaUFIRFFBTFFRQWhDQXdIQzBFQklRZ01CZ3RCQVNFSURBVUxJQW9nQ0VFY2RqWUNUQ0FJUVFSMElRbEJBUXNoQmlBS0lBbEJIM1kyQWhBZ0NpQUpRWDlNQkg4Z0NVRUJkQVVnQ2lBSlFSeDJOZ0pRSUFaQkFXb2hCaUFKUVFSMEN5SUhRUjkyTmdJVUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDVkNBR1FRRnFJUVlnQjBFRWRBc2lCMEVmZGpZQ0dDQUtJQWRCQUVnRWZ5QUhRUUYwQlNBS0lBZEJISFkyQWxnZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFod2dDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdKY0lBWkJBV29oQmlBSFFRUjBDeUlIUVI5Mk5nSWdJQW9nQjBFQVNBUi9JQWRCQVhRRklBb2dCMEVjZGpZQ1lDQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNKQ0FLSUFkQkFFZ0VmeUFIUVFGMEJTQUtJQWRCSEhZMkFtUWdCa0VCYWlFR0lBZEJCSFFMSWdkQkgzWTJBaWdnQjBFQVRnUkFJQW9nQjBFY2RqWUNhQ0FHUVFGcUlRWUxJQ0FnSUNnQ0VDQUdRUU5zYWtFSWFpSUpOZ0lRSUNBZ0NVRUhjU0lITmdJSVFRRWhDQ0FnS0FJTVFRTjBJZ3dnQ1VrTkF5QWdJQ0FvQWdBaURTQUpRUU4yYWlJR05nSUVBbjhDUUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUNVRVlkQ0FKUVFoMFFZQ0EvQWR4Y2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SVJNZ0IwVU5BU0FUSUFkMElBWXRBQVJCQ0NBSGEzWnlJUk1NQVFzZ0NVRUFUQVJBUVFBaEV5QUtRUUEyQWl3TUFnc2dCaTBBQUNBSFFSaHlJZzUwSVJNZ0J5QUpha0VJYXlJSlFRRklEUUFEUUNBR0xRQUJJQTVCQ0dzaURuUWdFM0loRXlBSlFRaEtJUWNnQmtFQmFpRUdJQWxCQ0dzaENTQUhEUUFMQ3lBS0lCTkJIM1kyQWl3Z0UwRi9TZzBBSUJOQkFYUWhDVUVBREFFTElBb2dFMEVjZGpZQ2JDQVRRUVIwSVFsQkFRc2hCaUFLSUFsQkgzWTJBakFnQ2lBSlFRQklCSDhnQ1VFQmRBVWdDaUFKUVJ4Mk5nSndJQVpCQVdvaEJpQUpRUVIwQ3lJSFFSOTJOZ0kwSUFvZ0IwRUFTQVIvSUFkQkFYUUZJQW9nQjBFY2RqWUNkQ0FHUVFGcUlRWWdCMEVFZEFzaUIwRWZkallDT0NBS0lBZEJBRWdFZnlBSFFRRjBCU0FLSUFkQkhIWTJBbmdnQmtFQmFpRUdJQWRCQkhRTElnZEJIM1kyQWp3Z0NpQUhRUUJJQkg4Z0IwRUJkQVVnQ2lBSFFSeDJOZ0o4SUFaQkFXb2hCaUFIUVFSMEN5SUhRUjkyTmdKQUlBb2dCMEVBU0FSL0lBZEJBWFFGSUFvZ0IwRWNkallDZ0FFZ0JrRUJhaUVHSUFkQkJIUUxJZ2RCSDNZMkFrUWdDaUFIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLRUFTQUdRUUZxSVFZZ0IwRUVkQXNpQjBFZmRqWUNTQ0FIUVFCSUJIOGdCMEVCZEFVZ0NpQUhRUngyTmdLSUFTQUdRUUZxSVFZZ0IwRUVkQXNoQnlBZ0lDQW9BaEFnQmtFRGJHcEJDR29pQmpZQ0VDQWdJQVpCQjNFMkFnZ2dCaUFnS0FJTVFRTjBTdzBESUNBZ0RTQUdRUU4yYWpZQ0JDQWZJQWMyQXRRREMwRUJJUWdnSUNBZlFkUURhaEFDRFFJZ0h5Z0MxQU1pQmtFRFN3MENJQW9nQmpZQ2pBRkJBQ0VJREFJTElDQWdIMEhVQTJvZ0RVRUNTeUlHRUJFRVFFRUJJUWdNQWdzZ0RTQWZLQUxVQXlJSFRRUkFRUUVoQ0F3Q0N5QUtJQWMyQXNBQklDQWdIMEhVQTJvZ0JoQVJCRUJCQVNFSURBSUxJQTBnSHlnQzFBTWlCMDBFUUVFQklRZ01BZ3NnQ2lBSE5nTEVBU0FnSUI5QjFBTnFJQVlRRVFSQVFRRWhDQXdDQ3lBTklCOG9BdFFESWdkTkJFQkJBU0VJREFJTElBb2dCellDeUFFZ0lDQWZRZFFEYWlBR0VCRUVRRUVCSVFnTUFnc2dEU0FmS0FMVUF5SUdUUVJBUVFFaENBd0NDeUFLSUFZMkFzd0JDeUFmSUFvb0FyQUJJZ2xCQWswRWZ5QUpRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdKQUFrQURRQ0FmUVFBMkF0Z0RJQ0FnSDBIWUEyb1FBaUVIQW44Z0h5Z0MyQU1pQ0VGL1JnUkFRWUNBZ0lCNElBY05BUm9NQkFzZ0J3MERJQWhCQVdwQkFYWWlCMEVBSUFkcklBaEJBWEViQ3lFSElBb2dCa0VDZEdvaUNTQUhPd0hRQVNBZlFRQTJBdGdESUNBZ0gwSFlBMm9RQWlFSUlBa0NmeUFmS0FMWUF5SUpRWDlHQkVCQmdJQ0FnSGdnQ0EwQkdnd0RDeUFJRFFJZ0NVRUJha0VCZGlJSFFRQWdCMnNnQ1VFQmNSc0xJZ2s3QWRJQklCOGdIeWdDMUFNaUIwRUJhellDMUFNZ0JrRUJhaUVHSUFjTkFBc2dIeUFLS0FLMEFTSUdRUU5KQkg4Z0JrRUNkRUh3S21vb0FnQUZRUU1MTmdMVUEwRUFJUVlDUUFOQUlCOUJBRFlDMkFNZ0lDQWZRZGdEYWhBQ0lRY0NRQ0FmS0FMWUF5SUlRWDlHQkVCQmdJQ0FnSGdoQ0NBSFJRMEZEQUVMSUFjTkJDQUlRUUZxUVFGMklnZEJBQ0FIYXlBSVFRRnhHeUVJQ3lBS0lBWkJBblJxSWdrZ0NEc0I0QUVnSDBFQU5nTFlBeUFnSUI5QjJBTnFFQUloQnlBSkFuOGdIeWdDMkFNaUNVRi9SZ1JBUVlDQWdJQjRJQWNOQVJvTUF3c2dCdzBDSUFsQkFXcEJBWFlpQjBFQUlBZHJJQWxCQVhFYkN5SUpPd0hpQVNBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCaUFIRFFBTElCOGdDVFlDMEFNZ0h5QUtLQUs0QVNJR1FRSk5CSDhnQmtFQ2RFSHdLbW9vQWdBRlFRTUxOZ0xVQTBFQUlRWURRQ0FnSUI5QjBBTnFFQkFFUUVFQklRZ01CUXNnQ2lBR1FRSjBhaUlISUI4b0F0QURPd0h3QVNBZ0lCOUIwQU5xRUJBRVFFRUJJUWdNQlFzZ0J5QWZLQUxRQXpzQjhnRWdIeUFmS0FMVUF5SUhRUUZyTmdMVUF5QUdRUUZxSVFZZ0J3MEFDeUFmSUFvb0Fyd0JJZ1pCQWswRWZ5QUdRUUowUWZBcWFpZ0NBQVZCQXdzMkF0UURRUUFoQmdOQUlDQWdIMEhRQTJvUUVBUkFRUUVoQ0F3RkN5QUtJQVpCQW5ScUlnY2dIeWdDMEFNN0FZQUNJQ0FnSDBIUUEyb1FFQVJBUVFFaENBd0ZDeUFISUI4b0F0QURPd0dDQWlBZklCOG9BdFFESWdkQkFXczJBdFFESUFaQkFXb2hCa0VBSVFnZ0J3MEFDd3dEQ3lBZklBZzJBdEFEUVFFaENBd0NDeUFmSUFjMkF0QURRUUVoQ0F3QkN5QWZJQWsyQXRBRFFRRWhDQXRCQVNFR0lBZ05Bd0pBSUJKQkFVY0VRQ0FnSUI5QjJBTnFFQUlOQlNBZktBTFlBeUlIUVRCUERRVWdDa0hRUDBHZ1B5QVBHeUFIYWkwQUFDSUhOZ0lFSUFkRkRRSU1BUXNnQ2lBS0tBSUFJZ2RCQjJzaUNFRUNkRUZ3Y1NJSlFUQnJJQWtnQ0VFTFN4dEJEMEVBSUFkQkVrc2JjallDQkFzZ0gwRUFOZ0xZQXlBZ0lCOUIyQU5xRUFJaENDQWZLQUxZQXlJSFFYOUdEUU1nQ0EwRElBZEJBV3BCQVhZaUNFRUFJQWhySUFkQkFYRWJJZ2RCWmtnTkF5QUhRUmxLRFFNZ0VTQXhhaUVNSUFvZ0J6WUNDQ0FLS0FJRUlRZ0NRQUpBSUFvb0FnQkJCMGtFUUVFQUlRbEJBeUVHQTBBZ0JpRUhJQWhCQVhFRVFDQWpJQWxCQW5ScVFiZ05haUFnSUNNZ0NVRUdkR3BCT0dvZ0RDQUpJQ01RQ2tFUUVBWWlCa0VRZGpZQ0FDQUdRUTl4RFFRZ0l5QUpRUUYwYWlBR1FRUjJRZjhCY1RzQkFDQWpJQWxCQVhJaURrRUNkR3BCdUExcUlDQWdJeUFPUVFaMGFrRTRhaUFNSUE0Z0l4QUtRUkFRQmlJR1FSQjJOZ0lBSUFaQkQzRU5CQ0FqSUE1QkFYUnFJQVpCQkhaQi93RnhPd0VBSUNNZ0NVRUNjaUlPUVFKMGFrRzREV29nSUNBaklBNUJCblJxUVRocUlBd2dEaUFqRUFwQkVCQUdJZ1pCRUhZMkFnQWdCa0VQY1EwRUlDTWdEa0VCZEdvZ0JrRUVka0gvQVhFN0FRQWdJeUFKUVFOeUlnNUJBblJxUWJnTmFpQWdJQ01nRGtFR2RHcEJPR29nRENBT0lDTVFDa0VRRUFZaUJrRVFkallDQUNBR1FROXhEUVFnQ2lBT1FRRjBhaUFHUVFSMlFmOEJjVHNCa0FJTElBaEJBWFloQ0NBSFFRRnJJUVlnQ1VFRWFpRUpJQWNOQUFzTUFRc2dJQ0JOSUF4QkFDQWpFQXBCRUJBR0lnWkJEM0VOQVNBS0lBWkJCSFpCL3dGeE93SEFBa0VBSVFsQkF5RUdBMEFnQmlFSElBaEJBWEVFUUNBaklBbEJBblJxUWJnTmFpQWdJQ01nQ1VFR2RHcEJQR29nRENBSklDTVFDa0VQRUFZaUJrRVBkallDQUNBR1FROXhEUU1nSXlBSlFRRjBhaUFHUVFSMlFmOEJjVHNCQUNBaklBbEJBWElpRGtFQ2RHcEJ1QTFxSUNBZ0l5QU9RUVowYWtFOGFpQU1JQTRnSXhBS1FROFFCaUlHUVE5Mk5nSUFJQVpCRDNFTkF5QWpJQTVCQVhScUlBWkJCSFpCL3dGeE93RUFJQ01nQ1VFQ2NpSU9RUUowYWtHNERXb2dJQ0FqSUE1QkJuUnFRVHhxSUF3Z0RpQWpFQXBCRHhBR0lnWkJEM1kyQWdBZ0JrRVBjUTBESUNNZ0RrRUJkR29nQmtFRWRrSC9BWEU3QVFBZ0l5QUpRUU55SWc1QkFuUnFRYmdOYWlBZ0lDTWdEa0VHZEdwQlBHb2dEQ0FPSUNNUUNrRVBFQVlpQmtFUGRqWUNBQ0FHUVE5eERRTWdDaUFPUVFGMGFpQUdRUVIyUWY4QmNUc0JrQUlMSUFoQkFYWWhDQ0FIUVFGcklRWWdDVUVFYWlFSklBY05BQXNMSUFoQkEzRUVRQ0FnSUV4QmYwRUVFQVlpQmtFUGNRMEJJQW9nQmtFRWRrSC9BWEU3QWNJQ0lDQWdTMEYvUVFRUUJpSUdRUTl4RFFFZ0NpQUdRUVIyUWY4QmNUc0J4QUlMUVFBaEJpQUlRUUp4UlEwQUlDQWdUeUFNUVJBZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJQXBCaUJCcUlBZEJEM1kyQWdBZ0ZpQUhRUVIyUWY4QmNUc0JzQUlnSUNBN0lBeEJFU0FqRUFwQkR4QUdJZ2RCRDNFRVFDQUhJUVlNQVFzZ1VDQUhRUTkyTmdJQUlCWWdCMEVFZGtIL0FYRTdBYklDSUNBZ1VTQU1RUklnSXhBS1FROFFCaUlIUVE5eEJFQWdCeUVHREFFTElGSWdCMEVQZGpZQ0FDQVdJQWRCQkhaQi93RnhPd0cwQWlBZ0lHRWdERUVUSUNNUUNrRVBFQVlpQjBFUGNRUkFJQWNoQmd3QkN5QmlJQWRCRDNZMkFnQWdGaUFIUVFSMlFmOEJjVHNCdGdJZ0lDQmpJQXhCRkNBakVBcEJEeEFHSWdkQkQzRUVRQ0FISVFZTUFRc2daQ0FIUVE5Mk5nSUFJQllnQjBFRWRrSC9BWEU3QWJnQ0lDQWdaU0FNUVJVZ0l4QUtRUThRQmlJSFFROXhCRUFnQnlFR0RBRUxJR1lnQjBFUGRqWUNBQ0FXSUFkQkJIWkIvd0Z4T3dHNkFpQWdJR2NnREVFV0lDTVFDa0VQRUFZaUIwRVBjUVJBSUFjaEJnd0JDeUJvSUFkQkQzWTJBZ0FnRmlBSFFRUjJRZjhCY1RzQnZBSWdJQ0JwSUF4QkZ5QWpFQXBCRHhBR0lnZEJEM0VFUUNBSElRWU1BUXNnYWlBSFFROTJOZ0lBSUJZZ0IwRUVka0gvQVhFN0FiNENDeUFnSUNBb0FnZ2dJQ2dDQkNBZ0tBSUFhMEVEZEdvMkFoQWdCZzBEQzBFQUlUa0xJQUFvQWd3b0FrQWhKQ0FBS0FLOENTSXBJREZxSWc0Z0ZpZ0NBQ0lNTmdJQUlBNGdEaWdDeEFGQkFXb2lCellDeEFFZ0t5QXJLQUlBSWdnZ0tpQXJLQUlFSWdsd0lnWkJCSFJxSUNvZ0Jtc2lDa0VJZEdvMkFnd2dLeUFJSUFrZ0t5Z0NDR3dpQ1VFSWRHb2dDa0VHZEdvZ0JrRURkR29pQmpZQ0VDQXJJQVlnQ1VFR2RHbzJBaFFDUUFKQUFrQUNRQUpBQW44Q1FBSkFBbjhDUUFKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUlBd0VRQ0FNUVI5R0JFQWdLU0F4YWlJR1FRQTJBaFFnQmtFY2FpRUlJQWRCQWs4TkFrRVhJUm9nSDBFUWFpRUdJQlFoQ1FOQUlBaEJFRHNCQUNBR0lBa29BZ0E2QUFBZ0JpQUpLQUlFT2dBQklBWWdDU2dDQ0RvQUFpQUdJQWtvQWd3NkFBTWdCaUFKS0FJUU9nQUVJQVlnQ1NnQ0ZEb0FCU0FHSUFrb0FoZzZBQVlnQmlBSktBSWNPZ0FISUFZZ0NTZ0NJRG9BQ0NBR0lBa29BaVE2QUFrZ0JpQUpLQUlvT2dBS0lBWWdDU2dDTERvQUN5QUdJQWtvQWpBNkFBd2dCaUFKS0FJME9nQU5JQVlnQ1NnQ09Eb0FEaUFHSUFrb0FqdzZBQThnR2lJSFFRRnJJUm9nQ0VFQ2FpRUlJQVpCRUdvaEJpQUpRVUJySVFrZ0J3MEFDeUFySUI5QkVHb1FEd3dWQ3lBcElERnFJaGNnSXlrQ0FEY0NIQ0FYSUNNcEFTNDNBVW9nRnlCcktRSW9Od0pFSUJjZ0l5a0NJRGNDUENBWElDTXBBaGczQWpRZ0Z5QWpLUUlRTndJc0lCY2dJeWtDQ0RjQ0pBSkFJQllvQWdnaUJrVU5BQUpBSUFZZ0xXb2lMVUVBU0FSQVFUUWhCZ3dCQzBGTUlRWWdMVUUwU0EwQkN5QUdJQzFxSVMwTElCZEJIR29oQnlBWElDMDJBaFFDUUFKQUlBeEJCazBFUUNBSEx3RUFSUTBCSUJRZ0xVRUFJQ2dvQWdBUUJVVU5Ba0VCSVFZTUdRdEJzQ29oR2tFUElRWWdGeThCVEFSQUlCWW9Bb0FQSWdnZ0ZpZ0M3QTRpQ1dvaUNpQVdLQUtFRHlJU0lCWW9BdkFPSWhGcUlnOXJJUTBnQ1NBSWF5SUlJQkVnRW1zaUNXc2hFaUFJSUFscUlSRWdDaUFQYWlFUElCWW9BdlFPSWdnZ0ZpZ0MxQTRpQ1dvaUNpQVdLQUw4RGlJY0lCWW9BdWdPSWhWcUloQnJJUk1nQ1NBSWF5SUlJQlVnSEdzaUNXc2hIQ0FJSUFscUlSVWdDaUFRYWlFUUlCWW9BdVFPSWdnZ0ZpZ0MwQTRpQ1dvaUNpQVdLQUw0RGlJZUlCWW9BdGdPSWlGcUlpSnJJUmtnQ1NBSWF5SUlJQ0VnSG1zaUNXc2hIaUFJSUFscUlTRWdDaUFpYWlFaUlCWW9BdHdPSWdnZ0ZpZ0N5QTRpQ1dvaUNpQVdLQUxnRGlJbElCWW9Bc3dPSWl4cUlpNXJJUjBnQ1NBSWF5SUlJQ3dnSldzaUNXc2hKU0FJSUFscUlTd2dDaUF1YWlFdUlDMUJnRHhxTFFBQUlRb2dMVUdRUFdvdEFBQkJER3hCd0R4cUtBSUFJUWdnRmdKL0lDMUJERThFUUNBV0lBZ2dDa0VDYTNRaUNDQVFJQzVxSWdrZ0R5QWlhaUlLYTJ3MkF2Z09JQllnTGlBUWF5SVFJQ0lnRDJzaUQyc2dDR3cyQXVnT0lCWWdEeUFRYWlBSWJEWUMyQTRnRmlBSklBcHFJQWhzTmdMSURpQVdJQlVnTEdvaUNTQVJJQ0ZxSWdwcklBaHNOZ0w4RGlBV0lDd2dGV3NpRHlBaElCRnJJaEZySUFoc05nTHNEaUFXSUE4Z0VXb2dDR3cyQXR3T0lCWWdDU0FLYWlBSWJEWUN6QTRnRmlBY0lDVnFJZ2tnRWlBZWFpSUtheUFJYkRZQ2dBOGdGaUFsSUJ4ckloRWdIaUFTYXlJU2F5QUliRFlDOEE0Z0ZpQVJJQkpxSUFoc05nTGdEaUFXSUFrZ0Ntb2dDR3cyQXRBT0lCWWdIU0FUYXlJSklCa2dEV3NpQ21zZ0NHdzJBdlFPSUJZZ0NTQUthaUFJYkRZQzVBNGdGaUFOSUJscUlna2dFeUFkYWlJS2FpQUliRFlDMUE0Z0NpQUpheUFJYkF3QkN5QVdRUUZCQWlBdFFRWnJRUVpKR3lJSklCQWdMbW9pSmlBUElDSnFJak5ySUFoc2FrRUNJQXBySWdwMU5nTDREaUFXSUM0Z0VHc2lFQ0FpSUE5cklnOXJJQWhzSUFscUlBcDFOZ0xvRGlBV0lBOGdFR29nQ0d3Z0NXb2dDblUyQXRnT0lCWWdKaUF6YWlBSWJDQUphaUFLZFRZQ3lBNGdGaUFWSUN4cUlnOGdFU0FoYWlJUWF5QUliQ0FKYWlBS2RUWUMvQTRnRmlBc0lCVnJJaFVnSVNBUmF5SVJheUFJYkNBSmFpQUtkVFlDN0E0Z0ZpQVJJQlZxSUFoc0lBbHFJQXAxTmdMY0RpQVdJQThnRUdvZ0NHd2dDV29nQ25VMkFzd09JQllnSENBbGFpSVJJQklnSG1vaUQyc2dDR3dnQ1dvZ0NuVTJBb0FQSUJZZ0pTQWNheUljSUI0Z0Vtc2lFbXNnQ0d3Z0NXb2dDblUyQXZBT0lCWWdFaUFjYWlBSWJDQUphaUFLZFRZQzRBNGdGaUFQSUJGcUlBaHNJQWxxSUFwMU5nTFFEaUFXSUIwZ0Uyc2lFaUFaSUExckloRnJJQWhzSUFscUlBcDFOZ0wwRGlBV0lCRWdFbW9nQ0d3Z0NXb2dDblUyQXVRT0lCWWdEU0FaYWlJTklCTWdIV29pRW1vZ0NHd2dDV29nQ25VMkF0UU9JQklnRFdzZ0NHd2dDV29nQ25VTE5nS0VEd3NnRkNFSklDZ2hDQU5BSUFZaENpQUpJQllnR2lnQ0FFRUNkR3BCeUE1cUtBSUFJZ1kyQWdBQ1FBSkFJQVpGQkVBZ0J5OEJBRVVOQVF0QkFTRUdJQWtnRnlnQ0ZFRUJJQWdvQWdBUUJVVU5BUXdiQ3lBSlFmLy8vd2MyQWdBTElCcEJCR29oR2lBS1FRRnJJUVlnQ0VFRWFpRUlJQWRCQW1vaEJ5QUpRVUJySVFrZ0NnMEFDd3dFQ3lBVVFmLy8vd2MyQWdBTEFrQWdGeThCSGdSQUlFb2dGeWdDRkVFQUlCWW9Bc3dQRUFWRkRRRkJBU0VHREJnTElFcEIvLy8vQnpZQ0FBc0NRQ0FYTHdFZ0JFQWdTU0FYS0FJVVFRQWdGaWdDMEE4UUJVVU5BVUVCSVFZTUdBc2dTVUgvLy84SE5nSUFDd0pBSUJjdkFTSUVRQ0JJSUJjb0FoUkJBQ0FXS0FMVUR4QUZSUTBCUVFFaEJnd1lDeUJJUWYvLy93YzJBZ0FMQWtBZ0Z5OEJKQVJBSUVjZ0Z5Z0NGRUVBSUJZb0F0Z1BFQVZGRFFGQkFTRUdEQmdMSUVkQi8vLy9CellDQUFzQ1FDQVhMd0VtQkVBZ1JpQVhLQUlVUVFBZ0ZpZ0MzQThRQlVVTkFVRUJJUVlNR0FzZ1JrSC8vLzhITmdJQUN3SkFJQmN2QVNnRVFDQkZJQmNvQWhSQkFDQVdLQUxnRHhBRlJRMEJRUUVoQmd3WUN5QkZRZi8vL3djMkFnQUxBa0FnRnk4QktnUkFJRVFnRnlnQ0ZFRUFJQllvQXVRUEVBVkZEUUZCQVNFR0RCZ0xJRVJCLy8vL0J6WUNBQXNDUUNBWEx3RXNCRUFnUXlBWEtBSVVRUUFnRmlnQzZBOFFCVVVOQVVFQklRWU1HQXNnUTBILy8vOEhOZ0lBQ3dKQUlCY3ZBUzRFUUNCQ0lCY29BaFJCQUNBV0tBTHNEeEFGUlEwQlFRRWhCZ3dZQ3lCQ1FmLy8vd2MyQWdBTEFrQWdGeThCTUFSQUlFRWdGeWdDRkVFQUlCWW9BdkFQRUFWRkRRRkJBU0VHREJnTElFRkIvLy8vQnpZQ0FBc0NRQ0FYTHdFeUJFQWdRQ0FYS0FJVVFRQWdGaWdDOUE4UUJVVU5BVUVCSVFZTUdBc2dRRUgvLy84SE5nSUFDd0pBSUJjdkFUUUVRQ0EvSUJjb0FoUkJBQ0FXS0FMNER4QUZSUTBCUVFFaEJnd1lDeUEvUWYvLy93YzJBZ0FMQWtBZ0Z5OEJOZ1JBSUQ0Z0Z5Z0NGRUVBSUJZb0F2d1BFQVZGRFFGQkFTRUdEQmdMSUQ1Qi8vLy9CellDQUFzQ1FDQVhMd0U0QkVBZ09pQVhLQUlVUVFBZ0ZpZ0NnQkFRQlVVTkFVRUJJUVlNR0FzZ09rSC8vLzhITmdJQUN5QVhMd0U2QkVBZ05pRUlJQnNoQ1NBM0lCY29BaFJCQUNBV0tBS0VFQkFGUlEwRFFRRWhCZ3dYQ3lBM1FmLy8vd2MyQWdBZ05pRUlJQnNoQ1F3Q0N5QXBJREZxSWdaQ0FEY0NIQ0FHSUMwMkFoUWdCa0lBTndGS0lBWkNBRGNDUkNBR1FnQTNBandnQmtJQU53STBJQVpDQURjQ0xDQUdRZ0EzQWlRZ0h5QXJLQUlFSWdZMkF0d0RJQjhnS3lnQ0NEWUM0QU1nS2lBR2JpSUhRUVIwSVJrZ0tpQUdJQWRzYTBFRWRDRWVRUUFoSEF3Q0N5QUlRUkE3QVFBZ0JrRVFPd0ZLSUFaQmtJREFBRFlCUmlBR1FwQ0F3SUNBZ29BSU53RStJQVpDa0lEQWdJQ0NnQWczQVRZZ0JrS1FnTUNBZ0lLQUNEY0JMaUFHUXBDQXdJQ0Fnb0FJTndFbUlBWkNrSURBZ0lDQ2dBZzNBUjRNRWdzZ0Z5Z0NHQ0FYS0FJVWFpSUdRVE1nQmtFelNCc2lCa0VBSUFaQkFFb2JJZ2RCQW5SQjBEMXFLQUlBSVFvQ1FBSkFJQmN2QVU0TkFDQVhMd0ZRRFFBZ1RDZ0NBQ0VIREFFTElBcEJrRDFxTFFBQVFReHNRY0E4YWlnQ0FDRUdRUUVoRXlBSFFRWnJRUzFOQkVCQkFDRVRJQVlnQ2tHQVBHb3RBQUJCQVd0MElRWUxJQllnRmlnQ2lBOGlCeUFXS0FLUUR5SU5heUlTSUJZb0Fvd1BJaEVnRmlnQ2xBOGlEMnNpR21zZ0Jtd2dFM1UyQXBRUElCWWdFaUFhYWlBR2JDQVRkVFlDa0E4Z0ZpQUhJQTFxSWdjZ0R5QVJhaUlOYXlBR2JDQVRkVFlDakE4Z0ZpQUhJQTFxSUFac0lCTjFJZ2MyQW9nUElCWWdGaWdDcEE4aURTQVdLQUtjRHlJU2FpSVJJQllvQXFBUElnOGdGaWdDbUE4aUdtb2lIR29nQm13Z0UzVTJBcGdQSUJZZ0VpQU5heUlOSUJvZ0Qyc2lFbW9nQm13Z0UzVTJBcUFQSUJZZ0hDQVJheUFHYkNBVGRUWUNuQThnRmlBU0lBMXJJQVpzSUJOMU5nS2tEd3NnQ1NBSE5nSUFBa0FDUUNBSFJRUkFJQmN2QVR4RkRRRUxRUUVoQmlBSklBcEJBU0FJS0FJQUVBVkZEUUVNRlFzZ0NVSC8vLzhITmdJQUN5QUpJQllvQW93UElnWTJBa0FnQ1VGQWF5RUhBa0FDUUNBR1JRUkFJQmN2QVQ1RkRRRUxRUUVoQmlBSElBcEJBU0FJS0FJRUVBVkZEUUVNRlFzZ0IwSC8vLzhITmdJQUN5QUpJQllvQXBBUElnWTJBb0FCSUFsQmdBRnFJUWNDUUFKQUlBWkZCRUFnRjBGQWF5OEJBRVVOQVF0QkFTRUdJQWNnQ2tFQklBZ29BZ2dRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUFrZ0ZpZ0NsQThpQmpZQ3dBRWdDVUhBQVdvaEJ3SkFBa0FnQmtVRVFDQVhMd0ZDUlEwQkMwRUJJUVlnQnlBS1FRRWdDQ2dDREJBRlJRMEJEQlVMSUFkQi8vLy9CellDQUFzZ0NTQkxLQUlBSWdZMkFvQUNJQWxCZ0FKcUlRY0NRQUpBSUFaRkJFQWdGeThCUkVVTkFRdEJBU0VHSUFjZ0NrRUJJQWdvQWhBUUJVVU5BUXdWQ3lBSFFmLy8vd2MyQWdBTElBa2dGaWdDbkE4aUJqWUN3QUlnQ1VIQUFtb2hCd0pBQWtBZ0JrVUVRQ0FYTHdGR1JRMEJDMEVCSVFZZ0J5QUtRUUVnQ0NnQ0ZCQUZSUTBCREJVTElBZEIvLy8vQnpZQ0FBc2dDU0FXS0FLZ0R5SUdOZ0tBQXlBSlFZQURhaUVIQWtBQ1FDQUdSUVJBSUJjdkFVaEZEUUVMUVFFaEJpQUhJQXBCQVNBSUtBSVlFQVZGRFFFTUZRc2dCMEgvLy84SE5nSUFDeUFKSUJZb0FxUVBJZ1kyQXNBRElBbEJ3QU5xSVFjQ1FBSkFJQVpGQkVBZ0Z5OEJTa1VOQVF0QkFTRUdJQWNnQ2tFQklBZ29BaHdRQlVVTkFRd1ZDeUFIUWYvLy93YzJBZ0FMSUF4QkJrOEVRQ0FPSVFrZ0gwRVFhaUVaUVFBaEUwRUFJUThqQUVIUUFHc2lFQ1FBQWtBZ0trVU5BQ0FyS0FJQUlnMGdLaUFyS0FJRUlncHVJaEVnQ213aUJrRUlkR29nS2lBR2F5SU1RUVIwYWlFSUlBcEJCSFFoQnlBcktBSUlJUTRnRUVFZ2FpRVNJQW9nS2tzaUdrVUVRQ0FRSUFnZ0IwRi9jMm9pQmkwQUFEb0FJQ0FRSUFnZ0Iyc3RBQUE2QUNFZ0VDQUdMUUFDT2dBaUlCQWdCaTBBQXpvQUl5QVFJQVl0QUFRNkFDUWdFQ0FHTFFBRk9nQWxJQkFnQmkwQUJqb0FKaUFRSUFZdEFBYzZBQ2NnRUNBR0xRQUlPZ0FvSUJBZ0JpMEFDVG9BS1NBUUlBWXRBQW82QUNvZ0VDQUdMUUFMT2dBcklCQWdCaTBBRERvQUxDQVFJQVl0QUEwNkFDMGdFQ0FHTFFBT09nQXVJQkFnQmkwQUR6b0FMeUFRSUFZdEFCQTZBREFnRUNBR0xRQVJPZ0F4SUJBZ0JpMEFFam9BTWlBUUlBWXRBQk02QURNZ0VDQUdMUUFVT2dBMElCQkJOV29oRWdzZ0NpQU9iQ0VPSUF3RWZ5QVFJQWhCQVdzaUJpMEFBRG9BQUNBUUlBWWdCMm9pQmkwQUFEb0FBU0FRSUFZZ0Iyb2lCaTBBQURvQUFpQVFJQVlnQjJvaUJpMEFBRG9BQXlBUUlBWWdCMm9pQmkwQUFEb0FCQ0FRSUFZZ0Iyb2lCaTBBQURvQUJTQVFJQVlnQjJvaUJpMEFBRG9BQmlBUUlBWWdCMm9pQmkwQUFEb0FCeUFRSUFZZ0Iyb2lCaTBBQURvQUNDQVFJQVlnQjJvaUJpMEFBRG9BQ1NBUUlBWWdCMm9pQmkwQUFEb0FDaUFRSUFZZ0Iyb2lCaTBBQURvQUN5QVFJQVlnQjJvaUJpMEFBRG9BRENBUUlBWWdCMm9pQmkwQUFEb0FEU0FRSUFZZ0Iyb2lCaTBBQURvQURpQVFJQVlnQjJvdEFBQTZBQThnRUVFUWFnVWdFQXNoQmlBTklBNUJDSFJxSUJFZ0NrRURkQ0lIYkVFRGRHb2dERUVEZEdvaERTQUhRZmovLy84SGNTRUhJQnBGQkVBZ0VpQU5JQWRCZjNOcUlnZ3RBQUE2QUFBZ0VpQU5JQWRyTFFBQU9nQUJJQklnQ0MwQUFqb0FBaUFTSUFndEFBTTZBQU1nRWlBSUxRQUVPZ0FFSUJJZ0NDMEFCVG9BQlNBU0lBZ3RBQVk2QUFZZ0VpQUlMUUFIT2dBSElCSWdDRUVJYWlJSUxRQUFPZ0FJSUJJZ0RrRUdkQ0FJYWlJSVFRaHJMUUFBT2dBSklCSWdDRUVIYXkwQUFEb0FDaUFTSUFoQkJtc3RBQUE2QUFzZ0VpQUlRUVZyTFFBQU9nQU1JQklnQ0VFRWF5MEFBRG9BRFNBU0lBaEJBMnN0QUFBNkFBNGdFaUFJUVFKckxRQUFPZ0FQSUJJZ0NFRUJheTBBQURvQUVDQVNJQWd0QUFBNkFCRUxJQXhGRFFBZ0JpQU5RUUZySWdndEFBQTZBQUFnQmlBSElBaHFJZ2d0QUFBNkFBRWdCaUFISUFocUlnZ3RBQUE2QUFJZ0JpQUhJQWhxSWdndEFBQTZBQU1nQmlBSElBaHFJZ2d0QUFBNkFBUWdCaUFISUFocUlnZ3RBQUE2QUFVZ0JpQUhJQWhxSWdndEFBQTZBQVlnQmlBSElBaHFJZ2d0QUFBNkFBY2dCaUFISUFocUlBNGdDbXRCQm5ScUlnZ3RBQUE2QUFnZ0JpQUhJQWhxSWdndEFBQTZBQWtnQmlBSElBaHFJZ2d0QUFBNkFBb2dCaUFISUFocUlnZ3RBQUE2QUFzZ0JpQUhJQWhxSWdndEFBQTZBQXdnQmlBSElBaHFJZ2d0QUFBNkFBMGdCaUFISUFocUlnZ3RBQUE2QUE0Z0JpQUhJQWhxTFFBQU9nQVBDd0pBQWtBZ0NTZ0NBQ0lLUVFkUEJFQUNRQ0FKS0FMSUFTSUdSUVJBUVFBaENDQWtRUUJISVJJTUFRc2dKRUVBUnlFU0lBa29BZ1FpQnlBR0tBSUVJZ3hHSVFnZ0J5QU1SdzBBSUNSRkRRQkJBQ0FJSUFZb0FnQkJCa2tiSVFoQkFTRVNDMEVBSVJFQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRVNBU2NVVU5BRUVBSUJFZ0JpZ0NBRUVHU1JzaEVRc0NRQ0FKS0FMVUFTSUdSUTBBSUFrb0FnUWdCaWdDQkVZaUR5QVNjVVVOQUNBR0tBSUFRUVZMSVE4TFFRRWhCd0pBQWtBQ1FBSkFBa0FnQ2tFQmFrRURjUTREQUFFQ0F3c2dFVVVOQmtFQUlSRWdFQzBBTUNFR0lCQXRBQzhoQnlBUUxRQXVJUWdnRUMwQUxTRUtJQkF0QUN3aERDQVFMUUFySVE0Z0VDMEFLaUVOSUJBdEFDa2hFaUFRTFFBb0lROGdFQzBBSnlFYUlCQXRBQ1loSENBUUxRQWxJUmNnRUMwQUpDRVZJQkF0QUNNaEhpQVFMUUFpSVNFZ0VDMEFJU0VpSUJraEV3TkFJQk1nQmpvQUR5QVRJQWM2QUE0Z0V5QUlPZ0FOSUJNZ0Nqb0FEQ0FUSUF3NkFBc2dFeUFPT2dBS0lCTWdEVG9BQ1NBVElCSTZBQWdnRXlBUE9nQUhJQk1nR2pvQUJpQVRJQnc2QUFVZ0V5QVhPZ0FFSUJNZ0ZUb0FBeUFUSUI0NkFBSWdFeUFoT2dBQklCTWdJam9BQUNBVFFSQnFJUk1nRVVFQmFpSVJRUkJIRFFBTERBTUxJQWhGRFFVZ0dTQVFNUUFBUW9HQ2hJaVFvTUNBQVg0aWJqY0FDQ0FaSUc0M0FBQWdHU0FRTVFBQlFvR0NoSWlRb01DQUFYNGliamNBR0NBWklHNDNBQkFnR1NBUU1RQUNRb0dDaElpUW9NQ0FBWDRpYmpjQUtDQVpJRzQzQUNBZ0dTQVFNUUFEUW9HQ2hJaVFvTUNBQVg0aWJqY0FPQ0FaSUc0M0FEQWdHU0FRTVFBRVFvR0NoSWlRb01DQUFYNGliamNBU0NBWklHNDNBRUFnR1NBUU1RQUZRb0dDaElpUW9NQ0FBWDRpYmpjQVdDQVpJRzQzQUZBZ0dTQVFNUUFHUW9HQ2hJaVFvTUNBQVg0aWJqY0FhQ0FaSUc0M0FHQWdHU0FRTVFBSFFvR0NoSWlRb01DQUFYNGliamNBZUNBWklHNDNBSEFnR1NBUU1RQUlRb0dDaElpUW9NQ0FBWDRpYmpjQWlBRWdHU0J1TndDQUFTQVpJQkF4QUFsQ2dZS0VpSkNnd0lBQmZpSnVOd0NZQVNBWklHNDNBSkFCSUJrZ0VERUFDa0tCZ29TSWtLREFnQUYrSW00M0FLZ0JJQmtnYmpjQW9BRWdHU0FRTVFBTFFvR0NoSWlRb01DQUFYNGliamNBdUFFZ0dTQnVOd0N3QVNBWklCQXhBQXhDZ1lLRWlKQ2d3SUFCZmlKdU53RElBU0FaSUc0M0FNQUJJQmtnRURFQURVS0Jnb1NJa0tEQWdBRitJbTQzQU5nQklCa2diamNBMEFFZ0dTQVFNUUFPUW9HQ2hJaVFvTUNBQVg0aWJqY0E2QUVnR1NCdU53RGdBU0FaSUJBeEFBOUNnWUtFaUpDZ3dJQUJmaUp1TndENEFTQVpJRzQzQVBBQkRBSUxJQmtDZndKQUlBaEZEUUFnRVVVTkFDQVFMUUFQSUJBdEFEQWdFQzBBRGlBUUxRQXZJQkF0QUEwZ0VDMEFMaUFRTFFBTUlCQXRBQzBnRUMwQUN5QVFMUUFzSUJBdEFBb2dFQzBBS3lBUUxRQUpJQkF0QUNvZ0VDMEFDQ0FRTFFBcElCQXRBQWNnRUMwQUtDQVFMUUFHSUJBdEFDY2dFQzBBQlNBUUxRQW1JQkF0QUFRZ0VDMEFKU0FRTFFBRElCQXRBQ1FnRUMwQUFpQVFMUUFqSUJBdEFBRWdFQzBBSWlBUUxRQWhJQkF0QUFCcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFhbXBxYW1wcWFtcHFRUkJxUVFWMkRBRUxJQWdFUUNBUUxRQVBJQkF0QUE0Z0VDMEFEU0FRTFFBTUlCQXRBQXNnRUMwQUNpQVFMUUFKSUJBdEFBZ2dFQzBBQnlBUUxRQUdJQkF0QUFVZ0VDMEFCQ0FRTFFBRElCQXRBQUlnRUMwQUFDQVFMUUFCYW1wcWFtcHFhbXBxYW1wcWFtcHFRUWhxUVFSMkRBRUxRWUFCSUJGRkRRQWFJQkF0QURBZ0VDMEFMeUFRTFFBdUlCQXRBQzBnRUMwQUxDQVFMUUFySUJBdEFDb2dFQzBBS1NBUUxRQW9JQkF0QUNjZ0VDMEFKaUFRTFFBbElCQXRBQ1FnRUMwQUl5QVFMUUFoSUJBdEFDSnFhbXBxYW1wcWFtcHFhbXBxYW1wQkNHcEJCSFlMUVlBQ0VBTWFEQUVMSUFoQkFFY2dFVUVBUjNFZ0QzRkZEUU1nRUMwQUNDQVFMUUFHYXlBUUxRQVBJZ1lnRUMwQUlDSUhhMEVEZEdvZ0VDMEFDU0FRTFFBRmEwRUJkR29nRUMwQUNpQVFMUUFFYTBFRGJHb2dFQzBBQ3lBUUxRQURhMEVDZEdvZ0VDMEFEQ0FRTFFBQ2EwRUZiR29nRUMwQURTQVFMUUFCYTBFR2JHb2dFQzBBRGlBUUxRQUFhMEVIYkdwQkJXeEJJR3BCQm5VaENpQVFMUUFwSUJBdEFDZHJJQkF0QUNvZ0VDMEFKbXRCQVhScUlCQXRBQ3NnRUMwQUpXdEJBMnhxSUJBdEFDd2dFQzBBSkd0QkFuUnFJQkF0QUMwZ0VDMEFJMnRCQld4cUlCQXRBQzRnRUMwQUltdEJCbXhxSUJBdEFDOGdFQzBBSVd0QkIyeHFJQkF0QURBaURDQUhhMEVEZEdwQkJXeEJJR3BCQm5VaUNFRURkQ0VPSUFoQkIyd2hEU0FJUVFac0lSRWdDRUVGYkNFUElBaEJBMndoR2lBSVFYMXNJUk1nQ0VGN2JDRWNJQWhCZW13aEZ5QUlRWGxzSVJWQkFDQUlRUUYwSWg1cklTRkJBQ0FJUVFKMElpSnJJU2tnQmlBTWFrRUVkRUVRYWlFTVFRQWhFZ05BSUJrZ0VrRUVkR29pQmlBTUlCSkJCMnNnQ214cUlnZEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUhJQVlnQnlBWGFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBRWdCaUFISUJWcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUFDQUdJQWNnSEdwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBQ0lBWWdCeUFwYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUFNZ0JpQUhJQk5xUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BQkNBR0lBY2dJV3BCQlhVaUhVSC9BU0FkUWY4QlNCc2lIVUVBSUIxQkFFb2JPZ0FGSUFZZ0J5QUlhMEVGZFNJZFFmOEJJQjFCL3dGSUd5SWRRUUFnSFVFQVNoczZBQVlnQmlBSElBaHFRUVYxSWgxQi93RWdIVUgvQVVnYkloMUJBQ0FkUVFCS0d6b0FDQ0FHSUFjZ0htcEJCWFVpSFVIL0FTQWRRZjhCU0JzaUhVRUFJQjFCQUVvYk9nQUpJQVlnQnlBYWFrRUZkU0lkUWY4QklCMUIvd0ZJR3lJZFFRQWdIVUVBU2hzNkFBb2dCaUFISUNKcVFRVjFJaDFCL3dFZ0hVSC9BVWdiSWgxQkFDQWRRUUJLR3pvQUN5QUdJQWNnRDJwQkJYVWlIVUgvQVNBZFFmOEJTQnNpSFVFQUlCMUJBRW9iT2dBTUlBWWdCeUFSYWtFRmRTSWRRZjhCSUIxQi93RklHeUlkUVFBZ0hVRUFTaHM2QUEwZ0JpQUhJQTFxUVFWMUloMUIvd0VnSFVIL0FVZ2JJaDFCQUNBZFFRQktHem9BRGlBR0lBY2dEbXBCQlhVaUJrSC9BU0FHUWY4QlNCc2lCa0VBSUFaQkFFb2JPZ0FQSUJKQkFXb2lFa0VRUncwQUN3c2dHU0FXUWNnQ2FrRUFFQXNnR1NBV1FZZ0Rha0VCRUFzZ0dTQVdRY2dEYWtFQ0VBc2dHU0FXUVlnRWFrRURFQXNnR1NBV1FjZ0Vha0VFRUFzZ0dTQVdRWWdGYWtFRkVBc2dHU0FXUWNnRmFrRUdFQXNnR1NBV1FZZ0dha0VIRUFzZ0dTQVdRY2dHYWtFSUVBc2dHU0FXUVlnSGFrRUpFQXNnR1NBV1FjZ0hha0VLRUFzZ0dTQVdRWWdJYWtFTEVBc2dHU0FXUWNnSWFrRU1FQXNnR1NBV1FZZ0pha0VORUFzZ0dTQVdRY2dKYWtFT0VBc2dHU0FXUVlnS2FrRVBFQXNNQVFzZ0NVSElBV29oQ2lBSlFjd0JhaUVNSUFsQjBBRnFJUTRnQ1VIVUFXb2hEUU5BSUFvaEJ5QUpJUWhCQUNFR1FRQWhFUUpBQWtBQ1FBSkFBa0FDUUNBVFFRTjBJaEpCb0N0cUtRTUFJbTZuRGdVREFBRUNCQVVMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQUF3QkN5QUpLQUlFSWdZZ0NDZ0NCQ0lIUmlFUkFrQWdCaUFIUncwQUlDUkZEUUJCQUNBUklBZ29BZ0JCQmtrYklSRUxJQWdoQmdzZ0NpRUhJQWtoQ0FKQUFrQUNRQUpBQWtBQ1FBSkFJQkpCNEN4cUtRTUFJbStuRGdVREFBRUNCUVFMSUF3aEJ3d0NDeUFPSVFjTUFRc2dEU0VIQ3lBSEtBSUFJZ2dOQVF0QkFDRWhJQkZCQUVjaEYwRUNJUWRCQUNFcERBRUxJQWtvQWdRaUJ5QUlLQUlFSWc5R0lSd0NRQ0FISUE5SERRQWdKRVVOQUVFQUlCd2dDQ2dDQUVFR1NSc2hIQXRCQUNFaElCeEJBRWNoS1NBUlFRQkhJUmRCQWlFSElCRkZEUUFnSEVVTkFFRUNJUkVDZnlBR0tBSUFRUVpHQkVBZ0JpQnVRaUNJcDBIL0FYRnFMUUJTSVFjTElBY0xBbjhnQ0NnQ0FFRUdSZ1JBSUFnZ2IwSWdpS2RCL3dGeGFpMEFVaUVSQ3lBUkN5QUhJQkZKR3lFSFFRRWhJVUVCSVNsQkFTRVhDeUFXSUJOQkFuUWlFV29pQmlnQ0RFVUVRQ0FHS0FKTUlnWWdCaUFIVDJvaEJ3c2dDU0FUYWlBSE9nQlNRUUFoRlNBS0lRWWdDU0VJUVFBaEhnSkFBa0FDUUFKQUFrQUNRQ0FTUWFBdWFpZ0NBQTRGQXdBQkFnUUZDeUFNSVFZTUFnc2dEaUVHREFFTElBMGhCZ3NnQmlnQ0FDSUlSUTBCQ3lBSktBSUVJZ1lnQ0NnQ0JDSVBSaUVlSUFZZ0QwY05BQ0FrUlEwQVFRQWdIaUFJS0FJQVFRWkpHeUVlQ3lBS0lRWWdDU0VJQWtBQ1FBSkFBa0FDUUFKQUlCSkI0QzlxS0FJQURnVURBQUVDQkFVTElBd2hCZ3dDQ3lBT0lRWU1BUXNnRFNFR0N5QUdLQUlBSWdoRkRRRUxJQWtvQWdRaUJpQUlLQUlFSWhKR0lSVWdCaUFTUncwQUlDUkZEUUJCQUNBVklBZ29BZ0JCQmtrYklSVUxJQkZCOENscUtBSUFJU1lnRVVHd0tXb29BZ0FoTXdKQVFZVUtJQk4yUVFGeElpNEVRQ0FRSUNacUloRkJBMm9oRWlBUlFRSnFJUWdnRVVFQmFpRUdEQUVMSUNaQkJIUWdNMm9nR1dvaUVVRXZhaUVTSUJGQkgyb2hDQ0FSUVE5cUlRWWdFVUVCYXlFUkN5QUlMUUFBSVIwZ0VpMEFBQ0VJSUFZdEFBQWhKU0FSTFFBQUlTd0NRRUV6SUJOMlFRRnhCRUFnRUVFZ2FpQXphaUlSTFFBSUlROGdFUzBBQnlFd0lCRXRBQVloSWlBUkxRQUZJVFVnRVMwQUJDRVNJQkV0QUFNaEhDQVJMUUFDSVJvZ0VTMEFBU0VHREFFTElCa2dKa0VCYXlKVFFRUjBJRE5xYWlJUkxRQUFJUVlnRVMwQUJ5RVBJQkV0QUFZaE1DQVJMUUFGSVNJZ0VTMEFCQ0UxSUJFdEFBTWhFaUFSTFFBQ0lSd2dFUzBBQVNFYUlDNEVRQ0FRSUZOcUlSRU1BUXNnRVVFQmF5RVJDeUFSTFFBQUlTNENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FIRGdnQUFRSURCQVVHQndnTElDbEZCRUJCQVNFSERBd0xJQVpCL3dGeElCcEIvd0Z4UVFoMGNpQWNRZjhCY1VFUWRISWdFa0VZZEhJaEtTQUdJZ2NoSGlBYUloY2hJU0FjSWhFaENDQVNJaFVoRHd3SUN5QVhSUVJBUVFFaEJ3d0xDeUFJUVlHQ2hBaHNJU2tnSFVHQmdvUUliQ0llUVJoMklROGdIa0VRZGlFSUlCNUJDSFloSVNBbFFZR0NoQWhzSWdaQkdIWWhGU0FHUVJCMklSRWdCa0VJZGlFWElDeEJnWUtFQ0d3aUIwRVlkaUVTSUFkQkVIWWhIQ0FIUVFoMklSb01Cd3NDZnlBbElDeHFJQWhxSUIxcUlCSkIvd0Z4YWlBY1FmOEJjV29nR2tIL0FYRnFJQVpCL3dGeGFrRUVha0g0L3dOeFFRTjJJQ0VOQUJvZ0pTQXNhaUFJYWlBZGFrRUNha0VDZGlBWERRQWFRWUFCSUNsRkRRQWFJQkpCL3dGeElCeEIvd0Z4YWlBYVFmOEJjV29nQmtIL0FYRnFRUUpxUVFKMkN5SUhRZjhCY1VHQmdvUUliQ0VwSUFjaUdpSWNJaElpQmlFWElBWWlFU0lWSWg0aUlTSUlJUThNQmdzZ0tVVUVRRUVCSVFjTUNRc2dIa1VFUUNBU0lnOGlNQ0lpSVRVTElDSkIvd0Z4SWdjZ0QwSC9BWEVpRVdvZ01FSC9BWEVpRDBFQmRHcEJBbW9pRjBFT2RFR0FnUHdIY1NBU1FmOEJjU0llUVFKcUlpRWdCMm9nTlVIL0FYRWlDRUVCZEdwQkFuWWlFaUFQUVFKcUlnOGdDR29nQjBFQmRHcEJBbllpRlVFSWRISkIvLzhEY1hJZ0R5QVJRUU5zYWtFV2RFR0FnSUI0Y1hJaEtTQVhRUUoySVE4Z0hFSC9BWEVpRVVFQ2FpSWNJQVpCL3dGeGFpQWFRZjhCY1NJR1FRRjBha0VDZGlFSElBWWdJV29nRVVFQmRHcEJBbllpR2lFR0lCd2dIa0VCZEdvZ0NHcEJBbllpSENFWElCd2hIaUFTSWhFaElTQVZJUWdNQlF0QkFTRUhJQ0VnRlVFQVIzRkZEUWNnTENBbFFRRjBhaUFkYWtFQ2FpSVJRUVowUVlEK0EzRWdCa0gvQVhFaUQwRUNhaUlYSUN4cUlDNUJBWFJxUVFKMklnZEJHSFFnSlVFQ2FpSUdJQ3hCQVhScUlDNXFRUUoySWlGQkVIUnljaUFHSUFocUlCMUJBWFJxUVFKMmNpRXBJQnBCL3dGeElnaEJBbW9pR2lBU1FmOEJjV29nSEVIL0FYRWlIRUVCZEdwQkFuWWhFaUFSUVFKMklSNGdJU0VHSUJvZ0QwRUJkR29nTG1wQkFuWWlHaUVSSUFoQkFYUWdIR29nRjJwQkFuWWlIQ0VWSUFjaUZ5RUlJQm9oRHd3RUMwRUJJUWNnSVNBVlFRQkhjVVVOQmlBYVFmOEJjU0lQUVFKcUlnY2dCa0gvQVhFaUNFRUJkR29nTG1wQkFuWWlGMEVRZENBSVFRSnFJZ1lnTEdvZ0xrRUJkR29pR2tFR2RFR0EvZ054Y2lBR0lCeEIvd0Z4SWdZZ0QwRUJkR3BxUVFKMkloRkJHSFJ5SUN3Z0pVRUJkR29nSFdwQkFtcEJBblp5SVNrZ0JrRUJhaUljSUJKQi93RnhJaFZxUVFGMklSSWdKU0FzUVFGMGFpQXVha0VDYWtFQ2RpRWVJQWNnRldvZ0JrRUJkR3BCQW5ZaEZTQWFRUUoySVFZZ0NDQXVha0VCYWtFQmRpSUhJU0VnQ0NBUGFrRUJha0VCZGlJYUlRZ2dEeUFjYWtFQmRpSWNJUThNQXd0QkFTRUhJQ0VnRlVFQVIzRkZEUVVnSlVFQ2FpSVBJQWhxSUIxQkFYUnFRUVowUVlEK0EzRWdMRUVDYWlJSElDVkJBWFJxSUIxcVFRSjJJaUZCR0hRZ0hTQWxha0VCYWtFQmRpSWVRUkIwY25JZ0NDQWRha0VCYWtFQmRuSWhLU0FHUWY4QmNTSUdJQnhCL3dGeGFpQWFRZjhCY1NJSVFRRjBha0VDYWtFQ2RpRVNJQWdnQmtFQmRHb2dMbXBCQW1wQkFuWWhIQ0FHSUFkcUlDNUJBWFJxUVFKMkloVWhHaUFzUVFGcUlnWWdMbXBCQVhZaUJ5RVJJQVlnSldwQkFYWWlCaUVJSUE4Z0xFRUJkR29nTG1wQkFuWWlGeUVQREFJTElDbEZCRUJCQVNFSERBVUxJQkpCL3dGeElpRkJBbW9pRVNBaUlCSWdIaHRCL3dGeElnZHFJRFVnRWlBZUcwSC9BWEVpQ0VFQmRHb2lGVUVPZEVHQWdQd0hjU0FSSUJwQi93RnhJaHBxSUJ4Qi93RnhJaHhCQVhScVFRSjJJaGNnSEVFQ2FpSWlJQWhxSUNGQkFYUnFRUUoySWhGQkNIUnlRZi8vQTNGeUlBZ2dNQ0FTSUI0YlFmOEJjV29nQjBFQmRHcEJGblJCZ0lDQUJHcEJnSUNBZUhGeUlTa2dCeUFJYWtFQmFrRUJkaUVQSUJWQkFuWWhGU0FhSUFaQi93RnhJZ1pxUVFGcVFRRjJJUWNnQmlBaWFpQWFRUUYwYWtFQ2RpRUdJQm9nSEdwQkFXcEJBWFlpR2lFZUlDRkJBV29pRWlBY2FrRUJkaUljSVNFZ0NDQVNha0VCZGlJU0lRZ01BUXNnRjBVRVFFRUJJUWNNQkFzZ0NFRUlkQ0FJY2lBSVFSQjBjaUFJUVJoMGNpRXBJQjFCQW1vaUR5QXNhaUFsUVFGMGFrRUNkaUVhSUNWQkFXb2lCaUFzYWtFQmRpRUhJQVlnSFdwQkFYWWlIQ0VHSUFnZ0pXb2dIVUVCZEdwQkFtcEJBbllpRWlFWElBZ2dIV3BCQVdwQkFYWWlFU0VlSUE4Z0NFRURiR3BCQW5ZaUZTRWhJQWdoRHdzZ0dTQW1RUVIwSUROcWFpSWlJQ2syQWpBZ0lpQWVRZjhCY1NBUFFSaDBJQWhCL3dGeFFSQjBjaUFoUWY4QmNVRUlkSEp5TmdJZ0lDSWdCa0gvQVhFZ0ZVRVlkQ0FSUWY4QmNVRVFkSElnRjBIL0FYRkJDSFJ5Y2pZQ0VDQWlJQWRCL3dGeElCSkJHSFFnSEVIL0FYRkJFSFJ5SUJwQi93RnhRUWgwY25JMkFnQWdHU0FXSUJOQkJuUnFRY2dDYWlBVEVBc2dFMEVCYWlJVFFSQkhEUUFMQ3dKQUlBa29Bc2dCSWdaRkJFQkJBQ0VPSUNSQkFFY2hFUXdCQ3lBa1FRQkhJUkVnQ1NnQ0JDSUhJQVlvQWdRaUNFWWhEaUFISUFoSERRQWdKRVVOQUVFQUlBNGdCaWdDQUVFR1NSc2hEa0VCSVJFTFFRQWhFMEVBSVJjQ1FDQUpLQUxNQVNJR1JRMEFJQWtvQWdRZ0JpZ0NCRVlpRnlBUmNVVU5BRUVBSUJjZ0JpZ0NBRUVHU1JzaEZ3c2dGaWdDakFFaEdnSkFJQWtvQXRRQklnWkZEUUFnQ1NnQ0JDQUdLQUlFUmlJVElCRnhSUTBBSUFZb0FnQkJCVXNoRXdzZ0ZrSElDbW9oSENBWlFZQUNhaUVHSUJCQkVHb2hIaUFRUVRWcUlTSkJBQ0VLSUE1QkFFY2dGMEVBUjNFaUZTQVRjU0VoUVJBaEVnTkFBa0FDUUFKQUFrQUNRQ0FhRGdNQUFRSURDeUFHQW44Z0ZRUkFJQjR0QUFNZ0hpMEFBaUFlTFFBQklCNHRBQUFnSWkwQUJDQWlMUUFESUNJdEFBRWdJaTBBQW1wcWFtcHFhbXBCQkdwQkEzWWhFU0FpTFFBSUlDSXRBQWNnSWkwQUJTQWlMUUFHYW1wcVFRSnFRUUoyREFFTElCY0VRQ0FpTFFBRUlDSXRBQU1nSWkwQUFTQWlMUUFDYW1wcVFRSnFRUUoySVJFZ0lpMEFDQ0FpTFFBSElDSXRBQVVnSWkwQUJtcHFha0VDYWtFQ2Rnd0JDeUFPUlFSQVFZQUJJUkZCZ0FFTUFRc2dIaTBBQXlBZUxRQUNJQjR0QUFBZ0hpMEFBV3BxYWtFQ2FrRUNkaUlSQzBIL0FYRkJnWUtFQ0d3aUJ6WUFIQ0FHSUJGQi93RnhRWUdDaEFoc0lnZzJBQmdnQmlBSE5nQVVJQVlnQ0RZQUVDQUdJQWMyQUF3Z0JpQUlOZ0FJSUFZZ0J6WUFCQ0FHSUFnMkFBQWdCZ0ovSUE0RVFDQWVMUUFISUI0dEFBWWdIaTBBQlNBZUxRQUVhbXBxSWdkQkFtcEJBbllpRVNBWFJRMEJHaUFpTFFBSUlDSXRBQWNnSWkwQUJpQUhJQ0l0QUFWcWFtcHFRUVJxUVFOMkRBRUxJQmRGQkVCQmdBRWhFVUdBQVF3QkN5QWlMUUFFSUNJdEFBTWdJaTBBQVNBaUxRQUNhbXBxUVFKcVFRSjJJUkVnSWkwQUNDQWlMUUFISUNJdEFBVWdJaTBBQm1wcWFrRUNha0VDZGd0Qi93RnhRWUdDaEFoc0lnYzJBRHdnQmlBUlFmOEJjVUdCZ29RSWJDSUlOZ0E0SUFZZ0J6WUFOQ0FHSUFnMkFEQWdCaUFITmdBc0lBWWdDRFlBS0NBR0lBYzJBQ1FnQmlBSU5nQWdRUUFoQ0F3REN5QU9SUVJBUVFFaEJ3d0ZDeUFHSUI0eEFBQkNnWUtFaUpDZ3dJQUJmamNBQUNBR0lCNHhBQUZDZ1lLRWlKQ2d3SUFCZmpjQUNDQUdJQjR4QUFKQ2dZS0VpSkNnd0lBQmZqY0FFQ0FHSUI0eEFBTkNnWUtFaUpDZ3dJQUJmamNBR0NBR0lCNHhBQVJDZ1lLRWlKQ2d3SUFCZmpjQUlDQUdJQjR4QUFWQ2dZS0VpSkNnd0lBQmZqY0FLQ0FHSUI0eEFBWkNnWUtFaUpDZ3dJQUJmamNBTUNBR0lCNHhBQWRDZ1lLRWlKQ2d3SUFCZmpjQU9FRUFJUWdNQWdzZ0YwVUVRRUVCSVFjTUJBc2dCaUFpTFFBQklnYzZBRGdnQmlBSE9nQXdJQVlnQnpvQUtDQUdJQWM2QUNBZ0JpQUhPZ0FZSUFZZ0J6b0FFQ0FHSUFjNkFBZ2dCaUFIT2dBQUlBWWdJaTBBQWlJSE9nQTVJQVlnQnpvQU1TQUdJQWM2QUNrZ0JpQUhPZ0FoSUFZZ0J6b0FHU0FHSUFjNkFCRWdCaUFIT2dBSklBWWdCem9BQVNBR0lDSXRBQU1pQnpvQU9pQUdJQWM2QURJZ0JpQUhPZ0FxSUFZZ0J6b0FJaUFHSUFjNkFCb2dCaUFIT2dBU0lBWWdCem9BQ2lBR0lBYzZBQUlnQmlBaUxRQUVJZ2M2QURzZ0JpQUhPZ0F6SUFZZ0J6b0FLeUFHSUFjNkFDTWdCaUFIT2dBYklBWWdCem9BRXlBR0lBYzZBQXNnQmlBSE9nQURJQVlnSWkwQUJTSUhPZ0E4SUFZZ0J6b0FOQ0FHSUFjNkFDd2dCaUFIT2dBa0lBWWdCem9BSENBR0lBYzZBQlFnQmlBSE9nQU1JQVlnQnpvQUJDQUdJQ0l0QUFZaUJ6b0FQU0FHSUFjNkFEVWdCaUFIT2dBdElBWWdCem9BSlNBR0lBYzZBQjBnQmlBSE9nQVZJQVlnQnpvQURTQUdJQWM2QUFVZ0JpQWlMUUFISWdjNkFENGdCaUFIT2dBMklBWWdCem9BTGlBR0lBYzZBQ1lnQmlBSE9nQWVJQVlnQnpvQUZpQUdJQWM2QUE0Z0JpQUhPZ0FHSUFZZ0lpMEFDQ0lIT2dBL0lBWWdCem9BTnlBR0lBYzZBQzhnQmlBSE9nQW5JQVlnQnpvQUh5QUdJQWM2QUJjZ0JpQUhPZ0FQSUFZZ0J6b0FCMEVBSVFnTUFRc2dJVVVFUUVFQklRY01Bd3NnSWkwQUJTQWlMUUFEYXlBaUxRQUdJQ0l0QUFKclFRRjBhaUFpTFFBSElDSXRBQUZyUVFOc2FpQWlMUUFJSWdjZ0lpMEFBQ0lJYTBFQ2RHcEJFV3hCRUdwQkJYVWlERUY5YkNFTklBY2dIaTBBQnlJUmFrRUVkQ0FlTFFBRUlCNHRBQUpySUJFZ0NHdEJBblJxSUI0dEFBVWdIaTBBQVd0QkFYUnFJQjR0QUFZZ0hpMEFBR3RCQTJ4cVFSRnNRUkJxUVFWMUloRkJmV3hxUVJCcUlROUJDQ0VISUFZaEV3TkFJQk1nRFNBUGFpSUlRUVYxUWNBMWFpMEFBRG9BQUNBVElBZ2dER29pQ0VFRmRVSEFOV290QUFBNkFBRWdFeUFJSUF4cUlnaEJCWFZCd0RWcUxRQUFPZ0FDSUJNZ0NDQU1haUlJUVFWMVFjQTFhaTBBQURvQUF5QVRJQWdnREdvaUNFRUZkVUhBTldvdEFBQTZBQVFnRXlBSUlBeHFJZ2hCQlhWQndEVnFMUUFBT2dBRklCTWdDQ0FNYWlJSVFRVjFRY0ExYWkwQUFEb0FCaUFUSUFnZ0RHcEJCWFZCd0RWcUxRQUFPZ0FISUE4Z0VXb2hEeUFUUVFocUlSTkJBQ0VJSUFkQkFXc2lCdzBBQ3dzRFFDQWNJQWhCQm5ScUlnY29BZ0FpRVVILy8vOEhSd1JBSUFjb0FnUWhEeUFHSUJJZ0VrRURjU0FTUVJCSklnd2JRUUowSWhOQjhDbHFLQUlBUVJCQkNDQU1HeUlOYkdvZ0UwR3dLV29vQWdCcUlnd2dFU0FNTFFBQWFrSEFOV290QUFBNkFBQWdCeWdDQ0NFUklBd2dEeUFNTFFBQmFrSEFOV290QUFBNkFBRWdCeWdDRENFUElBd2dFU0FNTFFBQ2FrSEFOV290QUFBNkFBSWdEQ0FQSUF3dEFBTnFRY0ExYWkwQUFEb0FBeUFIS0FJVUlSRWdEQ0FOYWlJTUlBY29BaEFnREMwQUFHcEJ3RFZxTFFBQU9nQUFJQWNvQWhnaER5QU1JQkVnREMwQUFXcEJ3RFZxTFFBQU9nQUJJQWNvQWh3aEVTQU1JQThnREMwQUFtcEJ3RFZxTFFBQU9nQUNJQXdnRVNBTUxRQURha0hBTldvdEFBQTZBQU1nQnlnQ0pDRVJJQXdnRFdvaURDQUhLQUlnSUF3dEFBQnFRY0ExYWkwQUFEb0FBQ0FIS0FJb0lROGdEQ0FSSUF3dEFBRnFRY0ExYWkwQUFEb0FBU0FIS0FJc0lSRWdEQ0FQSUF3dEFBSnFRY0ExYWkwQUFEb0FBaUFNSUJFZ0RDMEFBMnBCd0RWcUxRQUFPZ0FESUFjb0FqUWhFU0FNSUExcUlnd2dCeWdDTUNBTUxRQUFha0hBTldvdEFBQTZBQUFnQnlnQ09DRU5JQXdnRVNBTUxRQUJha0hBTldvdEFBQTZBQUVnQnlnQ1BDRUhJQXdnRFNBTUxRQUNha0hBTldvdEFBQTZBQUlnRENBSElBd3RBQU5xUWNBMWFpMEFBRG9BQXdzZ0VrRUJhaUVTSUFoQkFXb2lDRUVFUncwQUN5QWNRWUFDYWlFY0lCNUJDR29oSGlBaVFRbHFJU0lnQmtGQWF5RUdJQW9oQjBFQklRb2dCMFVOQUF0QkFDRUhJQWtvQXNRQlFRRkxEUUFnS3lBWkVBOExJQkJCMEFCcUpBQWdCeUlHUlEwU0RCUUxJQTRvQWdBaEhDQWZJQ3NvQWdRaUJqWUMzQU1nSHlBcktBSUlOZ0xnQXlBcUlBWnVJZ2RCQkhRaEdTQXFJQVlnQjJ4clFRUjBJUjRnSEE0RUFBQUJBZ01MSUNrZ01Xb2lEU2dDQkNFR0lCWW9BcEFCSVJKQkFTRUtRWDhoRUVFQUlRbEJBQ0VhUVFBaENFRUJJUWNDZjBGL0lBMG9Bc2dCSWd4RkRRQWFRWDhnRENnQ0JDQUdSdzBBR2tFQUlRZEJmeUFNS0FJQVFRVkxEUUFhSUF3b0FwZ0JJZ2hCRUhZaEdpQU1LQUpvQ3lFUkFrQWdEU2dDekFFaURFVUVRRUVBSVJVTUFRc2dCaUFNS0FJRVJ3UkFRUUFoRlF3QkMwRUFJUW9nRENnQ0FFRUZTd1JBUVFBaEZRd0JDeUFNS0FLc0FTSVZRUkIySVFrZ0RDZ0NiQ0VRQ3lBY1JRUkFRUUFoSENBSElBcHlCRUJCQUNFTURBOExJQkVnQ0VILy93TnhJQnBCRUhSeWNrVUVRRUVBSVF3TUR3dEJBQ0VNSUJBZ0ZVSC8vd054SUFsQkVIUnlja1VORGdzZ0ZpOEJvZ0VoRHlBV0x3R2dBU0VUQW44Q1FBSkFJQTBvQXRBQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVTBOQVF3TkN3SkFJQTBvQXRRQklneEZEUUFnRENnQ0JDQUdSdzBBSUF3b0FnQkJCVXNORFNBTVFjQUJhaUVjSUF4QjhBQnFEQUlMSUFjZ0NrRUJjM0lOREF3T0N5QU1RYXdCYWlFY0lBeEI3QUJxQ3lnQ0FDRUhJQndvQWdBTUN3c2dGeWdDQkNFU0lCWW9BcEFCSVExQmZ5RUlBa0FDUUFKQUlCY29Bc3dCSWdaRkJFQkJBQ0VhREFFTFFRQWhHaUFHS0FJRUlCSkdEUUVMUVFBaERFRUFJUWtNQVF0QkFTRUpJQVlvQWdCQkJVc0VRRUVBSVF3TUFRc2dCaWdDckFFaURFRVFkaUVhSUFZb0Ftd2hDQXNnRmk4Qm9nRWhFU0FXTHdHZ0FTRVBJQWdnRFVZRVFDQWFJUVlnRENFSURBa0xRUUVoRUVGL0lSVkJBQ0VHQWtBZ0Z5Z0N5QUVpQjBVRVFFRUFJUWdNQVFzZ0VpQUhLQUlFUndSQVFRQWhDQXdCQzBFQUlSQWdCeWdDQUVFRlN3UkFRUUFoQ0F3QkN5QUhLQUtZQVNJSVFSQjJJUVlnQnlnQ2FDRVZDd0ovQWtBQ1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVk5EUUVNQ1FzQ1FDQVhLQUxVQVNJSFJRMEFJQWNvQWdRZ0VrY05BQ0FIS0FJQVFRVkxEUWtnQjBIQUFXb2hFQ0FIUWZBQWFnd0NDeUFKSUJCeURRZ01DZ3NnQjBHc0FXb2hFQ0FIUWV3QWFnc29BZ0FoQ2lBUUtBSUFEQWNMSUJjb0FnUWhEU0FXS0FLUUFTRUpRUUVoQ2tGL0lRaEJBQ0VUQWtBZ0Z5Z0N5QUVpQmtVRVFFRUFJUXdNQVFzZ0RTQUdLQUlFUndSQVFRQWhEQXdCQzBFQUlRb2dCaWdDQUVFRlN3UkFRUUFoREF3QkN5QUdLQUtZQVNJTVFSQjJJUk1nQmlnQ2FDRUlDeUFXTHdHaUFTRVNJQll2QWFBQklSRWdDQ0FKUmcwREFuOENRQUpBSUJjb0Fzd0JJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlUwTkFRd0VDd0pBSUJjb0F0UUJJZ2RGRFFBZ0J5Z0NCQ0FOUncwQUlBY29BZ0JCQlVzTkJDQUhRY0FCYWlFUVFRQWhCa0YvSVJWQkFBd0NDeUFLUlEwRkRBTUxJQWRCdkFGcUlSQWdCeWdDYkNFVklBY29BcXdCSWdaQkVIWUxJUWdnQnlnQ2NDRUtJQkFvQWdBTUFnc2dGMEhJQVdvaERTQVhRY3dCYWlFU0lCZEIwQUZxSVJFZ0YwSFVBV29oRDBFQUlTRURRRUVFSVNJZ0ZpQWhRUUowSWlScUlpVWlNeWdDc0FFaUJrRUNUUVJBSUFaQkFuUkJqQ3RxS0FJQUlTSUxJQmNnSkdvaUJ5QWxLQUxBQVRZQ1pBSkFBa0FnSlNnQ3dBRWlIRUVRU3cwQUlBQW9Bc2dKSUJ4QkFuUnFLQUlBSWdaRkRRQWdCaWdDRkVFQlN3MEJDeUFwSUNwQjJBRnNhaUFoUVFKMGFrRUFOZ0owREEwTElBY2dCaWdDQUNJR05nSjBJQVpGRFF3Q1FDQWlSUTBBSUJjZ0lVRUVkQ0l3YWlJZElUVWdKRUVEY2lGVFFRQWhHZ05BSUJZZ01Hb2dHa0VDZEdvaExFRUJJUzVCZnlFbUlBMGhDaUFPSVFaQkFDRUlRUUFoQ1VGL0lSVUNRQUpBQWtBQ1FBSkFBa0FnSVVFSGRDQXpLQUt3QVNKc1FRVjBhaUFhUVFOMGFpSVRRYkFaYWlnQ0FBNEZBd0FCQWdRRkN5QVNJUW9NQWdzZ0VTRUtEQUVMSUE4aENnc2dDaWdDQUNFR0N3SkFJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEJRUUFoTGlBR0tBSUFRUVZMRFFBZ0JpQVRRYlFaYWkwQUFDSUhRUUowYWlnQ2hBRWlDVUVRZGlFSUlBWWdCMEg4QVhGcUtBSmtJUlVMQzBFQUlRd2dEU0VISUE0aEJrRUFJUXBCQUNFUUFrQUNRQUpBQWtBQ1FBSkFJQk5Cc0IxcUtBSUFEZ1VEQUFFQ0JBVUxJQkloQnd3Q0N5QVJJUWNNQVFzZ0R5RUhDeUFIS0FJQUlRWUxJQVpGRFFBZ0JpZ0NCQ0FYS0FJRVJ3MEFRUUVoRUNBR0tBSUFRUVZMRFFBZ0JpQVRRYlFkYWkwQUFDSUhRUUowYWlnQ2hBRWlDa0VRZGlFTUlBWWdCMEg4QVhGcUtBSmtJU1lMSUN3dkFkSUJJVzBnTEM4QjBBRWhMQ0FOSVFjZ0RpRUdBa0FDZndKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBVFFiQWhhaWdDQUE0RkF3QUJBZ1FGQ3lBU0lRY01BZ3NnRVNFSERBRUxJQThoQndzZ0J5Z0NBQ0VHQ3lBR1JRMEFJQVlvQWdRZ0Z5Z0NCRWNOQUNBR0tBSUFRUVZORFFFTUF3c2dEU0VISUE0aEJnSkFBa0FDUUFKQUFrQUNRQ0FUUWJBbGFpZ0NBQTRGQXdBQkFnUUZDeUFTSVFjTUFnc2dFU0VIREFFTElBOGhCd3NnQnlnQ0FDRUdDeUFHUlEwQUlBWW9BZ1FnRnlnQ0JFY05BQ0FHS0FJQVFRVkxEUU1nQmlBVFFiUWxhaTBBQUNJVFFRSjBha0dFQVdvTUFnc2dFQ0F1Y2cwQ0RBUUxJQVlnRTBHMElXb3RBQUFpRTBFQ2RHcEJoQUZxQ3lFSElBWWdFMEg4QVhGcUtBSmtJUkFnQnlnQ0FBd0JDMEYvSVJCQkFBc2hCaUFjSUNaR0loTWdGU0FjUmlJSGFpQVFJQnhHYWtFQlJ3UkFJQXdnQ0NBTVFSQjBRUkIxSWd3Z0NFRVFkRUVRZFNJSFNpSUlHeUlUSUFjZ0RDQUhJQWNnREVvYklBZ2JJZ2dnQmtFUWRTSUhJQWNnQ0VnYklCTkJFSFJCRUhVZ0IwZ2JJUWdnQ2lBSklBcEJFSFJCRUhVaUNpQUpRUkIwUVJCMUlnZEtJZ2tiSWd4Qi8vOERjU0FISUFvZ0J5QUhJQXBLR3lBSkd5SUhJQVpCRUhSQkVIVWlCaUFHSUFkSUd5QU1RUkIwUVJCMUlBWklHeUVKREFFTElBa2dDaUFIR3lFSklBZ2dEQ0FIR3lFSUlBY05BQ0FURFFBZ0JrRVFkaUVJSUFZaENRc2dDU0FzYWlJR1FSQjBRUkIxUVlCQWEwSC8vd0JMRFE0Z0NDQnRhaUlIUVJCMFFSQjFRWUFRYWtIL0gwc05EZ0pBSUJjQ2Z3SkFBa0FDUUFKQUlHd09CQUFCQWdNRkN5QWRJQVk3QVlRQklCMGdCenNCaGdFZ0hTQUdPd0dJQVNBZElBYzdBWW9CSUIwZ0Jqc0JqQUVnTlNBSE93R09BU0JUREFNTElCY2dHa0VCZENBa2FpSUlRUUowYWlJSklBYzdBWVlCSUFrZ0Jqc0JoQUVnQ0VFQmNnd0NDeUFYSUJvZ0pHb2lDRUVDZEdvaUNTQUhPd0dHQVNBSklBWTdBWVFCSUFoQkFtb01BUXNnR2lBa2FndEJBblJxSWdnZ0J6c0JoZ0VnQ0NBR093R0VBUXNnR2tFQmFpSWFJQ0pHRFFFZ0pTZ0N3QUVoSEF3QUN3QUxJQ0ZCQVdvaUlVRUVSdzBBQzBFQUlRWURRQ0FmSUJjZ0JrRUNkQ0lKYWlnQ2REWUMyQU1nQmtFQlMwRURkQ0VISUFaQkEzUkJDSEVoQ0FKQUFrQUNRQUpBQWtBZ0NTQVdhaWdDc0FFT0F3QUJBZ01MSUI5QkVHb2dGeUFHUVFSMGFrR0VBV29nSDBIWUEyb2dIaUFaSUFnZ0IwRUlRUWdRREF3REN5QWZRUkJxSWdrZ0Z5QUdRUVIwYWlJS1FZUUJhaUFmUWRnRGFpSU1JQjRnR1NBSUlBZEJDRUVFRUF3Z0NTQUtRWXdCYWlBTUlCNGdHU0FJSUFkQkJISkJDRUVFRUF3TUFnc2dIMEVRYWlJSklCY2dCa0VFZEdvaUNrR0VBV29nSDBIWUEyb2lEQ0FlSUJrZ0NDQUhRUVJCQ0JBTUlBa2dDa0dJQVdvZ0RDQWVJQmtnQ0VFRWNpQUhRUVJCQ0JBTURBRUxJQjlCRUdvaUNTQVhJQVpCQkhScUlncEJoQUZxSUI5QjJBTnFJZ3dnSGlBWklBZ2dCMEVFUVFRUURDQUpJQXBCaUFGcUlBd2dIaUFaSUFoQkJISWlEU0FIUVFSQkJCQU1JQWtnQ2tHTUFXb2dEQ0FlSUJrZ0NDQUhRUVJ5SWdkQkJFRUVFQXdnQ1NBS1FaQUJhaUFNSUI0Z0dTQU5JQWRCQkVFRUVBd0xJQVpCQVdvaUJrRUVSdzBBQ3d3TUMwRi9JUXBCZnlFVlFRQWhCa0VBSVFoQkFBc2hCeUFKSUJWR0lnOGdDU0FLUm1wQkFVY0VRQ0FJSUJNZ0NFRVFkRUVRZFNJS0lCTkJFSFJCRUhVaUNFb2lEeHNpR2lBSUlBb2dDQ0FJSUFwS0d5QVBHeUlLSUFkQkVIVWlDQ0FJSUFwSUd5QWFRUkIwUVJCMUlBaElHeUVJSUFZZ0RDQUdRUkIwUVJCMUlnb2dERUVRZEVFUWRTSUdTaUlNR3lJUFFmLy9BM0VnQmlBS0lBWWdCaUFLU2hzZ0RCc2lDaUFIUVJCMFFSQjFJZ1lnQmlBS1NCc2dEMEVRZEVFUWRTQUdTQnNoQmd3Q0N5QVBEUUVnQjBFUWRpRUlJQWNoQmd3QkN5QVRJUWdnRENFR0N5QUdJQkZxSWdkQkVIUkJFSFZCZ0VCclFmLy9BRXNOQnlBSUlCSnFJZ2hCRUhSQkVIVkJnQkJxUWY4ZlN3MEhJQWxCRUVzTkJ5QUFLQUxJQ1NBSlFRSjBhaWdDQUNJR1JRMEhJQVlvQWhSQkFra05CeUFHS0FJQUloSkZEUWNnRnlBSU93R3lBU0FYSUFjN0FiQUJJQmNnRWpZQ2RDQVhJQWsyQW1RZ0Z5QVNOZ0o4SUJjZ0NUWUNiQ0FYSUJjb0FyQUJJZ1kyQXF3QklCY2dCallDcUFFZ0Z5QUdOZ0trQVNBWElBWTJBcEFCSUJjZ0JqWUNqQUVnRnlBR05nS0lBU0FYSUFZMkFvUUJJQllvQXBRQklRZ0NRQUovQW44Q1FDQVhLQUxRQVNJSFJRMEFJQWNvQWdRZ0RVY05BQ0FIS0FJQVFRVkxCRUJCQUNFY1FYOE1Bd3NnQjBHc0FXb01BUXRCQVNFVlFYOGhERUVBSVJ3Z0Z5Z0N6QUVpQjBVTkFpQUhLQUlFSUExSERRSkJBQ0VWSUFjb0FnQkJCVXNOQWlBSFFiQUJhZ3NvQWdBaEhDQUhLQUpzQ3lFTVFRQWhGUXNnRmk4QnBnRWhFU0FXTHdHa0FTRVBBa0FDUUNBSUlBeEdEUUFnQmtFUWRpRUhBbjhDUUFKQUlCY29Bc3dCSWdwRkRRQWdDaWdDQkNBTlJ3MEFJQW9vQWdCQkJVc05BU0FLS0FLOEFTSVZRUkIySVJvZ0NpZ0NjQXdDQ3lBVkRRTUxRUUFoRlVFQUlScEJmd3NoQ2lBSUlBbEdJZ2tnQ0NBS1JtcEJBVWNFUUNBYUlBY2dHa0VRZEVFUWRTSUpJQWRCRUhSQkVIVktJZ29iSWd3Z0JrRVFkU0lISUFrZ0J5QUhJQWxLR3lBS0d5SUpJQnhCRUhVaUJ5QUhJQWxJR3lBTVFSQjBRUkIxSUFkSUd5RUhJQlVnQmlBVlFSQjBRUkIxSWdrZ0JrRVFkRUVRZFNJR1NpSUtHeUlNUWYvL0EzRWdCaUFKSUFZZ0JpQUpTaHNnQ2hzaUNTQWNRUkIwUVJCMUlnWWdCaUFKU0JzZ0RFRVFkRUVRZFNBR1NCc2hCZ3dDQ3lBSkRRRWdDQ0FLUncwQUlCVkIvLzhEY1NBYVFSQjBjaUVHSUJvaEJ3d0JDeUFjUVJCMklRY2dIQ0VHQ3lBR0lBOXFJZ2xCRUhSQkVIVkJnRUJyUWYvL0FFc05CeUFISUJGcUlnZEJFSFJCRUhWQmdCQnFRZjhmU3cwSElBaEJFRXNOQnlBQUtBTElDU0FJUVFKMGFpZ0NBQ0lHUlEwSElBWW9BaFJCQWtrTkJ5QUdLQUlBSWdaRkRRY2dGeUFIT3dIQ0FTQVhJQWs3QWNBQklCY2dCallDZ0FFZ0Z5QUdOZ0o0SUJjZ0NEWUNjQ0FYSUFnMkFtZ2dGeUFYS0FMQUFTSUdOZ0s4QVNBWElBWTJBcmdCSUJjZ0JqWUN0QUVnRnlBR05nS2dBU0FYSUFZMkFwd0JJQmNnQmpZQ21BRWdGMEdVQVdvaUJ5QUdOZ0lBSUI4Z0VqWUMyQU1nSDBFUWFpSUdJQmRCaEFGcUlCOUIyQU5xSWdnZ0hpQVpRUUJCQUVFSVFSQVFEQ0FmSUJjb0FuZzJBdGdESUFZZ0J5QUlJQjRnR1VFSVFRQkJDRUVRRUF3TUNBdEJmeUVLUVFBTElRY2dEU0FWUmlJSklBb2dEVVpxUVFGSEJFQWdHaUFHSUJwQkVIUkJFSFVpQ1NBR1FSQjBRUkIxSWdaS0lnb2JJaG9nQmlBSklBWWdCaUFKU2hzZ0Noc2lDU0FIUVJCMUlnWWdCaUFKU0JzZ0drRVFkRUVRZFNBR1NCc2hCaUFNSUFnZ0RFRVFkRUVRZFNJSklBaEJFSFJCRUhVaUNFb2lDaHNpREVILy93TnhJQWdnQ1NBSUlBZ2dDVW9iSUFvYklnZ2dCMEVRZEVFUWRTSUhJQWNnQ0VnYklBeEJFSFJCRUhVZ0IwZ2JJUWdNQVFzZ0NRMEFJQWRCRUhZaEJpQUhJUWdMSUFnZ0Qyb2lCMEVRZEVFUWRVR0FRR3RCLy84QVN3MEVJQVlnRVdvaUNFRVFkRUVRZFVHQUVHcEIveDlMRFFRZ0RVRVFTdzBFSUFBb0FzZ0pJQTFCQW5ScUtBSUFJZ1pGRFFRZ0JpZ0NGRUVDU1EwRUlBWW9BZ0FpQ1VVTkJDQVhJQWc3QWFJQklCY2dCenNCb0FFZ0Z5QUpOZ0owSUJjZ0RUWUNaQ0FYSUFrMkFuZ2dGeUFOTmdKb0lCY2dGeWdDb0FFaUJqWUNuQUVnRnlBR05nS1lBU0FYSUFZMkFwUUJJQmNnQmpZQ2tBRWdGeUFHTmdLTUFTQVhJQVkyQW9nQklCY2dCallDaEFFZ0ZpZ0NsQUVoQ0NBV0x3R21BU0VSSUJZdkFhUUJJUThDZndKQUFrQUNRQ0FYS0FMSUFTSUhCRUFnRWlBSEtBSUVSZ1JBSUFjb0FnQkJCVTBFUUNBSEtBSzRBU0lLUVJCMklSTWdCeWdDY0NBSVJ3MEVJQW9oREF3REMwRi9JUlZCQUNFTVFRQWhFMEVBSVFwQkFDRUhJQWhCZjBZTkFnd0VDMEYvSVJWQkFDRU1RUUFoRTBFQUlRcEJBQ0VISUFoQmYwWU5BUXdEQzBGL0lSVkJBQ0VNUVFBaEUwRUFJUXBCQUNFSElBaEJmMGNOQWdzZ0RFSC8vd054SUJOQkVIUnlEQUlMSUFjb0FtZ2hGU0FIS0FLZ0FTRUhJQk1oREFzZ0JrRVFkaUVTSUFnZ0RVWWlEU0FJSUJWR2FrRUJSd1JBSUJJZ0RDQU1RUkIwUVJCMUlnd2dFa0VRZEVFUWRVZ2lEUnNpRWlBTUlBWkJFSFVpR2lBTUlBd2dHa29iSUEwYklnMGdCMEVRZFNJTUlBd2dEVWdiSUJKQkVIUkJFSFVnREVnYklSTWdCaUFLSUFwQkVIUkJFSFVpQ2lBR1FSQjBRUkIxSWdaSUlnd2JJZzFCLy84RGNTQUtJQVlnQ2lBR0lBcElHeUFNR3lJS0lBZEJFSFJCRUhVaUJpQUdJQXBJR3lBTlFSQjBRUkIxSUFaSUd3d0JDeUFTSUFkQkVIWWdEUnNoRXlBR0lBY2dEUnNMSUE5cUlnZEJFSFJCRUhWQmdFQnJRZi8vQUVzTkJDQVJJQk5xSWdwQkVIUkJFSFZCZ0JCcVFmOGZTdzBFSUFoQkVFc05CQ0FBS0FMSUNTQUlRUUowYWlnQ0FDSUdSUTBFSUFZb0FoUkJBa2tOQkNBR0tBSUFJZ1pGRFFRZ0Z5QUtPd0hDQVNBWElBYzdBY0FCSUJjZ0JqWUNnQUVnRnlBR05nSjhJQmNnQ0RZQ2NDQVhJQWcyQW13Z0Z5QVhLQUxBQVNJR05nSzhBU0FYSUFZMkFyZ0JJQmNnQmpZQ3RBRWdGeUFHTmdLd0FTQVhJQVkyQXF3QklCY2dCallDcUFFZ0YwR2tBV29pQnlBR05nSUFJQjhnQ1RZQzJBTWdIMEVRYWlJR0lCZEJoQUZxSUI5QjJBTnFJZ2dnSGlBWlFRQkJBRUVRUVFnUURDQWZJQmNvQW53MkF0Z0RJQVlnQnlBSUlCNGdHVUVBUVFoQkVFRUlFQXdNQlF0QmZ5RUhRUUFMSVFZZ0VDQVNSaUlNSUJFZ0VrWWlDbW9nQnlBU1JtcEJBVWNFUUNBSklCb2dDVUVRZEVFUWRTSUpJQnBCRUhSQkVIVWlCMG9pQ2hzaURDQUhJQWtnQnlBSElBbEtHeUFLR3lJSklBWkJFSFVpQnlBSElBbElHeUFNUVJCMFFSQjFJQWRJR3lFYUlCVWdDQ0FWUVJCMFFSQjFJZ2tnQ0VFUWRFRVFkU0lIU2lJSUd5SUtRZi8vQTNFZ0J5QUpJQWNnQnlBSlNoc2dDQnNpQnlBR1FSQjBRUkIxSWdZZ0JpQUhTQnNnQ2tFUWRFRVFkU0FHU0JzaENBd0JDeUFJSUJVZ0Noc2hDQ0FhSUFrZ0Noc2hHaUFLRFFBZ0RBMEFJQVpCRUhZaEdpQUdJUWdMSUFnZ0Uyb2lIRUVRZEVFUWRVR0FRR3RCLy84QVN3MEJJQThnR21vaURFRVFkRUVRZFVHQUVHcEIveDlMRFFFTElCSkJFRXNOQUNBQUtBTElDU0FTUVFKMGFpZ0NBQ0lHUlEwQUlBWW9BaFJCQWtrTkFDQUdLQUlBSWdkRkRRQWdEU0FNT3dIQ0FTQU5JQnc3QWNBQklBMGdCellDZENBTklCSTJBbVFnRFNBSE5nS0FBU0FOSUFjMkFud2dEU0FITmdKNElBMGdFallDY0NBTklCSTJBbXdnRFNBU05nSm9JQTBnRFNnQ3dBRWlCallDdkFFZ0RTQUdOZ0s0QVNBTklBWTJBclFCSUEwZ0JqWUNzQUVnRFNBR05nS3NBU0FOSUFZMkFxZ0JJQTBnQmpZQ3BBRWdEU0FHTmdLZ0FTQU5JQVkyQXB3QklBMGdCallDbUFFZ0RTQUdOZ0tVQVNBTklBWTJBcEFCSUEwZ0JqWUNqQUVnRFNBR05nS0lBU0FOSUFZMkFvUUJJQjhnQnpZQzJBTWdIMEVRYWlBTlFZUUJhaUFmUWRnRGFpQWVJQmxCQUVFQVFSQkJFQkFNREFFTFFRRWhCZ3dEQ3lBT0tBTEVBVUVCU3cwQUlBNG9BZ0FFUUNBcktBSUFJZ3dnS2lBcUlDc29BZ1FpQ1hBaUJtc2lCMEVJZEdvZ0JrRUVkR29oRGlBSlFRUjBJUW9nQ1VFQ2RFSDgvLy8vQTNFaERTQUdRUU4wSVJJZ0t5Z0NDQ0FKYkNJUlFRaDBJUThnQjBFR2RDRVRRUUFoR2dOQUlBNGdHa0VDZENJR1FmQXBhaWdDQUNJSElBcHNhaUFHUWJBcGFpZ0NBQ0lHYWlFSUlCOUJFR29nQjBFRWRHb2dCbW9oQmdKQUlCWWdHa0VHZEdvaUJ5Z0N5QUlpSEVILy8vOEhSd1JBSUFjb0Fzd0NJUmNnQmkwQUFTRVZJQWdnSENBR0xRQUFha0hBTldvdEFBQTZBQUFnQnlnQzBBSWhIQ0FHTFFBQ0lSQWdDQ0FWSUJkcVFjQTFhaTBBQURvQUFTQUhLQUxVQWlFWElBWXRBQU1oRlNBSUlCQWdIR3BCd0RWcUxRQUFPZ0FDSUFnZ0ZTQVhha0hBTldvdEFBQTZBQU1nQnlnQzNBSWhIQ0FHTFFBUklSY2dDQ0FLYWlJSUlBY29BdGdDSUFZdEFCQnFRY0ExYWkwQUFEb0FBQ0FIS0FMZ0FpRVZJQVl0QUJJaEVDQUlJQmNnSEdwQndEVnFMUUFBT2dBQklBY29BdVFDSVJ3Z0JpMEFFeUVYSUFnZ0VDQVZha0hBTldvdEFBQTZBQUlnQ0NBWElCeHFRY0ExYWkwQUFEb0FBeUFIS0FMc0FpRWNJQVl0QUNFaEZ5QUlJQXBxSWdnZ0J5Z0M2QUlnQmkwQUlHcEJ3RFZxTFFBQU9nQUFJQWNvQXZBQ0lSVWdCaTBBSWlFUUlBZ2dGeUFjYWtIQU5Xb3RBQUE2QUFFZ0J5Z0M5QUloSENBR0xRQWpJUmNnQ0NBUUlCVnFRY0ExYWkwQUFEb0FBaUFJSUJjZ0hHcEJ3RFZxTFFBQU9nQURJQWNvQXZ3Q0lSd2dCaTBBTVNFWElBZ2dDbW9pQ0NBSEtBTDRBaUFHTFFBd2FrSEFOV290QUFBNkFBQWdCeWdDZ0FNaEZTQUdMUUF5SVJBZ0NDQVhJQnhxUWNBMWFpMEFBRG9BQVNBSEtBS0VBeUVISUFZdEFETWhCaUFJSUJBZ0ZXcEJ3RFZxTFFBQU9nQUNJQWdnQmlBSGFrSEFOV290QUFBNkFBTU1BUXNnQmlnQ0VDRWNJQWdnQmlnQ0FEWUNBQ0FJSUExQkFuUWlCMm9pQ0NBY05nSUFJQVlvQWpBaEhDQUhJQWhxSWdnZ0JpZ0NJRFlDQUNBSElBaHFJQncyQWdBTElCcEJBV29pR2tFUVJ3MEFDeUFSUVFaMElRNGdDVUVEZEVINC8vLy9CM0VpQ2tFQ2RpRU5JQXdnRDJvZ0Uyb2dFbW9oREVFUUlRZ0RRQ0FNSUE1QkFDQUlRUk5MSWdZYmFpQUlRUUowUVF4eElnZEI4Q2xxS0FJQUloSWdDbXdnQjBHd0tXb29BZ0FpQjJwcUlRa2dIMEVRYWtIQUFrR0FBaUFHRzJvZ0VrRURkQ0FIYW1vaEJnSkFJQllnQ0VFR2RHb2lCeWdDeUFJaUVrSC8vLzhIUndSQUlBY29Bc3dDSVJFZ0JpMEFBU0VQSUFrZ0VpQUdMUUFBYWtIQU5Xb3RBQUE2QUFBZ0J5Z0MwQUloRWlBR0xRQUNJUm9nQ1NBUElCRnFRY0ExYWkwQUFEb0FBU0FIS0FMVUFpRVJJQVl0QUFNaER5QUpJQklnR21wQndEVnFMUUFBT2dBQ0lBa2dEeUFSYWtIQU5Xb3RBQUE2QUFNZ0J5Z0MzQUloRWlBR0xRQUpJUkVnQ1NBS2FpSUpJQWNvQXRnQ0lBWXRBQWhxUWNBMWFpMEFBRG9BQUNBSEtBTGdBaUVQSUFZdEFBb2hHaUFKSUJFZ0VtcEJ3RFZxTFFBQU9nQUJJQWNvQXVRQ0lSSWdCaTBBQ3lFUklBa2dEeUFhYWtIQU5Xb3RBQUE2QUFJZ0NTQVJJQkpxUWNBMWFpMEFBRG9BQXlBSEtBTHNBaUVTSUFZdEFCRWhFU0FKSUFwcUlna2dCeWdDNkFJZ0JpMEFFR3BCd0RWcUxRQUFPZ0FBSUFjb0F2QUNJUThnQmkwQUVpRWFJQWtnRVNBU2FrSEFOV290QUFBNkFBRWdCeWdDOUFJaEVpQUdMUUFUSVJFZ0NTQVBJQnBxUWNBMWFpMEFBRG9BQWlBSklCRWdFbXBCd0RWcUxRQUFPZ0FESUFjb0F2d0NJUklnQmkwQUdTRVJJQWtnQ21vaUNTQUhLQUw0QWlBR0xRQVlha0hBTldvdEFBQTZBQUFnQnlnQ2dBTWhEeUFHTFFBYUlSb2dDU0FSSUJKcVFjQTFhaTBBQURvQUFTQUhLQUtFQXlFSElBWXRBQnNoQmlBSklBOGdHbXBCd0RWcUxRQUFPZ0FDSUFrZ0JpQUhha0hBTldvdEFBQTZBQU1NQVFzZ0JpZ0NDQ0VTSUFrZ0JpZ0NBRFlDQUNBSklBMUJBblFpQjJvaUNTQVNOZ0lBSUFZb0FoZ2hFaUFISUFscUlna2dCaWdDRURZQ0FDQUhJQWxxSUJJMkFnQUxJQWhCQVdvaUNFRVlSdzBBQ3d3QkN5QXJJQjlCRUdvUUR3c2dBQ2dDdkFraURpQXhhaWdDeEFGQkFVWWhDZ0ovUVFBZ0lDZ0NERUVEZENBZ0tBSVFheUlIUlEwQUdrRUJJQWRCQ0VzTkFCb2dJQ2dDQkNJR0xRQUFJQ0FvQWdnaUNVRVlhaUlhZENFSUlBY2dDV3BCQ0dzaUNVRUJUZ1JBQTBBZ0JpMEFBU0FhUVFocklocDBJQWh5SVFnZ0NVRUlTaUVNSUFaQkFXb2hCaUFKUVFocklRa2dEQTBBQ3d0QkFTQUhRUUZyZENBSVFTQWdCMnQyUndzZ0h5Z0NESEloQmdKQUFrQWdMeWdDQkVFQ2F3NEdBQUVCQVFFQUFRc2dBQ0FxTmdLd0NRc2dDaUEwYWlFMElBWkJBRWNoQ0NBQUtBS1lDU0lISUNwQkFXb2lCaUFHSUFkSkd5RUdJQUFvQXBRSklna2dLa0VDZEdvb0FnQWhDZ05BQWtBZ0J5QXFRUUZxSWlwTkJFQWdCaUVxREFFTElBa2dLa0VDZEdvb0FnQWdDa2NOQVFzTFFRRWhCa0VBSUFoQkFDQXFJQWNnS2tZYklpb2JEUUVnQ0EwQUN5QUhJQUJCckFscUtBSUFJRFJxSWdoSkRRQWdBQ0FJTmdLc0NVRUFJUVlMSUI5QjhBTnFKQUFnQmdzRVFDQUFLQUtvQ1NFSklBQW9BdGdLSVFZQ1FDQUFLQUt3Q1NJSFJRMEFJQVlnQjBFQmF5SUtUd1JBSUFvaEJnd0JDeUFBS0FLOENTRUhRUUFoRFFOQUFrQWdCeUFLUWRnQmJHb29BZ1FnQ1VjTkFDQU5RUUZxSWcwZ0FDZ0NFQ2dDTkNJSVFRb2dDRUVLU3h0SkRRQWdDaUVHREFJTElBcEJBV3NpQ2lBR1N3MEFDd3NnQUNnQ3ZBa2hEQU5BUVFBaENpQUpJQXdnQmtIWUFXeHFJZ2NvQWdSSEJFQkJBeUVNREJNTElBY29Bc1FCSWdoRkJFQkJBeUVNREJNTElBY2dDRUVCYXpZQ3hBRWdBQ2dDbUFraUNDQUdRUUZxSWdjZ0J5QUlTUnNoQnlBQUtBS1VDU0lPSUFaQkFuUnFLQUlBSVEwRFFBSkFJQWdnQmtFQmFpSUdUUVJBSUFjaEJnd0JDeUFPSUFaQkFuUnFLQUlBSUExSERRRUxDMEVBSUFZZ0JpQUlSaHNpQmcwQUMwRURJUXdNRVFzZ0FDZ0MvQW9FUUVFQUlRcEJBQ0VOQWtBZ0FDZ0NtQWtpR0VVTkFDQVlRUU54SVF3Z0FDZ0N2QWtoQjBFQUlRa2dHRUVCYTBFRFR3UkFRUUFoQmlBWVFYeHhJZ2toRWdOQUlBMGdCeUFHUWRnQmJHb29Bc1FCUVFCSGFpQUhJQVpCQVhKQjJBRnNhaWdDeEFGQkFFZHFJQWNnQmtFQ2NrSFlBV3hxS0FMRUFVRUFSMm9nQnlBR1FRTnlRZGdCYkdvb0FzUUJRUUJIYWlFTklBWkJCR29oQmlBU1FRUnJJaElOQUFzTElBeEZEUUFEUUNBTklBY2dDVUhZQVd4cUtBTEVBVUVBUjJvaERTQUpRUUZxSVFrZ0RFRUJheUlNRFFBTEMwRUJJUVlnRFNBWVJnMFBRUUFoREF3UkMwRUFJUXBCQVNFR0lBQW9BcXdKSUFBb0FwZ0pSZzBPUVFBaERBd1FDeUFIS0FJUUlRWUxJQVpCQVVjTkFDQUhLQUlZRFFBZ0MwRUFOZ0xzQVNBTFFkQUJhaUFMUWV3QmFoQUNJUVlDUUFKQUlBc29BdXdCUVg5R0JFQWdCa1VOQVF3Q0N5QUdSUTBCQzBFQklRWU1BZ3NnQ0NnQ0NFVU5BQ0FMUVFBMkF1d0JJQXRCMEFGcUlBdEI3QUZxRUFJaEJnSkFJQXNvQXV3QlFYOUdCRUFnQmcwQ0RBRUxJQVpGRFFFTFFRRWhCZ3dCQ3lBSUtBSkVCRUJCQVNFR0lBdEIwQUZxSUF0QnpBRnFFQUlOQVFzZ0N5Z0MxQUVoQmdKQUlBc29BdHdCUVFOMElnd2dDeWdDNEFFaURtc2lDRUVnVGdSQUlBWW9BQUFpQ0VFWWRDQUlRUWgwUVlDQS9BZHhjaUFJUVFoMlFZRCtBM0VnQ0VFWWRuSnlJUWtnQ3lnQzJBRWlDRVVOQVNBSklBaDBJQVl0QUFSQkNDQUlhM1p5SVFrTUFRc2dDRUVCU0FSQVFRQWhDUXdCQ3lBR0xRQUFJQXNvQXRnQklnMUJHR29pTW5RaENTQUlJQTFxUVFocklnMUJBVWdOQUFOQUlBWXRBQUVnTWtFSWF5SXlkQ0FKY2lFSklBMUJDRW9oQ0NBR1FRRnFJUVlnRFVFSWF5RU5JQWdOQUFzTElBc2dEa0VCYWlJSU5nTGdBVUYvSVFZZ0NDQU1UUVJBSUFzZ0N5Z0MwQUVnQ0VFRGRtbzJBdFFCSUFsQkgzWWhCZ3NnQmtGL1JpRU5DeUFHSUExeURRQWdBQ2dDL0FrTkFDQUtSUTBBSUFvb0FqUWdCeWdDTkVjTkFDQUtLQUk0SUFjb0FqaEhEUUFnQ2lnQ1dDQUhLQUpZUmcwQkN5QUFRUUEyQW9BS0RBRUxJQUFvQXNRSklnbEZEUUFnQUVFQk5nS0FDaUFBS0FMZ0NTRU1BMEJCQUNFR1FmLy8vLzhISVFkQkFDRUtBMEFnQ1NBS1FTaHNhaUlJS0FJWUJFQWdDQ0FHSUFnb0FoQWlDQ0FIU0NJT0d5RUdJQWdnQnlBT0d5RUhDeUFLUVFGcUlnb2dERTBOQUNBR1JRMENJQUFvQXRBSklBQW9BdFFKSWdoQkJIUnFJZ2NnQmlnQ0FEWUNBQ0FISUFZb0FpUTJBZ3dnQnlBR0tBSWNOZ0lFSUFjZ0JpZ0NJRFlDQ0NBQUlBaEJBV28yQXRRSlFRQWhDaUFHUVFBMkFoZ2dCaWdDRkNFSVFRQWhCa0gvLy8vL0J5RUhJQWdOQUFzZ0FDQUFLQUx3Q1VFQmF6WUM4QWtNQUFzQUN5QUFJQUFvQWdnMkFnQkJBaUVNUVFBaE1rRUFJUW9NQ1FzZ0FFS0Fnb0NBZ0FRM0FnUkJBQ0VLSUFCQkFEWUN0Qm9nQUVJQU53SU1EQWdMSUF0QkNHb2dDMEhzQVdvUUFnMEFJQXNvQXV3QklnWkJIMHNOQUNBTElBWkJBV28yQWxBZ0MwRUlhaUFMUWV3QmFoQUNEUUFnQ3lnQzdBRkJIMHNOQUNBTEtBSU1JUVlDUUNBTEtBSVVRUU4wSWd3Z0N5Z0NHQ0lPYXlJSVFTQk9CRUFnQmlnQUFDSUhRUmgwSUFkQkNIUkJnSUQ4QjNGeUlBZEJDSFpCZ1A0RGNTQUhRUmgyY25JaEJ5QUxLQUlRSWdoRkRRRWdCeUFJZENBR0xRQUVRUWdnQ0d0MmNpRUhEQUVMSUFoQkFVZ0VRRUVBSVFjTUFRc2dCaTBBQUNBTEtBSVFJZ2xCR0dvaURYUWhCeUFJSUFscVFRaHJJZ3BCQVVnTkFBTkFJQVl0QUFFZ0RVRUlheUlOZENBSGNpRUhJQXBCQ0VvaENDQUdRUUZxSVFZZ0NrRUlheUVLSUFnTkFBc0xJQXNnRGtFQmFpSUpOZ0lZSUFzZ0NVRUhjU0lJTmdJUUlBa2dERXNOQUNBTElBc29BZ2dpRWlBSlFRTjJhaUlHTmdJTUlBZEJBRWdOQUFKQUlBd2dDV3NpQ1VFZ1RnUkFJQVlvQUFBaUIwRVlkQ0FIUVFoMFFZQ0EvQWR4Y2lBSFFRaDJRWUQrQTNFZ0IwRVlkbkp5SVFjZ0NFVU5BU0FISUFoMElBWXRBQVJCQ0NBSWEzWnlJUWNNQVFzZ0NVRUJTQVJBUVFBaEJ3d0JDeUFHTFFBQUlBaEJHSElpRFhRaEJ5QUlJQWxxUVFocklncEJBVWdOQUFOQUlBWXRBQUVnRFVFSWF5SU5kQ0FIY2lFSElBcEJDRW9oQ0NBR1FRRnFJUVlnQ2tFSWF5RUtJQWdOQUFzTElBc2dEa0VEYWlJR05nSVlJQXNnQmtFSGNUWUNFQ0FHSUF4TERRQWdDeUFTSUFaQkEzWnFOZ0lNSUFkQi8vLy8vM3RMRFFBZ0MwRUFOZ0xRQVNBTFFRaHFJQXRCMEFGcUVBSWhCeUFMS0FMUUFTSUdRWDlHRFFBZ0J3MEFJQVpCQVdwQkFYWWlCMEVBSUFkcklBWkJBWEViUVJwcUlnWkJNMHNOQUNBTElBWTJBbFFnQzBFQU5nTFFBU0FMUVFocUlBdEIwQUZxRUFJaEJ5QUxLQUxRQVNJR1FYOUdEUUFnQncwQUlBWkJBV3BCQVhZaUIwRUFJQWRySUFaQkFYRWJRUnBxUVROTERRQWdDMEVBTmdMUUFTQUxRUWhxSUF0QjBBRnFFQUloQnlBTEtBTFFBU0lHUVg5R0RRQWdCdzBBSUFaQkFXcEJBWFlpQjBFQUlBZHJJQVpCQVhFYklnWkJER3BCR0VzTkFDQUxJQVkyQWxnZ0N5Z0NEQ0VHQWtBZ0N5Z0NGRUVEZENJSUlBc29BaGdpREdzaUNVRWdUZ1JBSUFZb0FBQWlCMEVZZENBSFFRaDBRWUNBL0FkeGNpQUhRUWgyUVlEK0EzRWdCMEVZZG5KeUlRY2dDeWdDRUNJSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBSlFRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0N5Z0NFQ0lLUVJocUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFXb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKY0lBc2dDeWdDQ0NJT0lBcEJBM1pxSWdZMkFnd0NRQ0FJSUFwcklncEJJRTRFUUNBR0tBQUFJZ2RCR0hRZ0IwRUlkRUdBZ1B3SGNYSWdCMEVJZGtHQS9nTnhJQWRCR0haeWNpRUhJQWxGRFFFZ0J5QUpkQ0FHTFFBRVFRZ2dDV3QyY2lFSERBRUxJQXBCQVVnRVFFRUFJUWNNQVFzZ0JpMEFBQ0FKUVJoeUlnMTBJUWNnQ1NBS2FrRUlheUlLUVFGSURRQURRQ0FHTFFBQklBMUJDR3NpRFhRZ0IzSWhCeUFLUVFoS0lRa2dCa0VCYWlFR0lBcEJDR3NoQ2lBSkRRQUxDeUFMSUF4QkFtb2lDallDR0NBTElBcEJCM0VpQ1RZQ0VDQUlJQXBKRFFBZ0N5QUhRUjkyTmdKZ0lBc2dEaUFLUVFOMmFpSUdOZ0lNQWtBZ0NDQUtheUlLUVNCT0JFQWdCaWdBQUNJSFFSaDBJQWRCQ0hSQmdJRDhCM0Z5SUFkQkNIWkJnUDREY1NBSFFSaDJjbkloQnlBSlJRMEJJQWNnQ1hRZ0JpMEFCRUVJSUFscmRuSWhCd3dCQ3lBS1FRRklCRUJCQUNFSERBRUxJQVl0QUFBZ0NVRVljaUlOZENFSElBa2dDbXBCQ0dzaUNrRUJTQTBBQTBBZ0JpMEFBU0FOUVFocklnMTBJQWR5SVFjZ0NrRUlTaUVKSUFaQkFXb2hCaUFLUVFocklRb2dDUTBBQ3dzZ0N5QU1RUU5xSWdZMkFoZ2dDeUFHUVFkeElnazJBaEFnQmlBSVN3MEFJQXNnQjBFZmRqWUNaQ0FMSUE0Z0JrRURkbW8yQWd3Q1FDQUlJQVpySWdaQkFXdEJIa3NOQUNBR0lBbHFRUWhySWdaQkFVZ05BQU5BSUFaQkNFb2hCeUFHUVFocklRWWdCdzBBQ3dzZ0N5QU1JQWxyUVF0cUlnWTJBaGdnQ3lBR1FRZHhOZ0lRSUFZZ0NFMEVRQ0FMSUE0Z0JrRURkbW8yQWd3TElBQWdDeWdDSUNJSFFRSjBhaUlHS0FLVUFTSUlEUUVnQmtISUFCQUlJZ28yQXBRQklBcEZEUU1NQWdzZ0N5Z0NOQkFFUVFBaENpQUxRUUEyQWpRZ0N5Z0NPQkFFSUF0QkFEWUNPQ0FMS0FJOEVBUWdDMEVBTmdJOElBc29Ba3dRQkVFRElRd01CZ3NDUUNBSElBQW9BZ1JIRFFBZ0N5Z0NKQ0FBS0FJSVJnMEFJQUJCZ1FJMkFnUUxJQWdvQWhRUUJDQUdLQUtVQVVFQU5nSVVJQVlvQXBRQktBSVlFQVFnQmlnQ2xBRkJBRFlDR0NBR0tBS1VBU2dDSEJBRUlBWW9BcFFCUVFBMkFod2dCaWdDbEFFb0Fpd1FCQ0FHS0FLVUFVRUFOZ0lzSUFZb0FwUUJJUW9MSUFvZ0MwRWdha0hJQUJBSEdndEJBQ0VLUVFBaERBd0RDeUFMS0FLUUFSQUVRUUFoQ2lBTFFRQTJBcEFCSUFzb0Fyd0JFQVJCQXlFTURBSUxJQUFnQmpZQ25Ba2dBQ2dDdkFraERrRUFJU0pCQUNFNUl3QkJzQUZySWcwa0FDQXJLQUlJSWhFRVFDQXJLQUlFSWg5QkJuUWhTeUFmUVRCc0lVd2dIMEVGZENFZ0lCOUJVR3doTENBUklCOXNJZ1pCQm5RaFRTQUdRUWgwSVU1QkFDQWZRUU4wSWhwckloZEJBWFFoS2tFQUlCOUJCSFFpTm1zaUkwRUNkQ0ZQSUNOQkFYUWhMZ05BQWtBZ0RpZ0NDQ0lHUVFGR0RRQUNRQUpBQWtBQ1FDQU9LQUxJQVNJVVJRUkFRUUVoQnd3QkMwRUZJUWNnQmtFQ1J3MEFRUVZCQVNBT0tBSUVJaElnRkNnQ0JFWWJJUWNnRGlnQ3pBRWlDQTBCUVFBaENBd0RDeUFPS0FMTUFTSUlSUVJBUVFBaENBd0RDeUFHUVFKSERRRWdEaWdDQkNFU0N5QVNJQWdvQWdSSERRRUxJQWRCQW5JaEJ3c0Nmd0pBQW44Z0IwRUNjU0kvQkVBQ1FDQU9LQUlBUVFWTkJFQWdDQ2dDQUVFR1NRMEJDeUFOUVFRMkFrQWdEVUVFTmdKSUlBMUJCRFlDT0NBTlFRUTJBakFNQXd0QkFpRU1RUUloRWdKQUlBNHZBUndOQUNBSUx3RXdEUUJCQVNFU0lBNG9BblFnQ0NnQ2ZFY05BQ0FPTGdHRUFTQUlMZ0dzQVdzaUJpQUdRUjkxSWdacUlBWnpRUU5MRFFBZ0RpNEJoZ0VnQ0M0QnJnRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RVNDeUFOSUJJMkFqQUNRQ0FPTHdFZURRQWdDQzhCTWcwQVFRRWhEQ0FPS0FKMElBZ29BbnhIRFFBZ0RpNEJpQUVnQ0M0QnNBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVlvQklBZ3VBYklCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoREFzZ0RTQU1OZ0k0UVFJaEUwRUNJUndDUUNBT0x3RWtEUUFnQ0M4Qk9BMEFRUUVoSENBT0tBSjRJQWdvQW9BQlJ3MEFJQTR1QVpRQklBZ3VBYndCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0xnR1dBU0FJTGdHK0FXc2lCaUFHUVI5MUlnWnFJQVp6UVFOTElSd0xJQTBnSERZQ1FBSkFJQTR2QVNZTkFDQUlMd0U2RFFCQkFTRVRJQTRvQW5nZ0NDZ0NnQUZIRFFBZ0RpNEJtQUVnQ0M0QndBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QVpvQklBZ3VBY0lCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNoRXdzZ0RTQVROZ0pJSUF3Z0VuSU5BaUFUSUJ4eURRSkJBQXdCQ3lBTlFRQTJBa0FnRFVFQU5nSklJQTFCQURZQ09DQU5RUUEyQWpCQkFBc2hFa0VCREFFTFFRRWhFa0VBQ3lFSkFrQUNRQUpBSUFkQkJIRWlRQVJBQWtBZ0RpZ0NBQ0lIUVFWTkJFQWdGQ2dDQUVFR1NRMEJDeUFOUVFRMkFuUWdEVUVFTmdLVUFTQU5RUVEyQWxRZ0RVRUVOZ0kwUVFFaEVnd0NDMEVDSVFaQkFpRWNBa0FnRGk4QkhBMEFJQlF2QVNZTkFFRUJJUndnRGlnQ2RDQVVLQUo0UncwQUlBNHVBWVFCSUJRdUFaZ0JheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPTGdHR0FTQVVMZ0dhQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MSVJ3TElBMGdIRFlDTkFKQUlBNHZBU0FOQUNBVUx3RXFEUUJCQVNFR0lBNG9BblFnRkNnQ2VFY05BQ0FPTGdHTUFTQVVMZ0dnQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJqZ0VnRkM0Qm9nRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN5RUdDeUFOSUFZMkFsUkJBaUVQUVFJaEV3SkFJQTR2QVN3TkFDQVVMd0UyRFFCQkFTRVRJQTRvQW53Z0ZDZ0NnQUZIRFFBZ0RpNEJwQUVnRkM0QnVBRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3MEFJQTR1QWFZQklCUXVBYm9CYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNoRXdzZ0RTQVROZ0owQWtBZ0RpOEJNQTBBSUJRdkFUb05BRUVCSVE4Z0RpZ0NmQ0FVS0FLQUFVY05BQ0FPTGdHc0FTQVVMZ0hBQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0RpNEJyZ0VnRkM0QndnRnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN5RVBDeUFOSUE4MkFwUUJRUUVoRWlBSlJRMENJQVlnSEhJTkFpQVBJQk55RFFKQkFDRVNEQUlMSUExQkFEWUNkQ0FOUVFBMkFwUUJJQTFCQURZQ1ZDQU5RUUEyQWpRZ0RpZ0NBQ0VIQ3lBSFFRWkpEUUFnRFVFRE5nS2dBU0FOUW9PQWdJQXdOd0trQVNBTlFRTTJBcEFCSUExQkF6WUNjQ0FOUVFNMkFxd0JJQTFDZzRDQWdEQTNBNWdCSUExQ2c0Q0FnREEzQTRnQklBMUNnNENBZ0RBM0E0QUJJQTFDZzRDQWdEQTNBM2dnRFVLRGdJQ0FNRGNEYUNBTlFvT0FnSUF3TndOZ0lBMUNnNENBZ0RBM0ExZ2dEVUtEZ0lDQU1EY0NUQ0FOUVFNMkFrUWdEVUVETmdJOERBRUxBa0FnQjBFQlRRUkFJQTBDZndKQUlBNHZBU0FpTkEwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlsRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JZ2tOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lKZzBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1oQkFpRVBJQTFCQWlBMFFRQkhRUUYwSUE0dkFTd2lNUnNpRmpZQ2NDQU5RUUlnSlVFQVIwRUJkQ0FPTHdFdUloMGJJaGsyQW5nZ0RVRUNJQWxCQUVkQkFYUWdEaThCTkNJVkd5SWVOZ0tBQVNBTlFRSWdKa0VBUjBFQmRDQU9Md0UySWk4YklpUTJBb2dCSUEwZ0RpOEJNQ0l6SURGeVFRQkhRUUYwSWdvMkFwQUJJQTBnRGk4Qk1pSWhJQjF5UVFCSFFRRjBJaTAyQXBnQklBMGdEaThCT0NJb0lCVnlRUUJIUVFGMEloczJBcUFCSUEwZ0RpOEJPaUlRSUM5eVFRQkhRUUYwSWlrMkFxZ0JRUUloQmlBT0x3RWVSUVJBUVFBaER5QU9Md0VjUVFCSFFRRjBJUVlMSUEwZ0JqWUNQQ0FOUVFJZ0R5QU9Md0VrSWpBYklnODJBa1FnRGk4QkppRTFJQTBnRUNBb2NrRUFSMEVCZENJUU5nS3NBU0FOSUNFZ0tISkJBRWRCQVhRaUtEWUNwQUVnRFNBaElETnlRUUJIUVFGMElpRTJBcHdCSUEwZ0ZTQXZja0VBUjBFQmRDSXZOZ0tNQVNBTklCVWdIWEpCQUVkQkFYUWlGVFlDaEFFZ0RTQWRJREZ5UVFCSFFRRjBJakUyQW53Z0RTQUpJQ1p5UVFCSFFRRjBJaDAyQW13Z0RTQUpJQ1Z5UVFCSFFRRjBJZ2syQW1RZ0RTQWxJRFJ5UVFCSFFRRjBJaVUyQWx3Z0RTQXdJRFZ5UVFCSFFRRjBJalEyQWt3TUFRc0Nmd0pBSUEwQ2Z3SkFBa0FDUUFKQUFrQWdCMEVDYXc0Q0FBRUNDeUFOQW44Q1FDQU9Md0VnSWlVTkFDQU9Md0VjRFFCQkFBd0JDMEVDQ3lJSE5nSlFJQTBDZndKQUlBNHZBU0lpRlEwQUlBNHZBUjROQUVFQURBRUxRUUlMSWd3MkFsZ2dEUUovQWtBZ0RpOEJLQ0lKRFFBZ0RpOEJKQTBBUVFBTUFRdEJBZ3NpSERZQ1lDQU5BbjhDUUNBT0x3RXFJaDBOQUNBT0x3RW1EUUJCQUF3QkMwRUNDeUlUTmdKb0lBMENmd0pBSUE0dkFUQWlMdzBBSUE0dkFTd05BRUVBREFFTFFRSUxJZ28yQXBBQklBMENmd0pBSUE0dkFUSWlJUTBBSUE0dkFTNE5BRUVBREFFTFFRSUxJaTAyQXBnQklBMENmd0pBSUE0dkFUZ2lLQTBBSUE0dkFUUU5BRUVBREFFTFFRSUxJaHMyQXFBQklBMENmd0pBSUE0dkFUb2lKZzBBSUE0dkFUWU5BRUVBREFFTFFRSUxJaWsyQXFnQlFRSWhHVUVDSVJZQ1FDQWxJQTR2QVN3aU0zSU5BRUVCSVJZZ0RpNEJwQUVnRGk0QmpBRnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3MEFJQTR1QWFZQklBNHVBWTRCYXlJR0lBWkJIM1VpQm1vZ0JuTkJBMHNOQUNBT0tBSjhJQTRvQW5SSElSWUxJQTBnRmpZQ2NBSkFJQlVnRGk4QkxpSTBjZzBBUVFFaEdTQU9MZ0dvQVNBT0xnR1FBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGk0QnFnRWdEaTRCa2dGcklnWWdCa0VmZFNJR2FpQUdjMEVEU3cwQUlBNG9BbndnRGlnQ2RFY2hHUXNnRFNBWk5nSjRRUUloSkVFQ0lSNENRQ0FKSUE0dkFUUWlNWElOQUVFQklSNGdEaTRCdEFFZ0RpNEJuQUZySWdZZ0JrRWZkU0lHYWlBR2MwRURTdzBBSUE0dUFiWUJJQTR1QVo0QmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjRSeUVlQ3lBTklCNDJBb0FCQWtBZ0hTQU9Md0UySWpCeURRQkJBU0VrSUE0dUFiZ0JJQTR1QWFBQmF5SUdJQVpCSDNVaUJtb2dCbk5CQTBzTkFDQU9MZ0c2QVNBT0xnR2lBV3NpQmlBR1FSOTFJZ1pxSUFaelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEpBc2dEU0FrTmdLSUFTQU9Md0VlRFFJZ0RpOEJIQVJBUVFJaEJpQU5RUUkyQWp3Z0RpOEJKQ0lRRFFaQkFDRVBRUUFNQnd0QkFDRUdJQTFCQURZQ1BFRUFJUTlCQUNBT0x3RWtJaEJGRFFZYURBVUxJQTBDZndKQUlBNHZBU0FpRHcwQUlBNHZBUndOQUVFQURBRUxRUUlMSWdjMkFsQWdEUUovQWtBZ0RpOEJJaUlWRFFBZ0RpOEJIZzBBUVFBTUFRdEJBZ3NpRERZQ1dDQU5BbjhDUUNBT0x3RW9JaWdOQUNBT0x3RWtEUUJCQUF3QkMwRUNDeUljTmdKZ0lBMENmd0pBSUE0dkFTb2lIUTBBSUE0dkFTWU5BRUVBREFFTFFRSUxJaE0yQW1nZ0RTQU9Md0VzSWdrZ0QzSkJBRWRCQVhRaUZqWUNjQ0FOSUE0dkFTNGlKaUFWY2tFQVIwRUJkQ0laTmdKNElBMGdEaThCTkNJeklDaHlRUUJIUVFGMEloNDJBb0FCSUEwZ0RpOEJOaUlsSUIxeVFRQkhRUUYwSWlRMkFvZ0JJQTFCQWlBSlFRQkhRUUYwSUE0dkFUQWlJUnNpQ2pZQ2tBRWdEVUVDSUNaQkFFZEJBWFFnRGk4Qk1pSTFHeUl0TmdLWUFTQU5RUUlnTTBFQVIwRUJkQ0FPTHdFNElqY2JJaHMyQXFBQklBMUJBaUFsUVFCSFFRRjBJQTR2QVRvaUVCc2lLVFlDcUFFZ0RRSi9Ba0FnRGk4QkhpSTZEUUFnRGk4QkhBMEFRUUFNQVF0QkFnc2lCallDUENBT0x3RW1CRUFnRGk4QkpDRXdEQU1MSUE0dkFTUWlNQTBDUVFBaE1FRUFEQU1MSUE0dUFZWUJJUVlnRGk0QmpnRWhDVUVDSVF3Z0RRSi9RUUlnRGk4QklDSkJJQTR2QVJ3aU8zSU5BQnBCQVNBT0xnR01BU0FPTGdHRUFXc2lCeUFIUVI5MUlnZHFJQWR6UVFOTERRQWFJQWtnQm1zaUJ5QUhRUjkxSWdkcUlBZHpRUU5MQ3lJSE5nSlFJQTR1QVlvQklSMGdEaTRCa2dFaEZRSkFJQTR2QVNJaUx5QU9Md0VlSWlWeURRQkJBU0VNSUE0dUFaQUJJQTR1QVlnQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFDQVZJQjFySWdvZ0NrRWZkU0lLYWlBS2MwRURTeUVNQ3lBTklBdzJBbGdnRGk0QmxnRWhOQ0FPTGdHZUFTRVFRUUloRXlBTkFuOUJBaUFPTHdFb0lqRWdEaThCSkNKQ2NnMEFHa0VCSUE0dUFad0JJQTR1QVpRQmF5SUtJQXBCSDNVaUNtb2dDbk5CQTBzTkFCb2dFQ0EwYXlJS0lBcEJIM1VpQ21vZ0NuTkJBMHNMSWh3MkFtQWdEaTRCbWdFaFF5QU9MZ0dpQVNFbUFrQWdEaThCS2lKRUlBNHZBU1lpVUhJTkFFRUJJUk1nRGk0Qm9BRWdEaTRCbUFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDWWdRMnNpQ2lBS1FSOTFJZ3BxSUFwelFRTkxJUk1MSUEwZ0V6WUNhQ0FPTGdHbUFTRXpRUUloR1VFQ0lSWUNRQ0JCSUE0dkFTd2lSWElOQUVFQklSWWdEaTRCcEFFZ0RpNEJqQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBSURNZ0NXc2lDaUFLUVI5MUlncHFJQXB6UVFOTERRQWdEaWdDZkNBT0tBSjBSeUVXQ3lBTklCWTJBbkFnRGk0QnFnRWhJUUpBSUM4Z0RpOEJMaUl3Y2cwQVFRRWhHU0FPTGdHb0FTQU9MZ0dRQVdzaUNpQUtRUjkxSWdwcUlBcHpRUU5MRFFBZ0lTQVZheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0FPS0FKOElBNG9BblJISVJrTElBMGdHVFlDZUNBT0xnRzJBU0VvUVFJaEpFRUNJUjRDUUNBeElBNHZBVFFpTlhJTkFFRUJJUjRnRGk0QnRBRWdEaTRCbkFGcklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlDZ2dFR3NpQ2lBS1FSOTFJZ3BxSUFwelFRTkxEUUFnRGlnQ2dBRWdEaWdDZUVjaEhnc2dEU0FlTmdLQUFTQU9MZ0c2QVNFM0FrQWdSQ0FPTHdFMklrWnlEUUJCQVNFa0lBNHVBYmdCSUE0dUFhQUJheUlLSUFwQkgzVWlDbW9nQ25OQkEwc05BQ0EzSUNacklnb2dDa0VmZFNJS2FpQUtjMEVEU3cwQUlBNG9Bb0FCSUE0b0FuaEhJU1FMSUEwZ0pEWUNpQUVnRGk0QnJnRWhSMEVDSVMwZ0RRSi9RUUlnUlNBT0x3RXdJbEZ5RFFBYVFRRWdEaTRCckFFZ0RpNEJwQUZySWdvZ0NrRWZkU0lLYWlBS2MwRURTdzBBR2lCSElETnJJZ29nQ2tFZmRTSUthaUFLYzBFRFN3c2lDallDa0FFZ0RpNEJzZ0VoT2dKQUlEQWdEaThCTWlKSWNnMEFRUUVoTFNBT0xnR3dBU0FPTGdHb0FXc2lEeUFQUVI5MUlnOXFJQTl6UVFOTERRQWdPaUFoYXlJUElBOUJIM1VpRDJvZ0QzTkJBMHNoTFFzZ0RTQXROZ0tZQVNBT0xnRytBU0UrUVFJaEtTQU5BbjlCQWlBMUlBNHZBVGdpU1hJTkFCcEJBU0FPTGdHOEFTQU9MZ0cwQVdzaUR5QVBRUjkxSWc5cUlBOXpRUU5MRFFBYUlENGdLR3NpRHlBUFFSOTFJZzlxSUE5elFRTkxDeUliTmdLZ0FTQU9MZ0hDQVNGS0FrQWdSaUFPTHdFNklsSnlEUUJCQVNFcElBNHVBY0FCSUE0dUFiZ0JheUlQSUE5QkgzVWlEMm9nRDNOQkEwc05BQ0JLSURkcklnOGdEMEVmZFNJUGFpQVBjMEVEU3lFcEN5QU5JQ2syQXFnQlFRSWhEeUFOQW45QkFpQWxJRHR5RFFBYVFRRWdEaTRCaUFFZ0RpNEJoQUZySWpzZ08wRWZkU0k3YWlBN2MwRURTdzBBR2lBZElBWnJJZ1lnQmtFZmRTSUdhaUFHYzBFRFN3c2lCallDUEFKQUlDVWdRbklOQUVFQklROGdEaTRCbEFFZ0RpNEJpQUZySWlVZ0pVRWZkU0lsYWlBbGMwRURTdzBBSURRZ0hXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdEaWdDZUNBT0tBSjBSeUVQQ3lBTklBODJBa1JCQWlFbElBMENmMEVDSUVJZ1VISU5BQnBCQVNBT0xnR1lBU0FPTGdHVUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWFJRU1nTkdzaUhTQWRRUjkxSWgxcUlCMXpRUU5MQ3lJME5nSk1Ba0FnTHlCQmNnMEFRUUVoSlNBT0xnR1FBU0FPTGdHTUFXc2lIU0FkUVI5MUloMXFJQjF6UVFOTERRQWdGU0FKYXlJSklBbEJIM1VpQ1dvZ0NYTkJBMHNoSlFzZ0RTQWxOZ0pjUVFJaEhVRUNJUWtDUUNBdklERnlEUUJCQVNFSklBNHVBWndCSUE0dUFaQUJheUl2SUM5QkgzVWlMMm9nTDNOQkEwc05BQ0FRSUJWckloVWdGVUVmZFNJVmFpQVZjMEVEU3cwQUlBNG9BbmdnRGlnQ2RFY2hDUXNnRFNBSk5nSmtBa0FnTVNCRWNnMEFRUUVoSFNBT0xnR2dBU0FPTGdHY0FXc2lGU0FWUVI5MUloVnFJQlZ6UVFOTERRQWdKaUFRYXlJVklCVkJIM1VpRldvZ0ZYTkJBMHNoSFFzZ0RTQWROZ0pzUVFJaEZTQU5BbjlCQWlBd0lFVnlEUUFhUVFFZ0RpNEJxQUVnRGk0QnBBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFHaUFoSUROckloQWdFRUVmZFNJUWFpQVFjMEVEU3dzaU1UWUNmQUpBSURBZ05YSU5BRUVCSVJVZ0RpNEJ0QUVnRGk0QnFBRnJJaEFnRUVFZmRTSVFhaUFRYzBFRFN3MEFJQ2dnSVdzaUVDQVFRUjkxSWhCcUlCQnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBVUVDSVNFZ0RRSi9RUUlnTlNCR2NnMEFHa0VCSUE0dUFiZ0JJQTR1QWJRQmF5SVFJQkJCSDNVaUVHb2dFSE5CQTBzTkFCb2dOeUFvYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNMSWk4MkFvd0JBa0FnU0NCUmNnMEFRUUVoSVNBT0xnR3dBU0FPTGdHc0FXc2lFQ0FRUVI5MUloQnFJQkJ6UVFOTERRQWdPaUJIYXlJUUlCQkJIM1VpRUdvZ0VITkJBMHNoSVFzZ0RTQWhOZ0tjQVVFQ0lSQkJBaUVvQWtBZ1NDQkpjZzBBUVFFaEtDQU9MZ0c4QVNBT0xnR3dBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnUGlBNmF5SW1JQ1pCSDNVaUptb2dKbk5CQTBzTkFDQU9LQUtBQVNBT0tBSjhSeUVvQ3lBTklDZzJBcVFCQWtBZ1NTQlNjZzBBUVFFaEVDQU9MZ0hBQVNBT0xnRzhBV3NpSmlBbVFSOTFJaVpxSUNaelFRTkxEUUFnU2lBK2F5SVFJQkJCSDNVaUVHb2dFSE5CQTBzaEVBc2dEU0FRTmdLc0FRd0ZDMEVDSVFZZ0RVRUNOZ0k4SUE0dkFTUWhFQXdDQzBFQ0N5STBOZ0pNSUEwZ0VDQTNja0VBUjBFQmRDSVFOZ0tzQVNBTklDRWdOWEpCQUVkQkFYUWlJVFlDbkFFZ0RTQWxJRE55UVFCSFFRRjBJaTgyQW93QklBMGdDU0FtY2tFQVIwRUJkQ0l4TmdKOFFRSWhDU0FOUVFJZ0tFRUFSMEVCZENBZEd5SWROZ0pzSUExQkFpQVBRUUJIUVFGMElCVWJJaVUyQWx4QkFpRVBBa0FnTUNBNmNnMEFRUUVoRHlBT0xnR1VBU0FPTGdHSUFXc2lNQ0F3UVI5MUlqQnFJREJ6UVFOTERRQWdEaTRCbGdFZ0RpNEJpZ0ZySWpBZ01FRWZkU0l3YWlBd2MwRURTdzBBSUE0b0FuZ2dEaWdDZEVjaER3c2dEU0FQTmdKRUFrQWdGU0FvY2cwQVFRRWhDU0FPTGdHY0FTQU9MZ0dRQVdzaUZTQVZRUjkxSWhWcUlCVnpRUU5MRFFBZ0RpNEJuZ0VnRGk0QmtnRnJJaFVnRlVFZmRTSVZhaUFWYzBFRFN3MEFJQTRvQW5nZ0RpZ0NkRWNoQ1FzZ0RTQUpOZ0prUVFJaEtFRUNJUlVDUUNBbUlETnlEUUJCQVNFVklBNHVBYlFCSUE0dUFhZ0JheUltSUNaQkgzVWlKbW9nSm5OQkEwc05BQ0FPTGdHMkFTQU9MZ0dxQVdzaUppQW1RUjkxSWlacUlDWnpRUU5MRFFBZ0RpZ0NnQUVnRGlnQ2ZFY2hGUXNnRFNBVk5nS0VBUUpBSURVZ04zSU5BRUVCSVNnZ0RpNEJ2QUVnRGk0QnNBRnJJaVlnSmtFZmRTSW1haUFtYzBFRFN3MEFJQTR1QWI0QklBNHVBYklCYXlJbUlDWkJIM1VpSm1vZ0puTkJBMHNOQUNBT0tBS0FBU0FPS0FKOFJ5RW9DeUFOSUNnMkFxUUJEQUlMUVFJaER5QVFDeUUxSUEwZ0R6WUNSQ0FPTHdFbUlUY2dEU0FtSUNoeVFRQkhRUUYwSWhBMkFxd0JJQTBnSVNBb2NrRUFSMEVCZENJb05nS2tBU0FOUVFJZ0wwRUFSMEVCZENBaEd5SWhOZ0tjQVNBTlFRSWdDVUVBUjBFQmRDQWRHeUlkTmdKc0lBMUJBaUFWUVFCSFFRRjBJQWtiSWdrMkFtUWdEVUVDSUNWQkFFZEJBWFFnRlJzaUpUWUNYQ0FOSURBZ01YSkJBRWRCQVhRaUx6WUNqQUVnRFNBeElEUnlRUUJIUVFGMEloVTJBb1FCSUEwZ015QTBja0VBUjBFQmRDSXhOZ0o4SUEwZ055QTFRZi8vQTNGeVFRQkhRUUYwSWpRMkFrd0xJQklOQUNBSERRQWdEQTBBSUJ3TkFDQVREUUFnRmcwQUlCa05BQ0FlRFFBZ0pBMEFJQW9OQUNBdERRQWdHdzBBSUNrTkFDQUdEUUFnRHcwQUlEUU5BQ0FsRFFBZ0NRMEFJQjBOQUNBeERRQWdGUTBBSUM4TkFDQWhEUUFnS0EwQUlCQkZEUUVMSUE0b0Fnd2hCeUFOSUE0b0FoQWlDU0FPS0FJVUlnWnFJZ3BCTXlBS1FUTklHeUlLUVFBZ0NrRUFTaHRCMEJkcUxRQUFJZ28yQWlBZ0RTQUdJQWRxSWd4Qk15QU1RVE5JR3lJTVFRQWdERUVBU2hzaUVrR1FGMm90QUFBaUREWUNIQ0FOSUJKQkEyeEJrQmhxSWhFMkFoZ2dQd1JBSUEwQ2Z5QUdJQWdvQWhRaUNFY0VRQ0FOSUFZZ0NHcEJBV3BCQVhZaUNDQUphaUlTUVRNZ0VrRXpTQnNpRWtFQUlCSkJBRW9iUWRBWGFpMEFBRFlDQ0NBTklBY2dDR29pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLR3lJSVFaQVhhaTBBQURZQ0JDQUlRUU5zUVpBWWFnd0JDeUFOSUFvMkFnZ2dEU0FNTmdJRUlCRUxOZ0lBQ3lCQUJFQUNRQ0FHSUJRb0FoUWlDRWNFUUNBTklBWWdDR3BCQVdwQkFYWWlCaUFKYWlJSVFUTWdDRUV6U0JzaUNFRUFJQWhCQUVvYlFkQVhhaTBBQURZQ0ZDQU5JQVlnQjJvaUJrRXpJQVpCTTBnYklnWkJBQ0FHUVFCS0d5SUdRWkFYYWkwQUFEWUNFQ0FHUVFOc1FaQVlhaUVSREFFTElBMGdDallDRkNBTklBdzJBaEFMSUEwZ0VUWUNEQXNnS3lnQ0FDQWZJRGxzSWg1QkNIUnFJQ0pCQkhScUlRbEJBQ0ViUVFNaEJ5QU5RVEJxSVE4RFFDQVBLQUlFSWdZRVFDQUpJQVlnRFNnQ0RDQU5LQUlRSUEwb0FoUWdOaEFUQ3lBUEtBSU1JZ1lFUUNBSlFRUnFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSVVJZ1lFUUNBSlFRaHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBUEtBSWNJZ1lFUUNBSlFReHFJQVlnRFNnQ0dDQU5LQUljSUEwb0FpQWdOaEFUQ3lBSElRd0NRQUpBQWtBZ0R5Z0NBQ0lHSUE4b0FnZ2lFVWNOQUNBR0lBOG9BaEJIRFFBZ0JpQVBLQUlZUncwQUlBWkZEUUlnRFNBYlFReHNhaUlIS0FJSUlSSWdCeWdDQkNFUUlBWkJCRWtOQVNBUVFRSjJRUUpxSVJsQkVDRVJJQWtoQndOQUFrQWdCeUFqYWlJR0xRQUFJaFFnQnkwQUFDSVRheUlJSUFoQkgzVWlDR29nQ0hNaUNDQVFUdzBBSUFjZ0xtb2lJUzBBQUNJY0lCUnJJZ29nQ2tFZmRTSUthaUFLY3lBU1R3MEFJQWNnTm1vaUpDMEFBQ0lWSUJOcklnb2dDa0VmZFNJS2FpQUtjeUFTVHcwQUFuOENRQ0FJSUJsSkJFQWdCeUFnYWlJSUxRQUFJUnNDZnlBU0lBY2dMR29pQ2kwQUFDSVdJQlJySWlnZ0tFRWZkU0lvYWlBb2Mwc0VRQ0FHSUJVZ0V5QVVhaUFjYWlJR1FRRjBhaUFXYWtFRWFrRURkam9BQUNBaElBWWdGbXBCQW1wQkFuWTZBQUFnQmlBV1FRTnNhaUFISUU5cUxRQUFRUUYwYWtFRWFrRURkZ3dCQ3lBR0lRb2dGQ0FWYWlBY1FRRjBha0VDYWtFQ2Rnc2hCaUFLSUFZNkFBQWdHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFazhOQVNBSElCd2dGQ0FWYWlBVGFpSUdRUUYwYWlBYmFrRUVha0VEZGpvQUFDQWtJQVlnRzJwQkFtcEJBblk2QUFBZ0JpQWJRUU5zYWlBSElFeHFMUUFBUVFGMGFrRUVha0VEZGd3Q0N5QUdJQlFnRldvZ0hFRUJkR3BCQW1wQkFuWTZBQUFMSUFjaENDQVRJQnhxSUJWQkFYUnFRUUpxUVFKMkN5RUdJQWdnQmpvQUFBc2dCMEVCYWlFSElCRkJBV3NpRVEwQUN3d0NDd0ovSUFZRVFDQU5JQnRCREd4cUloWWhHVUVFSVJJZ0JpQVdLQUlBYWtFQmF5MEFBQ0lJUVFGcUlRcEJBQ0FJYXlFY0lBa2hCd05BQWtBZ0ZpZ0NCQ0FISUNOcUlpRXRBQUFpRkNBSExRQUFJaE5ySWdZZ0JrRWZkU0lHYWlBR2MwME5BQ0FaS0FJSUloRWdCeUF1YWlJa0xRQUFJaFVnRkdzaUJpQUdRUjkxSWdacUlBWnpUUTBBSUFjZ05tb2lLQzBBQUNJUUlCTnJJZ1lnQmtFZmRTSUdhaUFHY3lBUlR3MEFJQWdoQmlBUklBY2dMR290QUFBaUxTQVVheUlwSUNsQkgzVWlLV29nS1hOTEJFQWdKQ0FWSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQlZCQVhScklDMXFRUUYxSWdZZ0JpQUlTaHNnQmlBY1NCdHFPZ0FBSUJrb0FnZ2hFU0FLSVFZTElDRUNmeUFSSUFjZ0lHb3RBQUFpSVNBVGF5SWtJQ1JCSDNVaUpHb2dKSE5MQkVBZ0tDQVFJQndnQ0NBVElCUnFRUUZxUVFGMklCQkJBWFJySUNGcVFRRjFJaEVnQ0NBUlNCc2dFU0FjU0J0cU9nQUFJQVpCQVdvaEJndEJBQ0FHYXlJaEN5QUdJQlVnRUdzZ0V5QVVhMEVDZEdwQkJHcEJBM1VpRVNBR0lCRklHeUFSSUNGSUd5SUdJQlJxUWNBMWFpMEFBRG9BQUNBSElCTWdCbXRCd0RWcUxRQUFPZ0FBQ3lBSFFRRnFJUWNnRWtFQmF5SVNEUUFMSUE4b0FnZ2hFUXNnRVFzRVFFRUVJUklnQ1VFRWFpRUhJQTBnRzBFTWJHb2lGaUVaSUJFZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlRSWdZRVFDQUpRUWhxSVFjZ0RTQWJRUXhzYWlJV0lSbEJCQ0VTSUFZZ0ZpZ0NBR3BCQVdzdEFBQWlDRUVCYWlFS1FRQWdDR3NoSEFOQUFrQWdGaWdDQkNBSElDTnFJaUV0QUFBaUZDQUhMUUFBSWhOcklnWWdCa0VmZFNJR2FpQUdjMDBOQUNBWktBSUlJaEVnQnlBdWFpSWtMUUFBSWhVZ0ZHc2lCaUFHUVI5MUlnWnFJQVp6VFEwQUlBY2dObW9pS0MwQUFDSVFJQk5ySWdZZ0JrRWZkU0lHYWlBR2N5QVJUdzBBSUFnaEJpQVJJQWNnTEdvdEFBQWlMU0FVYXlJcElDbEJIM1VpS1dvZ0tYTkxCRUFnSkNBVklCd2dDQ0FUSUJScVFRRnFRUUYySUJWQkFYUnJJQzFxUVFGMUlnWWdCaUFJU2hzZ0JpQWNTQnRxT2dBQUlCa29BZ2doRVNBS0lRWUxJQ0VDZnlBUklBY2dJR290QUFBaUlTQVRheUlrSUNSQkgzVWlKR29nSkhOTEJFQWdLQ0FRSUJ3Z0NDQVRJQlJxUVFGcVFRRjJJQkJCQVhScklDRnFRUUYxSWhFZ0NDQVJTQnNnRVNBY1NCdHFPZ0FBSUFaQkFXb2hCZ3RCQUNBR2F5SWhDeUFHSUJVZ0VHc2dFeUFVYTBFQ2RHcEJCR3BCQTNVaUVTQUdJQkZJR3lBUklDRklHeUlHSUJScVFjQTFhaTBBQURvQUFDQUhJQk1nQm10QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VrRUJheUlTRFFBTEN5QVBLQUlZSWdaRkRRRWdDVUVNYWlFSElBMGdHMEVNYkdvaUVDRVdRUVFoRWlBR0lCQW9BZ0JxUVFGckxRQUFJZ2hCQVdvaENrRUFJQWhySVJ3RFFBSkFJQkFvQWdRZ0J5QWphaUlaTFFBQUloUWdCeTBBQUNJVGF5SUdJQVpCSDNVaUJtb2dCbk5ORFFBZ0ZpZ0NDQ0lSSUFjZ0xtb2lJUzBBQUNJVklCUnJJZ1lnQmtFZmRTSUdhaUFHYzAwTkFDQUhJRFpxSWlRdEFBQWlHeUFUYXlJR0lBWkJIM1VpQm1vZ0JuTWdFVThOQUNBSUlRWWdFU0FISUN4cUxRQUFJaWdnRkdzaUxTQXRRUjkxSWkxcUlDMXpTd1JBSUNFZ0ZTQWNJQWdnRXlBVWFrRUJha0VCZGlBVlFRRjBheUFvYWtFQmRTSUdJQVlnQ0VvYklBWWdIRWdiYWpvQUFDQVdLQUlJSVJFZ0NpRUdDeUFaQW44Z0VTQUhJQ0JxTFFBQUloa2dFMnNpSVNBaFFSOTFJaUZxSUNGelN3UkFJQ1FnR3lBY0lBZ2dFeUFVYWtFQmFrRUJkaUFiUVFGMGF5QVpha0VCZFNJUklBZ2dFVWdiSUJFZ0hFZ2Jham9BQUNBR1FRRnFJUVlMUVFBZ0Jtc2lHUXNnQmlBVklCdHJJQk1nRkd0QkFuUnFRUVJxUVFOMUloRWdCaUFSU0JzZ0VTQVpTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdCeUFUSUFaclFjQTFhaTBBQURvQUFBc2dCMEVCYWlFSElCSkJBV3NpRWcwQUN3d0JDeUFHSUFjb0FnQnFRUUZyTFFBQUlnWkJBV29oQ2tFQUlBWnJJUnhCRUNFUklBa2hCd05BQWtBZ0J5QWphaUlXTFFBQUloUWdCeTBBQUNJVGF5SUlJQWhCSDNVaUNHb2dDSE1nRUU4TkFDQUhJQzVxSWhrdEFBQWlGU0FVYXlJSUlBaEJIM1VpQ0dvZ0NITWdFazhOQUNBSElEWnFJaUV0QUFBaUd5QVRheUlJSUFoQkgzVWlDR29nQ0hNZ0VrOE5BQ0FHSVFnZ0VpQUhJQ3hxTFFBQUlpUWdGR3NpS0NBb1FSOTFJaWhxSUNoelN3UkFJQmtnRlNBY0lBWWdFeUFVYWtFQmFrRUJkaUFWUVFGMGF5QWtha0VCZFNJSUlBWWdDRWdiSUFnZ0hFZ2Jham9BQUNBS0lRZ0xJQllnRkFKL0lCSWdCeUFnYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwc0VRQ0FoSUJzZ0hDQUdJQk1nRkdwQkFXcEJBWFlnRzBFQmRHc2dGbXBCQVhVaUZpQUdJQlpJR3lBV0lCeElHMm82QUFBZ0NFRUJhaUVJQzBFQUlBaHJJaFlMSUFnZ0ZTQWJheUFUSUJSclFRSjBha0VFYWtFRGRTSVZJQWdnRlVnYklCVWdGa2diSWdocVFjQTFhaTBBQURvQUFDQUhJQk1nQ0d0QndEVnFMUUFBT2dBQUN5QUhRUUZxSVFjZ0VVRUJheUlSRFFBTEN5QU1RUUZySVFjZ0QwRWdhaUVQSUFrZ1Myb2hDVUVDSVJzZ0RBMEFDeUFPS0FJTUlRWWdEU0FPS0FJUUlna2dEaWdDRkNJS0lBNG9BaGdpREdvaUIwRXpJQWRCTTBnYklnZEJBQ0FIUVFCS0cwRUNkRUhRUFdvb0FnQWlCMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBIUUYyb3RBQUFpRWpZQ0lDQU5JQVlnQjJvaUNFRXpJQWhCTTBnYklnaEJBQ0FJUVFCS0d5SUlRWkFYYWkwQUFDSVJOZ0ljSUEwZ0NFRURiRUdRR0dvaUNEWUNHQ0EvQkVBZ0RRSi9JQW9nRGlnQ3pBRW9BaFFpRDBjRVFDQU5JQWNnRENBUGFpSVBRVE1nRDBFelNCc2lEMEVBSUE5QkFFb2JRUUowUWRBOWFpZ0NBR3BCQVdwQkFYWWlEeUFKYWlJVVFUTWdGRUV6U0JzaUZFRUFJQlJCQUVvYlFkQVhhaTBBQURZQ0NDQU5JQVlnRDJvaUQwRXpJQTlCTTBnYklnOUJBQ0FQUVFCS0d5SVBRWkFYYWkwQUFEWUNCQ0FQUVFOc1FaQVlhZ3dCQ3lBTklCSTJBZ2dnRFNBUk5nSUVJQWdMTmdJQUN5QkFCRUFDUUNBS0lBNG9Bc2dCS0FJVUlnOUhCRUFnRFNBSElBd2dEMm9pQ0VFeklBaEJNMGdiSWdoQkFDQUlRUUJLRzBFQ2RFSFFQV29vQWdCcVFRRnFRUUYySWdjZ0NXb2lDRUV6SUFoQk0wZ2JJZ2hCQUNBSVFRQktHMEhRRjJvdEFBQTJBaFFnRFNBR0lBZHFJZ1pCTXlBR1FUTklHeUlHUVFBZ0JrRUFTaHNpQmtHUUYyb3RBQUEyQWhBZ0JrRURiRUdRR0dvaENBd0JDeUFOSUJJMkFoUWdEU0FSTmdJUUN5QU5JQWcyQWd3TElDc29BZ0FnVG1vZ0hrRUdkR29nSWtFRGRHb2lCeUJOYWlFU1FRRWhIRUVBSVFZZ0RVRXdhaUVSQTBBQ1FDQVJLQUlFSWdsRkRRQUNRQ0FOS0FJUUlnZ2dCMEVCYXlJVExRQUFJZ29nQnkwQUFDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDRkNJVklBZEJBbXN0QUFBaUR5QUtheUlVSUJSQkgzVWlGR29nRkhOTkRRQWdGU0FITFFBQkloUWdER3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWNDZnlBSlFRTk5CRUFnRXlBSklBMG9BZ3hxUVFGckxRQUFJZ2hCZjNNaUV5QUlRUUZxSWhVZ0RDQUthMEVDZENBVWF5QVBha0VFYWtFRGRTSUlJQWdnRlVvYklBZ2dFMGdiSWdnZ0NtcEJ3RFZxTFFBQU9nQUFJQXdnQ0d0QndEVnFMUUFBREFFTElCTWdDaUFVYWlBUFFRRjBha0VDYWtFQ2Rqb0FBQ0FNSUJSQkFYUnFJQTlxUVFKcVFRSjJDem9BQUNBTktBSVFJUWdMQWtBZ0J5QWFhaUlLUVFGckloVXRBQUFpRENBS0xRQUFJZzlySWhRZ0ZFRWZkU0lVYWlBVWN5QUlUdzBBSUEwb0FoUWlHeUFLUVFKckxRQUFJaFFnREdzaUV5QVRRUjkxSWhOcUlCTnpUUTBBSUJzZ0NpMEFBU0lUSUE5ckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBS0FuOGdDVUVEVFFSQUlCVWdDU0FOS0FJTWFrRUJheTBBQUNJSVFYOXpJZ2tnQ0VFQmFpSUtJQThnREd0QkFuUWdFMnNnRkdwQkJHcEJBM1VpQ0NBSUlBcEtHeUFJSUFsSUd5SUlJQXhxUWNBMWFpMEFBRG9BQUNBUElBaHJRY0ExYWkwQUFBd0JDeUFWSUF3Z0Uyb2dGRUVCZEdwQkFtcEJBblk2QUFBZ0R5QVRRUUYwYWlBVWFrRUNha0VDZGdzNkFBQWdEU2dDRUNFSUN5QVJLQUlFSVFrQ1FDQVNRUUZySWhNdEFBQWlDaUFTTFFBQUlneHJJZzhnRDBFZmRTSVBhaUFQY3lBSVR3MEFJQTBvQWhRaUZTQVNRUUpyTFFBQUlnOGdDbXNpRkNBVVFSOTFJaFJxSUJSelRRMEFJQlVnRWkwQUFTSVVJQXhySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FTQW44Z0NVRURUUVJBSUJNZ0NTQU5LQUlNYWtFQmF5MEFBQ0lJUVg5ekloTWdDRUVCYWlJVklBd2dDbXRCQW5RZ0ZHc2dEMnBCQkdwQkEzVWlDQ0FJSUJWS0d5QUlJQk5JR3lJSUlBcHFRY0ExYWkwQUFEb0FBQ0FNSUFoclFjQTFhaTBBQUF3QkN5QVRJQW9nRkdvZ0QwRUJkR3BCQW1wQkFuWTZBQUFnRENBVVFRRjBhaUFQYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NFQ0VJQ3lBSUlCSWdHbW9pQ2tFQmF5SVRMUUFBSWd3Z0NpMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRFNnQ0ZDSVZJQXBCQW1zdEFBQWlDQ0FNYXlJVUlCUkJIM1VpRkdvZ0ZITk5EUUFnRlNBS0xRQUJJaFFnRDJzaUd5QWJRUjkxSWh0cUlCdHpUUTBBSUFvQ2Z5QUpRUU5OQkVBZ0V5QUpJQTBvQWd4cVFRRnJMUUFBSWdsQmYzTWlDaUFKUVFGcUlna2dEeUFNYTBFQ2RDQVVheUFJYWtFRWFrRURkU0lJSUFnZ0NVb2JJQWdnQ2tnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQk1nRENBVWFpQUlRUUYwYWtFQ2FrRUNkam9BQUNBUElCUkJBWFJxSUFocVFRSnFRUUoyQ3pvQUFBc0NRQ0FSS0FJa0lncEZEUUFDUUNBTktBSVFJZ2dnQnlBMmFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlVSWhzZ0NVRUNheTBBQUNJVUlBeHJJaE1nRTBFZmRTSVRhaUFUYzAwTkFDQWJJQWt0QUFFaUV5QVBheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdDUUovSUFwQkEwMEVRQ0FWSUFvZ0RTZ0NER3BCQVdzdEFBQWlDRUYvY3lJVklBaEJBV29pR3lBUElBeHJRUUowSUJOcklCUnFRUVJxUVFOMUlnZ2dDQ0FiU2hzZ0NDQVZTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0ZTQU1JQk5xSUJSQkFYUnFRUUpxUVFKMk9nQUFJQThnRTBFQmRHb2dGR3BCQW1wQkFuWUxPZ0FBSUEwb0FoQWhDQXNDUUNBSklCcHFJZ2xCQVdzaUZTMEFBQ0lNSUFrdEFBQWlEMnNpRkNBVVFSOTFJaFJxSUJSeklBaFBEUUFnRFNnQ0ZDSWJJQWxCQW1zdEFBQWlGQ0FNYXlJVElCTkJIM1VpRTJvZ0UzTk5EUUFnR3lBSkxRQUJJaE1nRDJzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrQ2Z5QUtRUU5OQkVBZ0ZTQUtJQTBvQWd4cVFRRnJMUUFBSWdoQmYzTWlDU0FJUVFGcUlnb2dEeUFNYTBFQ2RDQVRheUFVYWtFRWFrRURkU0lJSUFnZ0Nrb2JJQWdnQ1VnYklnZ2dER3BCd0RWcUxRQUFPZ0FBSUE4Z0NHdEJ3RFZxTFFBQURBRUxJQlVnRENBVGFpQVVRUUYwYWtFQ2FrRUNkam9BQUNBUElCTkJBWFJxSUJScVFRSnFRUUoyQ3pvQUFDQU5LQUlRSVFnTElCRW9BaVFoQ2dKQUlCSWdObW9pQ1VFQmF5SVZMUUFBSWd3Z0NTMEFBQ0lQYXlJVUlCUkJIM1VpRkdvZ0ZITWdDRThOQUNBTktBSVVJaHNnQ1VFQ2F5MEFBQ0lVSUF4ckloTWdFMEVmZFNJVGFpQVRjMDBOQUNBYklBa3RBQUVpRXlBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0NRSi9JQXBCQTAwRVFDQVZJQW9nRFNnQ0RHcEJBV3N0QUFBaUNFRi9jeUlWSUFoQkFXb2lHeUFQSUF4clFRSjBJQk5ySUJScVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBVlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFBZ0R5QUlhMEhBTldvdEFBQU1BUXNnRlNBTUlCTnFJQlJCQVhScVFRSnFRUUoyT2dBQUlBOGdFMEVCZEdvZ0ZHcEJBbXBCQW5ZTE9nQUFJQTBvQWhBaENBc2dDQ0FKSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaFFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSU1ha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBZ0VTZ0NGQ0lKUlEwQUlBZEJCR29oRXdKQUlBMG9BaHdpQ0NBSExRQURJZ29nQnkwQUJDSU1heUlQSUE5QkgzVWlEMm9nRDNOTkRRQWdEU2dDSUNJVklBY3RBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQUhMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdCeUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUFjZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRXlBYWFpSUtRUUZySWhVdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUtRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ2kwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FLQW44Z0NVRURUUVJBSUJVZ0NTQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU1FRUnFJUk1nRVNnQ0ZDRUpBa0FnRWkwQUF5SUtJQkl0QUFRaURHc2lEeUFQUVI5MUlnOXFJQTl6SUFoUERRQWdEU2dDSUNJVklCSXRBQUlpRHlBS2F5SVVJQlJCSDNVaUZHb2dGSE5ORFFBZ0ZTQVNMUUFGSWhRZ0RHc2lHeUFiUVI5MUlodHFJQnR6VFEwQUlCTUNmeUFKUVFOTkJFQWdFaUFKSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pRlNBSVFRRnFJaHNnRENBS2EwRUNkQ0FVYXlBUGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0ZVZ2JJZ2dnQ21wQndEVnFMUUFBT2dBRElBd2dDR3RCd0RWcUxRQUFEQUVMSUJJZ0NpQVVhaUFQUVFGMGFrRUNha0VDZGpvQUF5QU1JQlJCQVhScUlBOXFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xJQWdnRXlBYWFpSUtRUUZySWhNdEFBQWlEQ0FLTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQU5LQUlnSWhVZ0NrRUNheTBBQUNJSUlBeHJJaFFnRkVFZmRTSVVhaUFVYzAwTkFDQVZJQW90QUFFaUZDQVBheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdDZ0ovSUFsQkEwMEVRQ0FUSUFrZ0RTZ0NHR3BCQVdzdEFBQWlDVUYvY3lJS0lBbEJBV29pQ1NBUElBeHJRUUowSUJScklBaHFRUVJxUVFOMUlnZ2dDQ0FKU2hzZ0NDQUtTQnNpQ0NBTWFrSEFOV290QUFBNkFBQWdEeUFJYTBIQU5Xb3RBQUFNQVFzZ0V5QU1JQlJxSUFoQkFYUnFRUUpxUVFKMk9nQUFJQThnRkVFQmRHb2dDR3BCQW1wQkFuWUxPZ0FBQ3dKQUlCRW9BalFpQ2tVTkFDQUhJRFpxSWdsQkJHb2hGQUpBSUEwb0Fod2lDQ0FKTFFBRElnd2dDUzBBQkNJUGF5SVRJQk5CSDNVaUUyb2dFM05ORFFBZ0RTZ0NJQ0liSUJSQkFtc3RBQUFpRXlBTWF5SVZJQlZCSDNVaUZXb2dGWE5ORFFBZ0d5QUpMUUFGSWhVZ0Qyc2lFQ0FRUVI5MUloQnFJQkJ6VFEwQUlCUUNmeUFLUVFOTkJFQWdDU0FLSUEwb0FoaHFRUUZyTFFBQUlnaEJmM01pQ1NBSVFRRnFJaHNnRHlBTWEwRUNkQ0FWYXlBVGFrRUVha0VEZFNJSUlBZ2dHMG9iSUFnZ0NVZ2JJZ2dnREdwQndEVnFMUUFBT2dBRElBOGdDR3RCd0RWcUxRQUFEQUVMSUFrZ0RDQVZhaUFUUVFGMGFrRUNha0VDZGpvQUF5QVBJQlZCQVhScUlCTnFRUUpxUVFKMkN6b0FBQ0FOS0FJY0lRZ0xBa0FnRkNBYWFpSUpRUUZySWhVdEFBQWlEQ0FKTFFBQUlnOXJJaFFnRkVFZmRTSVVhaUFVY3lBSVR3MEFJQTBvQWlBaUd5QUpRUUpyTFFBQUloUWdER3NpRXlBVFFSOTFJaE5xSUJOelRRMEFJQnNnQ1MwQUFTSVRJQTlySWhBZ0VFRWZkU0lRYWlBUWMwME5BQ0FKQW44Z0NrRURUUVJBSUJVZ0NpQU5LQUlZYWtFQmF5MEFBQ0lJUVg5eklna2dDRUVCYWlJS0lBOGdER3RCQW5RZ0Uyc2dGR3BCQkdwQkEzVWlDQ0FJSUFwS0d5QUlJQWxJR3lJSUlBeHFRY0ExYWkwQUFEb0FBQ0FQSUFoclFjQTFhaTBBQUF3QkN5QVZJQXdnRTJvZ0ZFRUJkR3BCQW1wQkFuWTZBQUFnRHlBVFFRRjBhaUFVYWtFQ2FrRUNkZ3M2QUFBZ0RTZ0NIQ0VJQ3lBU0lEWnFJZ2xCQkdvaEZDQVJLQUkwSVFvQ1FDQUpMUUFESWd3Z0NTMEFCQ0lQYXlJVElCTkJIM1VpRTJvZ0UzTWdDRThOQUNBTktBSWdJaHNnRkVFQ2F5MEFBQ0lUSUF4ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBYklBa3RBQVVpRlNBUGF5SVFJQkJCSDNVaUVHb2dFSE5ORFFBZ0ZBSi9JQXBCQTAwRVFDQUpJQW9nRFNnQ0dHcEJBV3N0QUFBaUNFRi9jeUlKSUFoQkFXb2lHeUFQSUF4clFRSjBJQlZySUJOcVFRUnFRUU4xSWdnZ0NDQWJTaHNnQ0NBSlNCc2lDQ0FNYWtIQU5Xb3RBQUE2QUFNZ0R5QUlhMEhBTldvdEFBQU1BUXNnQ1NBTUlCVnFJQk5CQVhScVFRSnFRUUoyT2dBRElBOGdGVUVCZEdvZ0UycEJBbXBCQW5ZTE9nQUFJQTBvQWh3aENBc2dDQ0FVSUJwcUlnbEJBV3NpRXkwQUFDSU1JQWt0QUFBaUQyc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlBMG9BaUFpRlNBSlFRSnJMUUFBSWdnZ0RHc2lGQ0FVUVI5MUloUnFJQlJ6VFEwQUlCVWdDUzBBQVNJVUlBOXJJaHNnRzBFZmRTSWJhaUFiYzAwTkFDQUpBbjhnQ2tFRFRRUkFJQk1nQ2lBTktBSVlha0VCYXkwQUFDSUpRWDl6SWdvZ0NVRUJhaUlKSUE4Z0RHdEJBblFnRkdzZ0NHcEJCR3BCQTNVaUNDQUlJQWxLR3lBSUlBcElHeUlJSUF4cVFjQTFhaTBBQURvQUFDQVBJQWhyUWNBMWFpMEFBQXdCQ3lBVElBd2dGR29nQ0VFQmRHcEJBbXBCQW5ZNkFBQWdEeUFVUVFGMGFpQUlha0VDYWtFQ2RnczZBQUFMQWtBQ1FDQVJLQUlBSWdnZ0VTZ0NDQ0lNUncwQUlBZ2dFU2dDRUVjTkFDQUlJQkVvQWhoSERRQWdDRVVOQVNBSElBZ2dEU0FHUVF4c2FpSUdJQm9RSHlBU0lCRW9BZ0FnQmlBYUVCOE1BUXNnQ0FSQUlBMGdCa0VNYkdvaUNTRUtJQWdnQ1NnQ0FHcEJBV3N0QUFBaUNFRi9jeUVNSUFoQkFXb2hEd0pBSUFrb0FnUWlDQ0FISUJkcUloVXRBQUFpRkNBSExRQUFJaE5ySWhzZ0cwRWZkU0liYWlBYmMwME5BQ0FLS0FJSUloc2dCeUFxYWkwQUFDSVFJQlJySWhZZ0ZrRWZkU0lXYWlBV2MwME5BQ0FiSUFjZ0dtb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0ZTQU1JQThnRXlBVWEwRUNkQ0FXYXlBUWFrRUVha0VEZFNJSUlBZ2dEMG9iSUFnZ0RFZ2JJZ2dnRkdwQndEVnFMUUFBT2dBQUlBY2dFeUFJYTBIQU5Xb3RBQUE2QUFBZ0NTZ0NCQ0VJQ3dKQUlBZEJBV29pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBU0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdDRThOQUNBS0tBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFNSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSUlJQWdnRDBvYklBZ2dERWdiSWdnZ0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBSWEwSEFOV290QUFBNkFBQWdDU2dDQkNFSUN5QVJLQUlBSUFrb0FnQnFRUUZyTFFBQUlnOUJmM01oRENBUFFRRnFJUThDUUNBU0lCZHFJaFV0QUFBaUZDQVNMUUFBSWhOckloc2dHMEVmZFNJYmFpQWJjeUFJVHcwQUlBb29BZ2dpR3lBU0lDcHFMUUFBSWhBZ0ZHc2lGaUFXUVI5MUloWnFJQlp6VFEwQUlCc2dFaUFhYWkwQUFDSVdJQk5ySWhrZ0dVRWZkU0laYWlBWmMwME5BQ0FWSUF3Z0R5QVRJQlJyUVFKMElCWnJJQkJxUVFScVFRTjFJZ2dnQ0NBUFNoc2dDQ0FNU0JzaUNDQVVha0hBTldvdEFBQTZBQUFnRWlBVElBaHJRY0ExYWkwQUFEb0FBQ0FKS0FJRUlRZ0xBa0FnQ0NBU1FRRnFJZ2tnRjJvaUZTMEFBQ0lVSUJJdEFBRWlFMnNpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQW9vQWdnaUNDQUpJQ3BxTFFBQUlnb2dGR3NpR3lBYlFSOTFJaHRxSUJ0elRRMEFJQWdnQ1NBYWFpMEFBQ0liSUJOckloQWdFRUVmZFNJUWFpQVFjMDBOQUNBVklCUWdEQ0FQSUJNZ0ZHdEJBblFnRzJzZ0NtcEJCR3BCQTNVaUNDQUlJQTlLR3lBSUlBeElHeUlJYWtIQU5Xb3RBQUE2QUFBZ0NTQVRJQWhyUWNBMWFpMEFBRG9BQUFzZ0VTZ0NDQ0VNQ3dKQUlBeEZEUUFnRFNBR1FReHNhaUlJSVFrZ0RDQUlLQUlBYWtFQmF5MEFBQ0lNUVg5eklRb2dERUVCYWlFUEFrQWdDQ2dDQkNJTUlBZEJBbW9pRkNBWGFpSWJMUUFBSWhNZ0J5MEFBaUlWYXlJUUlCQkJIM1VpRUdvZ0VITk5EUUFnQ1NnQ0NDSVFJQlFnS21vdEFBQWlGaUFUYXlJWklCbEJIM1VpR1dvZ0dYTk5EUUFnRUNBVUlCcHFMUUFBSWhrZ0ZXc2lIaUFlUVI5MUloNXFJQjV6VFEwQUlCc2dDaUFQSUJVZ0UydEJBblFnR1dzZ0ZtcEJCR3BCQTNVaURDQU1JQTlLR3lBS0lBeEtHeUlNSUJOcVFjQTFhaTBBQURvQUFDQVVJQlVnREd0QndEVnFMUUFBT2dBQUlBZ29BZ1FoREFzQ1FDQUhRUU5xSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQU1pRldzaUVDQVFRUjkxSWhCcUlCQnpJQXhQRFFBZ0NTZ0NDQ0lRSUJRZ0ttb3RBQUFpRmlBVGF5SVpJQmxCSDNVaUdXb2dHWE5ORFFBZ0VDQVVJQnBxTFFBQUloa2dGV3NpSGlBZVFSOTFJaDVxSUI1elRRMEFJQnNnQ2lBUElCVWdFMnRCQW5RZ0dXc2dGbXBCQkdwQkEzVWlEQ0FNSUE5S0d5QUtJQXhLR3lJS0lCTnFRY0ExYWkwQUFEb0FBQ0FVSUJVZ0NtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaERBc2dFU2dDQ0NBSUtBSUFha0VCYXkwQUFDSVBRWDl6SVFvZ0QwRUJhaUVQQWtBZ0VrRUNhaUlVSUJkcUloc3RBQUFpRXlBU0xRQUNJaFZySWhBZ0VFRWZkU0lRYWlBUWN5QU1UdzBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TElBd2dFa0VEYWlJSUlCZHFJaFV0QUFBaUZDQVNMUUFESWhOckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSktBSUlJZ2tnQ0NBcWFpMEFBQ0lNSUJSckloc2dHMEVmZFNJYmFpQWJjMDBOQUNBSklBZ2dHbW90QUFBaUd5QVRheUlRSUJCQkgzVWlFR29nRUhOTkRRQWdGU0FLSUE4Z0V5QVVhMEVDZENBYmF5QU1ha0VFYWtFRGRTSUpJQWtnRDBvYklBa2dDa2diSWdrZ0ZHcEJ3RFZxTFFBQU9nQUFJQWdnRXlBSmEwSEFOV290QUFBNkFBQUxBa0FnRVNnQ0VDSUtSUTBBSUEwZ0JrRU1iR29pQ0NFSklBb2dDQ2dDQUdwQkFXc3RBQUFpREVGL2N5RUtJQXhCQVdvaER3SkFJQWdvQWdRaURDQUhRUVJxSWhRZ0Yyb2lHeTBBQUNJVElBY3RBQVFpRldzaUVDQVFRUjkxSWhCcUlCQnpUUTBBSUFrb0FnZ2lFQ0FVSUNwcUxRQUFJaFlnRTJzaUdTQVpRUjkxSWhscUlCbHpUUTBBSUJBZ0ZDQWFhaTBBQUNJWklCVnJJaDRnSGtFZmRTSWVhaUFlYzAwTkFDQWJJQW9nRHlBVklCTnJRUUowSUJscklCWnFRUVJxUVFOMUlnd2dEQ0FQU2hzZ0NpQU1TaHNpRENBVGFrSEFOV290QUFBNkFBQWdGQ0FWSUF4clFjQTFhaTBBQURvQUFDQUlLQUlFSVF3TEFrQWdCMEVGYWlJVUlCZHFJaHN0QUFBaUV5QUhMUUFGSWhWckloQWdFRUVmZFNJUWFpQVFjeUFNVHcwQUlBa29BZ2dpRUNBVUlDcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCQWdGQ0FhYWkwQUFDSVpJQlZySWg0Z0hrRWZkU0llYWlBZWMwME5BQ0FiSUFvZ0R5QVZJQk5yUVFKMElCbHJJQlpxUVFScVFRTjFJZ3dnRENBUFNoc2dDaUFNU2hzaUNpQVRha0hBTldvdEFBQTZBQUFnRkNBVklBcHJRY0ExYWkwQUFEb0FBQ0FJS0FJRUlRd0xJQkVvQWhBZ0NDZ0NBR3BCQVdzdEFBQWlEMEYvY3lFS0lBOUJBV29oRHdKQUlCSkJCR29pRkNBWGFpSWJMUUFBSWhNZ0VpMEFCQ0lWYXlJUUlCQkJIM1VpRUdvZ0VITWdERThOQUNBSktBSUlJaEFnRkNBcWFpMEFBQ0lXSUJOckloa2dHVUVmZFNJWmFpQVpjMDBOQUNBUUlCUWdHbW90QUFBaUdTQVZheUllSUI1QkgzVWlIbW9nSG5OTkRRQWdHeUFLSUE4Z0ZTQVRhMEVDZENBWmF5QVdha0VFYWtFRGRTSU1JQXdnRDBvYklBb2dERW9iSWd3Z0UycEJ3RFZxTFFBQU9nQUFJQlFnRlNBTWEwSEFOV290QUFBNkFBQWdDQ2dDQkNFTUN5QU1JQkpCQldvaUNDQVhhaUlWTFFBQUloUWdFaTBBQlNJVGF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTZ0NDQ0lKSUFnZ0ttb3RBQUFpRENBVWF5SWJJQnRCSDNVaUcyb2dHM05ORFFBZ0NTQUlJQnBxTFFBQUloc2dFMnNpRUNBUVFSOTFJaEJxSUJCelRRMEFJQlVnQ2lBUElCTWdGR3RCQW5RZ0cyc2dER3BCQkdwQkEzVWlDU0FKSUE5S0d5QUpJQXBJR3lJSklCUnFRY0ExYWkwQUFEb0FBQ0FJSUJNZ0NXdEJ3RFZxTFFBQU9nQUFDeUFSS0FJWUlncEZEUUFnRFNBR1FReHNhaUlJSVFrZ0NpQUlLQUlBYWtFQmF5MEFBQ0lHUVg5eklRb2dCa0VCYWlFTUFrQWdDQ2dDQkNJR0lBZEJCbW9pRHlBWGFpSVZMUUFBSWhRZ0J5MEFCaUlUYXlJYklCdEJIM1VpRzJvZ0czTk5EUUFnQ1NnQ0NDSWJJQThnS21vdEFBQWlFQ0FVYXlJV0lCWkJIM1VpRm1vZ0ZuTk5EUUFnR3lBUElCcHFMUUFBSWhZZ0Uyc2lHU0FaUVI5MUlobHFJQmx6VFEwQUlCVWdDaUFNSUJNZ0ZHdEJBblFnRm1zZ0VHcEJCR3BCQTNVaUJpQUdJQXhLR3lBR0lBcElHeUlHSUJScVFjQTFhaTBBQURvQUFDQVBJQk1nQm10QndEVnFMUUFBT2dBQUlBZ29BZ1FoQmdzQ1FDQUhRUWRxSWc4Z0Yyb2lGUzBBQUNJVUlBY3RBQWNpRTJzaUd5QWJRUjkxSWh0cUlCdHpJQVpQRFFBZ0NTZ0NDQ0liSUE4Z0ttb3RBQUFpRUNBVWF5SVdJQlpCSDNVaUZtb2dGbk5ORFFBZ0d5QVBJQnBxTFFBQUloWWdFMnNpR1NBWlFSOTFJaGxxSUJselRRMEFJQlVnQ2lBTUlCTWdGR3RCQW5RZ0Ztc2dFR3BCQkdwQkEzVWlCaUFHSUF4S0d5QUdJQXBJR3lJR0lCUnFRY0ExYWkwQUFEb0FBQ0FQSUJNZ0JtdEJ3RFZxTFFBQU9nQUFJQWdvQWdRaEJnc2dFU2dDR0NBSUtBSUFha0VCYXkwQUFDSU1RWDl6SVFvZ0RFRUJhaUVNQWtBZ0VrRUdhaUlQSUJkcUloVXRBQUFpRkNBU0xRQUdJaE5ySWhzZ0cwRWZkU0liYWlBYmN5QUdUdzBBSUFrb0FnZ2lHeUFQSUNwcUxRQUFJaEFnRkdzaUZpQVdRUjkxSWhacUlCWnpUUTBBSUJzZ0R5QWFhaTBBQUNJV0lCTnJJaGtnR1VFZmRTSVphaUFaYzAwTkFDQVZJQW9nRENBVElCUnJRUUowSUJacklCQnFRUVJxUVFOMUlnWWdCaUFNU2hzZ0JpQUtTQnNpQmlBVWFrSEFOV290QUFBNkFBQWdEeUFUSUFaclFjQTFhaTBBQURvQUFDQUlLQUlFSVFZTElBWWdFa0VIYWlJSUlCZHFJaE10QUFBaUR5QVNMUUFISWhSckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBSktBSUlJZ1lnQ0NBcWFpMEFBQ0lKSUE5ckloVWdGVUVmZFNJVmFpQVZjMDBOQUNBR0lBZ2dHbW90QUFBaUZTQVVheUliSUJ0QkgzVWlHMm9nRzNOTkRRQWdFeUFQSUFvZ0RDQVVJQTlyUVFKMElCVnJJQWxxUVFScVFRTjFJZ1lnQmlBTVNoc2dCaUFLU0JzaUJtcEJ3RFZxTFFBQU9nQUFJQWdnRkNBR2EwSEFOV290QUFBNkFBQUxJQklnSUdvaEVpQUhJQ0JxSVFjZ0VVRkFheUVSSUJ4QkFYRWhDRUVBSVJ4QkFpRUdJQWdOQUFzZ0t5Z0NDQ0VSQzBFQUlDSkJBV29pQmlBR0lCOUdJZ1liSVNJZ0RrSFlBV29oRGlBR0lEbHFJamtnRVVrTkFBc0xJQTFCc0FGcUpBQWdBRUlBTndLb0NRSkFJQUFvQXBnSklnbEZEUUFnQ1VFRGNTRUhJQUFvQXJ3SklRaEJBQ0VHSUFsQkFXdEJBMDhFUUNBSlFYeHhJUTBEUUNBSUlBWkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFYSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkFuSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FJSUFaQkEzSkIyQUZzYWlJSlFRQTJBc1FCSUFsQkFEWUNCQ0FHUVFScUlRWWdEVUVFYXlJTkRRQUxDeUFIUlEwQUEwQWdDQ0FHUWRnQmJHb2lDVUVBTmdMRUFTQUpRUUEyQWdRZ0JrRUJhaUVHSUFkQkFXc2lCdzBBQ3dzZ0FDZ0NFQ0VJUVFBaEJrRUJJUkVDUUNBQUtBTDBERVVOQUFOQUFrQUNRQ0FBSUFaQkZHeHFRZmdNYWlnQ0FBNEdBd0FBQUFBQkFBc2dCa0VCYWlFR0RBRUxDMEVBSVJFTEFrQUNmd0pBQWtBQ1FBSkFBa0FnQ0NnQ0VBNENBQUVDQ3lBQUtBTFFDaUlQUVFWR0JFQWdBRUlBTndLRUNpQUFLQUxzQ2lFR1FRQWhDZ3dFQ3lBQUtBS0VDaUlLSUFBb0F1d0tJZ1pORFFNZ0NpQUdheUFJS0FJVUlnZEJBWFpKRFFNZ0FDZ0NpQW9nQjJvTUJBdEJBQ0VHQW45QkFDQUFLQUxRQ2lJUFFRVkdEUUFhSUFBb0FwQUtJZ2NnQUNnQ2pBb2dBQ2dDNUFwTkRRQWFJQWdvQWd3Z0Iyb0xJUm9DZnlBSUtBSWtJZzRFUUNBQUtBTGtDaUFhYWlFR0N5QUdJQUFvQXRRS0loTkZJQVpCQUVkeGF5SVVDd1JBSUJSQkFXc2lCaUFHSUE1dUlpY2dEbXhySVJnTFFRQWhCMEVBSVFvQ1FDQU9SUTBBSUE1QkEzRWhFaUFJS0FJb0lRWkJBQ0VKSUE1QkFXdEJBMDhFUUVFQUlRd2dEa0Y4Y1NJSklRNERRQ0FHSUF4QkFuUWlEVUVNY21vb0FnQWdCaUFOUVFoeWFpZ0NBQ0FHSUExQkJISnFLQUlBSUFZZ0RXb29BZ0FnQ21wcWFtb2hDaUFNUVFScUlRd2dEa0VFYXlJT0RRQUxDeUFTUlEwQUEwQWdCaUFKUVFKMGFpZ0NBQ0FLYWlFS0lBbEJBV29oQ1NBU1FRRnJJaElOQUFzTElCUUVRQ0FLSUNkc0lRY2dDQ2dDS0NFSlFRQWhCZ05BSUFrZ0JrRUNkR29vQWdBZ0Iyb2hCeUFHUVFGcUlnWWdHRTBOQUFzTElCTkZCRUFnQ0NnQ0hDQUhhaUVIQ3lBUlJRMEJJQWdvQWlBaEJpQUFLQUw0Q2lFSUlBQWdHallDa0FvZ0FDQUFLQUxrQ2pZQ2pBb2dBQ2dDOUFvZ0JpQUlhaUlHUVI5MUlBWnhJQWRxYWlFR0RBUUxRUUFoQ2tFQUlRWWdBQ2dDMEFvaUQwRUZSd1JBSUFBb0FwQUtJUW9nQUNnQzVBb2lCaUFBS0FLTUNra0VRQ0FJS0FJTUlBcHFJUW9MSUFZZ0NtcEJBWFFnQUNnQzFBcEZheUVHQ3lBUlJRMEFJQUFnQ2pZQ2tBb2dBQ0FBS0FMa0NqWUNqQW9NQXdzZ0FFSUFOd0tNQ2tFQUlRWU1BZ3NDUUNBR0lBcE5EUUFnQmlBS2F5QUlLQUlVSWdkQkFYWk5EUUFnQUNnQ2lBb2dCMnNNQVFzZ0FDZ0NpQW9MSVFnZ0FDZ0MxQXBGQkVBZ0JpQUlhaUFBS0FMd0NpSUdRUjkxSUFaeGFpRUdEQUVMSUFBZ0NEWUNpQW9nQUNnQzhBb2hCeUFSUlFSQVFRQWhCaUFBUVFBMkFvZ0tJQUJCQUNBSGF5QUhRUjkxY1RZQ2hBb01BUXNnQUNBR05nS0VDaUFHSUFocUlBZEJIM1VnQjNGcUlRWUxBa0FnQUNnQ3BBbEZEUUFnRDBFRlJpRUhJQUFvQXJnS0lRZ2dBQ2dDdEFraENTQUFLQUs0Q1NFS0lBQW9BdVFLSVF3Z0FDZ0MxQW9FUUNBNElGUWdDQ0FNSUFZZ0J5QUtJQWtRSEF3QkN5QTRRUUFnQ0NBTUlBWWdCeUFLSUFrUUhBc2dBRUlBTndLZ0NVRUJJUXBCQVNFTURBRUxRUUFoQ2tFRElRd0xJQXhCQlhGRkRRQUxJQW9FUUNBRUlBQW9BaEFpQVNnQ05FRUVkRFlDQUNBRklBRW9BamhCQkhRMkFnQWdBQ0FBS0FMWUNTSUJRUUZxTmdMWUNTQURJQUFvQXRBSklBRkJCSFJxS0FJQU5nSUFDeUFMUWZBQmFpUUFJQXdMVEFFQ2YwRUJJUUlnQUVFQVFjUWFFQU1pQUVHMENtcEJBVFlDQUNBQVFvQ0NnSUNBQkRjQ0JDQUFRY0FRRUFnaUF6WUNzQm9nQXdSL0lBRUVRQ0FBUVFFMkFzQUpDMEVBQlVFQkN3c0x4aklhQUVHR0NBdktCV1lnSmhBR0NHVVlaUmhERUVNUVF4QkRFRU1RUXhCREVFTVFJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnQUFBQUFBQUFBQUdwQVNqQXFLQW9nYVRocE9Fa29TU2dwSUNrZ0NSZ0pHR2d3YURCb01HZ3dTQ0JJSUVnZ1NDQW9HQ2dZS0Jnb0dBZ1FDQkFJRUFnUVp5aG5LR2NvWnlobktHY29aeWhuS0VjWVJ4aEhHRWNZUnhoSEdFY1lSeGh1WUU1WUxsQU9VRzVZVGxBdVNBNUlEVUFOUUUxSVRVZ3RRQzFBRFRnTk9HMVFiVkJOUUUxQUxUZ3RPQTB3RFRCclNHdElhMGhyU0d0SWEwaHJTR3RJU3poTE9FczRTemhMT0VzNFN6aExPQ3N3S3pBck1Dc3dLekFyTUNzd0t6QUxLQXNvQ3lnTEtBc29DeWdMS0Fzb0FBQUFBQzlvTDJnUWdGQ0FNSUFRZUhDQVVIZ3dlQkJ3Y0hoUWNEQndFR2h2Y0c5d1QyaFBhQzlnTDJBUFlBOWdiMmh2YUU5Z1QyQXZXQzlZRDFnUFdBQUFBQUFBQUFBQVpqaEdJQ1lnQmhCbU1FWVlKaGdHQ0dVb1pTZ2xFQ1VRWkNCa0lHUWdaQ0JrR0dRWVpCaGtHRU1RUXhCREVFTVFReEJERUVNUVF4QUFBQUFBQUFBQUFHbElTVGdwT0Frd0NDZ0lLRWd3U0RBb01DZ3dDQ0FJSUdkQVowQm5RR2RBUnloSEtFY29SeWduS0Njb0p5Z25LQWNZQnhnSEdBY1lBQUFBQUcxNGJYaHVnRTZBTG9BT2dDNTREbmhPZUM1d1RYQk5jQTF3RFhCdGNHMXdUV2hOYUMxb0xXZ05hQTFvYldodGFFMWdUV0F0WUMxZ0RXQU5ZQXhZREZnTVdBeFlURmhNV0V4WVRGZ3NXQ3hZTEZnc1dBeFFERkFNVUF4UWJHQnNZR3hnYkdCTVVFeFFURkJNVUN4UUxGQXNVQ3hRREVnTVNBeElERWhyV0d0WWExaHJXR3RZYTFocldHdFlTMGhMU0V0SVMwaExTRXRJUzBoTFNDdElLMGdyU0N0SUswZ3JTQ3RJSzBnTFFBdEFDMEFMUUF0QUMwQUxRQXRBYTFCclVHdFFhMUJyVUd0UWExQnJVRXRBUzBCTFFFdEFTMEJMUUV0QVMwQXJRQ3RBSzBBclFDdEFLMEFyUUN0QUN6Z0xPQXM0Q3pnTE9BczRDemdMT0FCQjRBMExyZ2tHR0VZNEpqZ0dFR1pJUmpBbU1BWUlKU2dsS0VVb1JTZ2xJQ1VnUlNCRklDVVlKUmhsUUdWQVJSaEZHQ1VRSlJCa09HUTRaRGhrT0dRd1pEQmtNR1F3WkNoa0tHUW9aQ2hrSUdRZ1pDQmtJR1FZWkJoa0dHUVlSQkJFRUVRUVJCQWtDQ1FJSkFna0NBUUFCQUFFQUFRQUFBQUtnR3FBU29BcWdBcDRhbmhLZUNwNENuQnFjRXB3S25BS2FDbG9LV2dKWUFsZ1NXaEphQ2xnS1dBSldBbFlhV2hwYUVsZ1NXQXBXQ2xZQ1ZBSlVHaGdhR0JvWUdoZ1NGaElXRWhZU0Znb1VDaFFLRkFvVUFoSUNFZ0lTQWhJYUZob1dHaFlhRmhJVUVoUVNGQklVQ2hJS0Vnb1NDaElDRUFJUUFoQUNFQUhPQWM0QnpnSE9BYzRCemdIT0FjNEJ6QUhNQWN3QnpBSE1BY3dCekFITUVkSVIwaEhTRWRJUjBoSFNFZElSMGdIS0Fjb0J5Z0hLQWNvQnlnSEtBY29aMUJuVUdkUVoxQm5VR2RRWjFCblVFZEFSMEJIUUVkQVIwQkhRRWRBUjBBblFDZEFKMEFuUUNkQUowQW5RQ2RBQnlBSElBY2dCeUFISUFjZ0J5QUhJQVlJSmdnQUFBWUFCaEFtRUVZUUFBQUdHQ1lZUmhobUdBWWdKaUJHSUdZZ0JpZ21LRVlvWmlnR01DWXdSakJtTUFZNEpqaEdPR1k0QmtBbVFFWkFaa0FHU0NaSVJraG1TQVpRSmxCR1VHWlFCbGdtV0VaWVpsZ0dZQ1pnUm1CbVlBWm9KbWhHYUdab0JuQW1jRVp3Wm5BR2VDWjRSbmhtZUFhQUpvQkdnR2FBQUFCREVBSUFBZ0FoQ0NFSUlRZ2hDR2NnWnlCSUlDZ2dSeGhIR0NjWUp4Z0dJQVlnQmlBR0lBWVlCaGdHR0FZWUJoQUdFQVlRQmhCbUdHWVlaaGhtR0NZUUpoQW1FQ1lRQmdnR0NBWUlCZ2dBQUdWVlJFUTBOQ01qSXlNVEV4TVRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRDU2ZG5JeUxpNHA2ZW5wNWVYbDVlR2hvYUdob2FHaG5aMmRuWjJkbloyNXRiR3RxV2xsWldFaElTRWRIUjBkR1JrWkdSVVZGUlVRME5EUTBORFEwTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhNREF3TURBd01EQTlhMnhjV2xwWldWaElTRWhGUlVWRlJFUkVSRUJBUUVCSE56YzNOemMzTnpZMk5qWTJOalkyTXpNek16TXpNek15TWpJeU1qSXlNakV4TVRFeE1URXhQRnRhVUZsSlIwZERRMEpDU0RnNE9EWTJOalkxTlRVMU5EUTBOREV4TVRFN1dWcEtTRWhDUWtGQlFFQkhOemMzTmpZMk5qVTFOVFUwTkRRME16TXpNenBnWVZGWVNFaElTVGs1T1RrNU9UazNOemMzTnpjM056WTJOalkyTmpZMk5UVTFOVFUxTlRVME5EUTBORFEwTkRNek16TXpNek16TWpJeU1qSXlNakk1WUdGUlYwZEhSMGc0T0RnNE9EZzROalkyTmpZMk5qWTBORFEwTkRRME5ETXpNek16TXpNek1qSXlNakl5TWpJMUpTVWxKU1VsSlNVbEpTVWxKU1VsS0dCaVVsRkJRVUZITnpjM056YzNOelkyTmpZMk5qWTJNek16TXpNek16TTFKU1VsSlNVbEpTVWxKU1VsSlNVbEpDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNGZ1oxZFNRa0pDUlRVMU5UVTFOVFUySmlZbUppWW1KaVltSmlZbUppWW1KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDTWpJeU1qSXlNakl5TWpJeU1qSXlNaFVGWkdRakl5TWpVbEpTVWxKU1VsSkNRa0pDUWtKQ1FqSXlNakl5TWpJeUJCUWpJek16VTFOQlFVRkJRVUZCUVFRVVEwTWlJaUlpTVRFeE1URXhNVEVERXpJeUlTRWhJUUlTSVNFUkFTSVNBUUV5SWhJQ1F6TWlJaElTQWdKVFF6TWpFaElDQWhNalF6TmpVd0lDQUVHZ0Z3c2tCQVFGQmdjSUNRb01EUThSRkJZWkhDQWtLQzB5T0Q5SFVGcGxjWCtRb3JiTDR2Ly9BRUhnRndza0FnSUNBd01EQXdRRUJBWUdCd2NJQ0FrSkNnb0xDd3dNRFEwT0RnOFBFQkFSRVJJU0FFSEZHQXVFQVFFQUFBRUFBQUVBQUFFQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSUJBUUlCQVFJQkFRSUJBZ01CQWdNQ0FnTUNBZ1FDQXdRQ0F3UURBd1VEQkFZREJBWUVCUWNFQlFnRUJna0ZCd29HQ0FzR0NBMEhDZzRJQ3hBSkRCSUtEUlFMRHhjTkVSa0FBQUFBQUFBQUFBVUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCMUJrTEZRVUFBQUFBQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0JCOUJrTEZRVUFBQUFFQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0JCbEJvTEJRVUFBQUFFQUVHa0dndWxBUWNBQUFBRUFBQUFBZ0FBQUFRQUFBQUJBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFFQUFBQUVBQUFBQXdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQkFBQUFCQUFBQUFRQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dCQjFCc0xGUTBBQUFBQUFBQUFEd0FBQVA4QUFBQUFBQUFBL3dCQjlCc0xGUTBBQUFBRUFBQUFDQUFBQVA4QUFBQUFBQUFBL3dCQmxCd0x0UXNOQUFBQUJBQUFBQWdBQUFBQUFBQUFEd0FBQUFRQUFBQUtBQUFBQkFBQUFBa0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQ1FBQUFBUUFBQUFMQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUpBQUFBQkFBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFrQUFBQUVBQUFBREFBQUFBUUFBQUFMQUFBQUJBQUFBQTRBQUFBQkFBQUFDZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBS0FBQUFCQUFBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQW9BQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUNnQUFBQUVBQUFBTEFBQUFCQUFBQUFBQUFBQUVBQUFBQVFBQUFBRUFBQUFPQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBNEFBQUFFQUFBQUJBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUJBQUFBRGdBQUFBRUFBQUFQQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFFQUFBQU9BQUFBQVFBQUFBOEFBQUFFQUFBQUJBQUFBQVFBQUFBRkFBQUFCQUFBQUFJQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBZ0FBQUFRQUFBQUlBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBQ0FBQUFCQUFBQUFNQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFHQUFBQUJBQUFBQXdBQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQkFBQUFBWUFBQUFFQUFBQUJ3QUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFBUUFBQUFIQUFBQUJBQUFBQXdBQUFBRUFBQUFEUUFBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBUUFBQUE0QUFBRC9BQUFBQkFBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBQkFBQUFDd0FBQUFFQUFBQU9BQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFBUUFBQUE0QUFBQUVBQUFBQVFBQUFQOEFBQUFFQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFDQUFBQUNnQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBRUFBQUFQQUFBQUFnQUFBQW9BQUFEL0FBQUFBQUFBQVA4QUFBQUFBQUFBQVFBQUFBOEFBQUFDQUFBQUNnQUFBQVFBQUFBRkFBQUEvd0FBQUFBQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFRQUFBQUdBQUFBL3dBQUFBd0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQkFBQUFBa0FBQUQvQUFBQURBQUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQS93QUFBQUlBQUFEL0FBQUFDQUFBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFFQUFBQUJ3QUFBUDhBQUFBQ0FBQUEvd0FBQUFBQUFBRC9BQUFBQUFBQUFBUUFBQUFIQUFBQS93QUFBQUlBQUFBRUFBQUFEUUFBQVA4QUFBQUlBQUFBQXdBQUFBOEFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUEvd0FBQUFBQUFBQURBQUFBRHdBQUFBQUFBQUFGQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQUFNQUFBQVBBQUFBQVFBQUFBb0FBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFBd0FBQUE4QUFBQUJBQUFBQ2dBQUFBQUFBQUFGQUFBQUJBQUFBQUFBQUFBQkFBQUFDd0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQUVBQUFBTEFBQUFCQUFBQUFFQUFBRC9BQUFBQUFBQUFQOEFBQUFBQUFBQUFRQUFBQXNBQUFBQkFBQUFEZ0FBQVA4QUFBQUFBQUFBL3dBQUFBQUFBQUFCQUFBQUN3QUFBQUVBQUFBT0FBQUFCQUFBQUFFQUFBQUVBQUFBQkFBQUFBQUFBQUFIQUFBQS93QUFBQUFBQUFEL0FBQUFBQUFBQVA4QVFkUW5DeFVIQUFBQUFBQUFBQTBBQUFEL0FBQUFBQUFBQVA4QVFmUW5DeFVIQUFBQUJBQUFBQUlBQUFEL0FBQUFBQUFBQVA4QVFaUW9DOWtCQndBQUFBUUFBQUFDQUFBQUFBQUFBQTBBQUFBRUFBQUFDQUFBQUFRQUFBQURBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQ1FBQUFQOEFBQUFBQUFBQS93QUFBQUFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBL3dBQUFBQUFBQUQvQUFBQUFBQUFBQVFBQUFBREFBQUFCQUFBQUFZQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUFBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQU1BQUFBQ0FBQUFBd0FBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQUlBQUFBREFCQitDa0xCUVFBQUFBRUFFR0lLZ3R4QkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFDQUFBQUFnQUFBQU1BQUFBREFBQUFBQUFBQUFCQUFBQUJBQUFBQVVBQUFBQ0FBQUFBd0FBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFNQUFBQURRQUFBQW9BQUFBTEFBQUFEZ0FBQUE4QUFBQUFBQUFBQVFBQUFBRUFRWVFyQ3hFQkFBQUFBUUFBQUFFQUFBQUNBQUFBQWdCQnBDc0xCUVVBQUFBRUFFRzBLd3VKQmdjQUFBQUVBQUFBQWdBQUFBUUFBQUFCQUFBQUJBQUFBQVFBQUFBRUFBQUFBd0FBQUFRQUFBQUdBQUFBQUFBQUFBMEFBQUFFQUFBQUNBQUFBQUFBQUFBUEFBQUFCQUFBQUFvQUFBQUVBQUFBQ1FBQUFBUUFBQUFNQUFBQUJBQUFBQXNBQUFBRUFBQUFEZ0FBQUFBQUFBQVJBQUFBQkFBQUFCQUFBQUFBQUFBQUV3QUFBQVFBQUFBU0FBQUFBQUFBQUJVQUFBQUVBQUFBRkFBQUFBQUFBQUFYQUFBQUJBQUFBQllBQUFBQkFBQUFDZ0FBQUFFQUFBQUxBQUFBQkFBQUFBQUFBQUFFQUFBQUFRQUFBQUVBQUFBT0FBQUFBUUFBQUE4QUFBQUVBQUFBQkFBQUFBUUFBQUFGQUFBQUJBQUFBQUlBQUFBRUFBQUFBd0FBQUFRQUFBQUlBQUFBQkFBQUFBa0FBQUFFQUFBQUJnQUFBQVFBQUFBSEFBQUFCQUFBQUF3QUFBQUVBQUFBRFFBQUFBRUFBQUFTQUFBQUFRQUFBQk1BQUFBRUFBQUFFQUFBQUFRQUFBQVJBQUFBQVFBQUFCWUFBQUFCQUFBQUZ3QUFBQVFBQUFBVUFBQUFCQUFBQUJVQUFBQUJBQUFBQ3dBQUFBRUFBQUFPQUFBQUJBQUFBQUVBQUFEL0FBQUFCQUFBQUFFQUFBQVBBQUFBQWdBQUFBb0FBQUFFQUFBQUJRQUFBUDhBQUFBQUFBQUFCQUFBQUFNQUFBQUVBQUFBQmdBQUFBUUFBQUFKQUFBQS93QUFBQXdBQUFBRUFBQUFCd0FBQVA4QUFBQUNBQUFBQkFBQUFBMEFBQUQvQUFBQUNBQUFBQUVBQUFBVEFBQUFBZ0FBQUJJQUFBQUVBQUFBRVFBQUFQOEFBQUFRQUFBQUFRQUFBQmNBQUFBQ0FBQUFGZ0FBQUFRQUFBQVZBQUFBL3dBQUFCUUFBQUFEQUFBQUR3QUFBQUVBQUFBS0FBQUFBQUFBQUFVQUFBQUVBQUFBQUFBQUFBRUFBQUFMQUFBQUFRQUFBQTRBQUFBRUFBQUFBUUFBQUFRQUFBQUVBQUFBQUFBQUFBY0FBQUFFQUFBQUFnQUFBQUFBQUFBTkFBQUFCQUFBQUFnQUFBQUVBQUFBQXdBQUFBUUFBQUFHQUFBQUJBQUFBQWtBQUFBRUFBQUFEQUFBQUFNQUFBQVRBQUFBQVFBQUFCSUFBQUFBQUFBQUVRQUFBQVFBQUFBUUFBQUFBd0FBQUJjQUFBQUJBQUFBRmdBQUFBQUFBQUFWQUFBQUJBQUFBQlFBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFEQUFBQUF3QkJ3VFVMdkFZQkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXF1c3JhNnZzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS92Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QUFBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QVFZWThDeTRCQVFFQkFRRUNBZ0lDQWdJREF3TURBd01FQkFRRUJBUUZCUVVGQlFVR0JnWUdCZ1lIQndjSEJ3Y0lDQWdJQUVIQVBBdEZDZ0FBQUEwQUFBQVFBQUFBQ3dBQUFBNEFBQUFTQUFBQURRQUFBQkFBQUFBVUFBQUFEZ0FBQUJJQUFBQVhBQUFBRUFBQUFCUUFBQUFaQUFBQUVnQUFBQmNBQUFBZEFFR1JQUXN6QVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURCQVVBQVFJREJBVUFBUUlEQkFVQUFRSURBRUhVUFF1c0FnRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhRQUFBQjRBQUFBZkFBQUFJQUFBQUNBQUFBQWhBQUFBSWdBQUFDSUFBQUFqQUFBQUl3QUFBQ1FBQUFBa0FBQUFKUUFBQUNVQUFBQWxBQUFBSmdBQUFDWUFBQUFtQUFBQUp3QUFBQ2NBQUFBbkFBQUFKd0FBQUM4ZkR3QVhHeDBlQndzTkRpY3JMUzRRQXdVS0RCTVZHaHdqSlNvc0FRSUVDQkVTRkJnR0NSWVpJQ0VpSkNnbUtRQVFBUUlFQ0NBREJRb01EeThIQ3cwT0Jna2ZJeVVxTENFaUpDZ25LeTB1RVJJVUdCTVZHaHdYR3gwZUZoa21LUUJCZ2NBQUN3SWlVQT09IiwgVyhoKSB8fCAoaCA9IFUoaCkpOwogICAgZnVuY3Rpb24gdShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEkgPT0gaCAmJiBIKQogICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEgpOwogICAgICAgIHZhciBnID0geihJKTsKICAgICAgICBpZiAoZykKICAgICAgICAgIHJldHVybiBnOwogICAgICAgIGlmIChNKQogICAgICAgICAgcmV0dXJuIE0oSSk7CiAgICAgICAgdGhyb3cgImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIjsKICAgICAgfSBjYXRjaCAoUSkgewogICAgICAgIGMoUSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlBKCkgewogICAgICByZXR1cm4gIUggJiYgcyAmJiB0eXBlb2YgZmV0Y2ggPT0gImZ1bmN0aW9uIiA/IGZldGNoKGgsIHsKICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICB9KS50aGVuKGZ1bmN0aW9uKEkpIHsKICAgICAgICBpZiAoIUkub2spCiAgICAgICAgICB0aHJvdyAiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIiArIGggKyAiJyI7CiAgICAgICAgcmV0dXJuIEkuYXJyYXlCdWZmZXIoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHUoaCk7CiAgICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdShoKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBEQSgpIHsKICAgICAgdmFyIEkgPSB7CiAgICAgICAgYTogTkEKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZyhpLCBvKSB7CiAgICAgICAgdmFyIE4gPSBpLmV4cG9ydHM7CiAgICAgICAgQS5hc20gPSBOLCBLID0gQS5hc20uYywgWChLLmJ1ZmZlciksIHAgPSBBLmFzbS5sLCBRQShBLmFzbS5kKSwgRUEoKTsKICAgICAgfQogICAgICBCQSgpOwogICAgICBmdW5jdGlvbiBRKGkpIHsKICAgICAgICBnKGkuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEIoaSkgewogICAgICAgIHJldHVybiBpQSgpLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG8sIEkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24obykgewogICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgfSkudGhlbihpLCBmdW5jdGlvbihvKSB7CiAgICAgICAgICBrKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiICsgbyksIGMobyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICByZXR1cm4gIUggJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICJmdW5jdGlvbiIgJiYgIVcoaCkgJiYgdHlwZW9mIGZldGNoID09ICJmdW5jdGlvbiIgPyBmZXRjaChoLCB7CiAgICAgICAgICBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIgogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oaSkgewogICAgICAgICAgdmFyIG8gPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhpLCBJKTsKICAgICAgICAgIHJldHVybiBvLnRoZW4oUSwgZnVuY3Rpb24oTikgewogICAgICAgICAgICByZXR1cm4gaygid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIgKyBOKSwgaygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSwgQihRKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pIDogQihRKTsKICAgICAgfQogICAgICBpZiAoQS5pbnN0YW50aWF0ZVdhc20pCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBSID0gQS5pbnN0YW50aWF0ZVdhc20oSSwgZyk7CiAgICAgICAgICByZXR1cm4gUjsKICAgICAgICB9IGNhdGNoIChpKSB7CiAgICAgICAgICByZXR1cm4gaygiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGkpLCAhMTsKICAgICAgICB9CiAgICAgIHJldHVybiB5KCkuY2F0Y2goUyksIHt9OwogICAgfQogICAgZnVuY3Rpb24gWihJKSB7CiAgICAgIGZvciAoOyBJLmxlbmd0aCA+IDA7ICkgewogICAgICAgIHZhciBnID0gSS5zaGlmdCgpOwogICAgICAgIGlmICh0eXBlb2YgZyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBnKEEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHZhciBRID0gZy5mdW5jOwogICAgICAgIHR5cGVvZiBRID09ICJudW1iZXIiID8gZy5hcmcgPT09IHZvaWQgMCA/IHAuZ2V0KFEpKCkgOiBwLmdldChRKShnLmFyZykgOiBRKGcuYXJnID09PSB2b2lkIDAgPyBudWxsIDogZy5hcmcpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBHQShJLCBnLCBRKSB7CiAgICAgIHIuY29weVdpdGhpbihJLCBnLCBnICsgUSk7CiAgICB9CiAgICBmdW5jdGlvbiBvQShJKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEsuZ3JvdyhJIC0gbS5ieXRlTGVuZ3RoICsgNjU1MzUgPj4+IDE2KSwgWChLLmJ1ZmZlciksIDE7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBoQShJKSB7CiAgICAgIHZhciBnID0gci5sZW5ndGg7CiAgICAgIEkgPSBJID4+PiAwOwogICAgICB2YXIgUSA9IDIxNDc0ODM2NDg7CiAgICAgIGlmIChJID4gUSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIGZvciAodmFyIEIgPSAxOyBCIDw9IDQ7IEIgKj0gMikgewogICAgICAgIHZhciB5ID0gZyAqICgxICsgMC4yIC8gQik7CiAgICAgICAgeSA9IE1hdGgubWluKHksIEkgKyAxMDA2NjMyOTYpOwogICAgICAgIHZhciBSID0gTWF0aC5taW4oUSwgXyhNYXRoLm1heChJLCB5KSwgNjU1MzYpKSwgaSA9IG9BKFIpOwogICAgICAgIGlmIChpKQogICAgICAgICAgcmV0dXJuICEwOwogICAgICB9CiAgICAgIHJldHVybiAhMTsKICAgIH0KICAgIHZhciB5QSA9IHR5cGVvZiBhdG9iID09ICJmdW5jdGlvbiIgPyBhdG9iIDogZnVuY3Rpb24oSSkgewogICAgICB2YXIgZyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsIFEgPSAiIiwgQiwgeSwgUiwgaSwgbywgTiwgZiwgWSA9IDA7CiAgICAgIEkgPSBJLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCAiIik7CiAgICAgIGRvCiAgICAgICAgaSA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgbyA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgTiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgZiA9IGcuaW5kZXhPZihJLmNoYXJBdChZKyspKSwgQiA9IGkgPDwgMiB8IG8gPj4gNCwgeSA9IChvICYgMTUpIDw8IDQgfCBOID4+IDIsIFIgPSAoTiAmIDMpIDw8IDYgfCBmLCBRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoQiksIE4gIT09IDY0ICYmIChRID0gUSArIFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLCBmICE9PSA2NCAmJiAoUSA9IFEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpKTsKICAgICAgd2hpbGUgKFkgPCBJLmxlbmd0aCk7CiAgICAgIHJldHVybiBROwogICAgfTsKICAgIGZ1bmN0aW9uIGFBKEkpIHsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHZhciBnID0geUEoSSksIFEgPSBuZXcgVWludDhBcnJheShnLmxlbmd0aCksIEIgPSAwOyBCIDwgZy5sZW5ndGg7ICsrQikKICAgICAgICAgIFFbQl0gPSBnLmNoYXJDb2RlQXQoQik7CiAgICAgICAgcmV0dXJuIFE7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geihJKSB7CiAgICAgIGlmIChXKEkpKQogICAgICAgIHJldHVybiBhQShJLnNsaWNlKFAubGVuZ3RoKSk7CiAgICB9CiAgICB2YXIgTkEgPSB7CiAgICAgIGI6IEdBLAogICAgICBhOiBoQQogICAgfTsKICAgIERBKCksIEEuX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5fX193YXNtX2NhbGxfY3RvcnMgPSBBLmFzbS5kKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZEluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9oMjY0YnNkSW5pdCA9IEEuYXNtLmUpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9tYWxsb2MgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIChBLl9tYWxsb2MgPSBBLmFzbS5mKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5fZnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2ZyZWUgPSBBLmFzbS5nKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZERlY29kZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2REZWNvZGUgPSBBLmFzbS5oKS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSwgQS5faDI2NGJzZFNodXRkb3duID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAoQS5faDI2NGJzZFNodXRkb3duID0gQS5hc20uaSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuX2gyNjRic2RBbGxvYyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RBbGxvYyA9IEEuYXNtLmopLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9LCBBLl9oMjY0YnNkRnJlZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gKEEuX2gyNjRic2RGcmVlID0gQS5hc20uaykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIH0sIEEuZ2V0VmFsdWUgPSB2OwogICAgdmFyIGQ7CiAgICBGID0gZnVuY3Rpb24gSSgpIHsKICAgICAgZCB8fCB4KCksIGQgfHwgKEYgPSBJKTsKICAgIH07CiAgICBmdW5jdGlvbiB4KEkpIHsKICAgICAgaWYgKHcgPiAwIHx8ICgkKCksIHcgPiAwKSkKICAgICAgICByZXR1cm47CiAgICAgIGZ1bmN0aW9uIGcoKSB7CiAgICAgICAgZCB8fCAoZCA9ICEwLCBBLmNhbGxlZFJ1biA9ICEwLCAhZSAmJiAoQUEoKSwgQyhBKSwgQS5vblJ1bnRpbWVJbml0aWFsaXplZCAmJiBBLm9uUnVudGltZUluaXRpYWxpemVkKCksIElBKCkpKTsKICAgICAgfQogICAgICBBLnNldFN0YXR1cyA/IChBLnNldFN0YXR1cygiUnVubmluZy4uLiIpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBBLnNldFN0YXR1cygiIik7CiAgICAgICAgfSwgMSksIGcoKTsKICAgICAgfSwgMSkpIDogZygpOwogICAgfQogICAgaWYgKEEucnVuID0geCwgQS5wcmVJbml0KQogICAgICBmb3IgKHR5cGVvZiBBLnByZUluaXQgPT0gImZ1bmN0aW9uIiAmJiAoQS5wcmVJbml0ID0gW0EucHJlSW5pdF0pOyBBLnByZUluaXQubGVuZ3RoID4gMDsgKQogICAgICAgIEEucHJlSW5pdC5wb3AoKSgpOwogICAgcmV0dXJuIHgoKSwgQS5yZWFkeTsKICB9Owp9KCksIHEgPSB7fTsKZnVuY3Rpb24gc0EoKSB7CiAgcmV0dXJuIFNBKCkudGhlbihmdW5jdGlvbihhKSB7CiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihKKSB7CiAgICAgIHZhciBBID0gSi5kYXRhLCBDID0gQS5yZW5kZXJTdGF0ZUlkLCBTID0gQS50eXBlOwogICAgICBzd2l0Y2ggKFMpIHsKICAgICAgICBjYXNlICJkZWNvZGUiOiB7CiAgICAgICAgICB2YXIgRCA9IHFbQ107CiAgICAgICAgICBEIHx8IChEID0gbmV3IEwoYSwgZnVuY3Rpb24ocywgRywgVSkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInBpY3R1cmVSZWFkeSIsCiAgICAgICAgICAgICAgd2lkdGg6IEcsCiAgICAgICAgICAgICAgaGVpZ2h0OiBVLAogICAgICAgICAgICAgIHJlbmRlclN0YXRlSWQ6IEMsCiAgICAgICAgICAgICAgZGF0YTogcy5idWZmZXIKICAgICAgICAgICAgfSwgW3MuYnVmZmVyXSk7CiAgICAgICAgICB9KSwgcVtDXSA9IEQpLCBELmRlY29kZShuZXcgVWludDhBcnJheShBLmRhdGEsIEEub2Zmc2V0LCBBLmxlbmd0aCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInJlbGVhc2UiOiB7CiAgICAgICAgICB2YXIgRSA9IHFbQ107CiAgICAgICAgICBFICYmIChFLnJlbGVhc2UoKSwgZGVsZXRlIHFbQ10pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9KSwgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgIHR5cGU6ICJkZWNvZGVyUmVhZHkiCiAgICB9KTsKICB9KTsKfQpzQSgpOwo=",mn=typeof window<"u"&&window.Blob&&new Blob([atob(wn)],{type:"text/javascript;charset=utf-8"});function Ls(){let i;try{if(i=mn&&(window.URL||window.webkitURL).createObjectURL(mn),!i)throw"";return new Worker(i)}catch{return new Worker("data:application/javascript;base64,"+wn,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class tn{constructor(U={}){r(this,"worker");r(this,"_queueSize",0);r(this,"pendingTimestamps",[]);r(this,"pendingFrames",[]);r(this,"onFrameDecoded");r(this,"onError");r(this,"onQueueOverflow");r(this,"configured",!1);this.onFrameDecoded=U.onFrameDecoded,this.onError=U.onError,this.onQueueOverflow=U.onQueueOverflow}get queueSize(){return this._queueSize}get state(){return this.worker?this.configured?"configured":"configuring":"unconfigured"}async configure(U){return this.worker&&(this.worker.terminate(),this.worker=void 0),this.worker=new Ls,this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],new Promise((e,F)=>{this.worker.addEventListener("message",t=>{var n;const Q=t.data;switch(Q.type){case"pictureReady":this.handlePictureReady(Q);break;case"decoderReady":console.log("[WasmDecoder] Worker ready"),this.configured=!0,e();break;case"error":const s=new Error(Q.error||"WASM decoder error");(n=this.onError)==null||n.call(this,s),F(s);break}}),this.worker.addEventListener("error",t=>{var n;const Q=new Error(`Worker error: ${t.message}`);(n=this.onError)==null||n.call(this,Q),F(Q)})})}decodeBinary(U){var n,s;if(!this.worker||!this.configured||!U.header||!U.payload)return;const e=new Uint8Array(U.payload),F=(n=U.codec_data)!=null&&n.timebase_den&&((s=U.codec_data)!=null&&s.timebase_num)?{num:U.codec_data.timebase_num,den:U.codec_data.timebase_den}:{num:1,den:1e6},t={num:1,den:1e6},Q=on(U.header.pts,F,t);this.pendingFrames.push(e),this.pendingTimestamps.push(Q),this.decodeNext()}decodeNext(){const U=this.pendingFrames.shift();U!=null&&this.decode(U)}decode(U){!this.worker||!this.configured||(this._queueSize++,this.worker.postMessage({type:"decode",data:U.buffer,offset:U.byteOffset,length:U.byteLength,renderStateId:1},[U.buffer]))}handlePictureReady(U){var N;this._queueSize--;const{width:e,height:F,data:t}=U,Q=new Uint8Array(t),n=e,s=n*F,l=s>>2,B=Q.subarray(0,s),a=Q.subarray(s,s+l),d=Q.subarray(s+l,s+2*l),h=F>>1,J=n>>1,c=this.pendingTimestamps.shift()??0,S={y:B,u:a,v:d,width:e,height:F,chromaStride:J,chromaHeight:h,timestamp:c,close:()=>{}};(N=this.onFrameDecoded)==null||N.call(this,S)}flush(){this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}flushSync(){this.flush()}reset(){this.flush()}dispose(){this.worker&&(this.worker.terminate(),this.worker=void 0),this.configured=!1,this._queueSize=0,this.pendingTimestamps=[],this.pendingFrames=[]}}class vn{constructor(U={}){r(this,"buffer",[]);r(this,"bufferDelayMs");r(this,"maxBufferSize");r(this,"startRealTimeUs",null);r(this,"startStreamTimeUs",null);r(this,"frameDurationUs",2e4);r(this,"lastFrameTimestamp",null);r(this,"bufferSizeHistory",[]);r(this,"driftCheckInterval");r(this,"driftThresholdMs");r(this,"dequeueCount",0);r(this,"latencyHistory",[]);r(this,"latencyHistorySize",60);r(this,"stats",{dropped:0,enqueued:0,dequeued:0,driftCorrections:0});r(this,"logger");r(this,"onFrameDropped");this.bufferDelayMs=U.bufferDelayMs??100;const e=Math.ceil(this.bufferDelayMs/1e3*60*2);this.maxBufferSize=U.maxBufferSize??Math.max(30,e),this.driftCheckInterval=U.driftCheckInterval??150,this.driftThresholdMs=U.driftCorrectionThresholdMs??30,this.logger=U.logger??(()=>{}),this.onFrameDropped=U.onFrameDropped}get bufferDelayUs(){return this.bufferDelayMs*1e3}get effectiveDriftThresholdMs(){return Math.min(this.driftThresholdMs,this.bufferDelayMs*.5)}enqueue(U,e,F){var t;if(this.stats.enqueued++,this.lastFrameTimestamp!==null){const Q=e-this.lastFrameTimestamp;Q>0&&Q<1e5&&(this.frameDurationUs=Q)}for(this.lastFrameTimestamp=e;this.buffer.length>=this.maxBufferSize;){const Q=this.buffer.shift();Q&&(this.stats.dropped++,(t=this.onFrameDropped)==null||t.call(this,Q.frame,"overflow"),this.startRealTimeUs=null,this.startStreamTimeUs=null)}this.buffer.push({frame:U,timestamp:e,timing:F})}dequeue(U){const e=U*1e3,F=performance.now();if(this.buffer.length===0)return null;if(this.bufferDelayMs===0)return this.trackBufferSize(),this.dequeueLatest(F);const t=this.buffer.length*this.frameDurationUs/1e3,Q=Math.min(this.bufferDelayMs*.5,this.frameDurationUs/1e3);if(t<Q)return null;this.startRealTimeUs===null&&(this.startRealTimeUs=e,this.startStreamTimeUs=this.buffer[0].timestamp+this.bufferDelayUs,this.logger(`Playback started: buffer=${Math.round(t)}ms, delay=${this.bufferDelayMs}ms`)),this.trackBufferSize();const n=e-this.startRealTimeUs,s=this.startStreamTimeUs+n-this.bufferDelayUs;let l=this.findBestFrameIndex(s);if(l===-1)return null;l>1&&(this.dropFrames(l-1,"skip"),l=0),this.dequeueCount++,this.dequeueCount%this.driftCheckInterval===0&&this.correctDrift();const B=this.buffer.shift();return this.stats.dequeued++,this.recordLatency(B.timing,F),B.frame}dequeueLatest(U){const e=this.buffer.pop();return this.stats.dequeued++,this.recordLatency(e.timing,U),this.dropFrames(this.buffer.length,"skip"),e.frame}recordLatency(U,e){const F=U.decodeTime-U.arrivalTime,t=e-U.decodeTime,Q=e-U.arrivalTime;this.latencyHistory.push({decode:F,buffer:t,total:Q}),this.latencyHistory.length>this.latencyHistorySize&&this.latencyHistory.shift()}getLatencyStats(){if(this.latencyHistory.length===0)return null;const U=this.latencyHistory[this.latencyHistory.length-1],e=this.latencyHistory.reduce((Q,n)=>Q+n.decode,0)/this.latencyHistory.length,F=this.latencyHistory.reduce((Q,n)=>Q+n.buffer,0)/this.latencyHistory.length,t=this.latencyHistory.reduce((Q,n)=>Q+n.total,0)/this.latencyHistory.length;return{decodeLatency:Math.round(U.decode*10)/10,bufferLatency:Math.round(U.buffer*10)/10,totalLatency:Math.round(U.total*10)/10,avgDecodeLatency:Math.round(e*10)/10,avgBufferLatency:Math.round(F*10)/10,avgTotalLatency:Math.round(t*10)/10}}findBestFrameIndex(U){let e=-1;for(let F=0;F<this.buffer.length&&this.buffer[F].timestamp<=U;F++)e=F;return e}dropFrames(U,e){var F;for(let t=0;t<U&&this.buffer.length>0;t++){const Q=this.buffer.shift();this.stats.dropped++,(F=this.onFrameDropped)==null||F.call(this,Q.frame,e)}}trackBufferSize(){this.bufferSizeHistory.push(this.buffer.length),this.bufferSizeHistory.length>100&&this.bufferSizeHistory.shift()}correctDrift(){if(this.bufferSizeHistory.length<10||!this.startStreamTimeUs)return;const F=this.bufferSizeHistory.reduce((Q,n)=>Q+n,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3-this.bufferDelayMs,t=this.effectiveDriftThresholdMs;if(Math.abs(F)>t){const Q=F*1e3;this.startStreamTimeUs+=Q,this.stats.driftCorrections++,this.bufferSizeHistory=[],this.logger(`Drift correction: ${F.toFixed(1)}ms`)}}clear(){var U;for(const e of this.buffer)(U=this.onFrameDropped)==null||U.call(this,e.frame,"overflow");this.buffer=[],this.startRealTimeUs=null,this.startStreamTimeUs=null,this.bufferSizeHistory=[]}setBufferDelay(U){const e=this.bufferDelayMs>0;this.bufferDelayMs=U,(e&&U===0||!e&&U>0)&&(this.bufferSizeHistory=[],this.startRealTimeUs=null,this.startStreamTimeUs=null)}getBufferDelay(){return this.bufferDelayMs}getStatus(){const U=this.buffer.length*this.frameDurationUs/1e3;let e=U;return this.bufferSizeHistory.length>0&&(e=this.bufferSizeHistory.reduce((t,Q)=>t+Q,0)/this.bufferSizeHistory.length*this.frameDurationUs/1e3),{currentBufferSize:this.buffer.length,currentBufferMs:Math.round(U),avgBufferMs:Math.round(e),targetBufferMs:this.bufferDelayMs,streamFrameDurationUs:this.frameDurationUs,droppedFrames:this.stats.dropped,totalEnqueuedFrames:this.stats.enqueued,totalDequeuedFrames:this.stats.dequeued,driftCorrections:this.stats.driftCorrections,latency:this.getLatencyStats()}}logStatus(){const U=this.getStatus(),e=(1e6/this.frameDurationUs).toFixed(1);this.logger(`buffer=${U.currentBufferMs}ms/${U.targetBufferMs}ms (${U.currentBufferSize} frames), dropped=${U.droppedFrames}, fps=${e}`)}resetStats(){this.stats={dropped:0,enqueued:0,dequeued:0,driftCorrections:0},this.bufferSizeHistory=[]}}const Os=`
|
|
2
2
|
class LiveAudioProcessor extends AudioWorkletProcessor {
|
|
3
3
|
constructor(options) {
|
|
4
4
|
super();
|
|
@@ -148,7 +148,7 @@ class LiveAudioProcessor extends AudioWorkletProcessor {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
registerProcessor('live-audio-processor', LiveAudioProcessor);
|
|
151
|
-
`;class _n{constructor(U,F={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"startTime",0);d(this,"bufferDelayMs");this.ctx=U,this.targetSampleRate=U.sampleRate,this.bufferDelayMs=F.bufferDelayMs??100,this.gainNode=this.ctx.createGain(),this.startTime=performance.now()*1e3}async init(U){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");const F=this.buildDecoderConfig(U);if(!(await AudioDecoder.isConfigSupported(F)).supported)throw new Error(`Audio codec not supported: ${F.codec}`);this.decoder=new AudioDecoder({output:n=>this.handleDecodedFrame(n),error:n=>{console.error("LiveAudioPlayer decoder error:",n)}}),this.decoder.configure(F);const t=new Blob([Os],{type:"application/javascript"}),Q=URL.createObjectURL(t);try{await this.ctx.audioWorklet.addModule(Q)}finally{URL.revokeObjectURL(Q)}this.workletNode=new AudioWorkletNode(this.ctx,"live-audio-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setBufferTarget",targetMs:this.bufferDelayMs}),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}buildDecoderConfig(U){const F=(U==null?void 0:U.codec_type)??aU.AUDIO_OPUS,e=(U==null?void 0:U.sample_rate)||48e3,t=(U==null?void 0:U.channels)||2;switch(F){case aU.AUDIO_OPUS:return{codec:"opus",sampleRate:48e3,numberOfChannels:t};case aU.AUDIO_AAC:return{codec:"mp4a.40.2",sampleRate:e,numberOfChannels:t};case aU.AUDIO_PCM:throw new Error("PCM audio not yet supported");default:return{codec:"opus",sampleRate:48e3,numberOfChannels:2}}}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const F=U.numberOfFrames;let e=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),e=U.numberOfChannels)}catch{e=1}const t=new Float32Array(F),Q=new Float32Array(F);if(e===1){const B=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),a=new ArrayBuffer(B);U.copyTo(a,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const r=new Float32Array(a);if(U.numberOfChannels===1)t.set(r),Q.set(r);else for(let h=0;h<F;h++)t[h]=r[h*2],Q[h]=r[h*2+1]}else{const B=new ArrayBuffer(U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}));if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=new ArrayBuffer(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}));U.copyTo(a,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(a))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate),l=U.timestamp??performance.now()*1e3-this.startTime;this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer},timestamp:l},[n.buffer,s.buffer]),U.close()}catch(F){console.error("Error processing live audio frame:",F),U.close()}}resampleAudio(U,F,e){if(F===e)return U;const t=F/e,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,F){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured")&&!(U.length<1))try{const e=F!==void 0?Number(F):performance.now()*1e3-this.startTime,t=new EncodedAudioChunk({type:"key",timestamp:Math.max(0,e),data:U});this.decoder.decode(t)}catch(e){console.error("Error decoding live audio:",e)}}setBufferDelay(U){var F;this.bufferDelayMs=U,(F=this.workletNode)==null||F.port.postMessage({type:"setBufferTarget",targetMs:U})}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"}),this.resetTiming()}resetTiming(){this.startTime=performance.now()*1e3}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}if(this.gainNode)try{this.gainNode.disconnect()}catch{}}}function As(i={}){return new Hn(i)}class Hn extends rn{constructor(F={}){super("idle",F.debugLogging??!1);d(this,"config");d(this,"streamSource",null);d(this,"trackFilter",null);d(this,"boundDataHandler",null);d(this,"decoder",null);d(this,"currentCodecData");d(this,"useWasmDecoder",!1);d(this,"waitingForKeyframe",!0);d(this,"lastWaitingForKeyframeLog",0);d(this,"lastKeyframeRequest",0);d(this,"statusLogCounter",0);d(this,"isConfiguring",!1);d(this,"pendingDuringConfig",[]);d(this,"frameScheduler");d(this,"lastVideoFrame",null);d(this,"consecutiveDrops",0);d(this,"totalDrops",0);d(this,"lastDropLogTime",0);d(this,"streamWidth",0);d(this,"streamHeight",0);d(this,"estimatedFrameRate",0);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioCodecData",null);d(this,"arrivalTimes",new Map);this.config={preferredDecoder:F.preferredDecoder??"webcodecs-sw",bufferDelayMs:F.bufferDelayMs??100,enableAudio:F.enableAudio??!0,videoTrackName:F.videoTrackName===void 0?"video":F.videoTrackName,audioTrackName:F.audioTrackName===void 0?"audio":F.audioTrackName,debugLogging:F.debugLogging??!1},this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.frameScheduler=new vn({bufferDelayMs:this.config.bufferDelayMs,logger:e=>{this.config.debugLogging&&this.logger.info(e)},onFrameDropped:(e,t)=>{if(this.totalDrops++,this.consecutiveDrops++,this.config.debugLogging){const Q=Date.now();(Q-this.lastDropLogTime>500||this.consecutiveDrops===1)&&(this.consecutiveDrops>1?this.logger.warn(`Dropped ${this.consecutiveDrops} frames (${t}), total=${this.totalDrops}`):this.logger.warn(`Frame dropped (${t}), total=${this.totalDrops}`),this.lastDropLogTime=Q,this.consecutiveDrops=0)}e.close()}})}setDebugLogging(F){this.config.debugLogging=F,super.setDebugLogging(F)}setVolume(F){this.audioPlayer&&this.audioPlayer.setVolume(F)}getVolume(){return 1}setStreamSource(F){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=F,this.boundDataHandler=this.handleStreamData.bind(this),this.streamSource.on("data",this.boundDataHandler),this.logger.info("Stream source connected")}setTrackFilter(F){this.trackFilter=F,this.logger.info(`Track filter set: ${F}`)}connectToMoQSession(F,e){this.setStreamSource(F),e&&this.setTrackFilter(e)}async connectToMoQRelay(F,e,t){const{createStandaloneMoQSource:Q}=await Promise.resolve().then(()=>Kr),n=(t==null?void 0:t.videoTrack)??this.config.videoTrackName??"video",s=(t==null?void 0:t.audioTrack)===!1?null:(t==null?void 0:t.audioTrack)??this.config.audioTrackName??"audio",l=[{trackName:n,streamType:"video",priority:0}];s&&this.config.enableAudio&&l.push({trackName:s,streamType:"audio",priority:0}),this.logger.info(`MoQ subscriptions: ${JSON.stringify(l)}`);const B=Q({relayUrl:F,namespace:e,subscriptions:l});this.setStreamSource(B),await B.connect()}play(){this._state!=="error"&&(this.setState("playing"),this.logger.info("Playback started"))}pause(){this._state==="playing"&&(this.setState("paused"),this.logger.info("Playback paused"))}getVideoFrame(F){if(this._state!=="playing")return this.config.debugLogging&&this.logger.debug(`getVideoFrame: state=${this._state}, returning lastFrame=${!!this.lastVideoFrame}`),this.lastVideoFrame;this.config.debugLogging&&(this.statusLogCounter++,this.statusLogCounter>=300&&(this.frameScheduler.logStatus(),this.statusLogCounter=0));const e=this.frameScheduler.dequeue(F);return e&&(this.consecutiveDrops=0,this.lastVideoFrame&&this.lastVideoFrame!==e&&this.lastVideoFrame.close(),this.lastVideoFrame=e),this.lastVideoFrame}setBufferDelay(F){var e;this.config.bufferDelayMs=F,this.frameScheduler.setBufferDelay(F),(e=this.audioPlayer)==null||e.setBufferDelay(F)}getBufferDelay(){return this.frameScheduler.getBufferDelay()}setPreferredDecoder(F){var n,s,l,B;const e=this.config.preferredDecoder;this.config.preferredDecoder=F,e==="wasm"!==(F==="wasm")&&this.decoder?(this.logger.info(`Decoder type changed from ${e} to ${F}, switching decoder...`),this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.waitingForKeyframe=!0,this.currentCodecData=void 0,(s=(n=this.streamSource)==null?void 0:n.requestKeyframe)==null||s.call(n),this.logger.info("Keyframe requested for decoder switch")):e!==F&&this.decoder&&(this.logger.info(`Decoder preference changed from ${e} to ${F}`),this.waitingForKeyframe=!0,this.currentCodecData=void 0,this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l))}flush(){var F,e,t;this.logger.info("Flushing player pipeline"),this.waitingForKeyframe=!0,(F=this.decoder)==null||F.flushSync(),this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=(e=this.streamSource)==null?void 0:e.requestKeyframe)==null||t.call(e)}getStats(){var e;const F=this.frameScheduler.getStatus();return{bufferSize:F.currentBufferSize,bufferMs:F.currentBufferMs,avgBufferMs:F.avgBufferMs,targetBufferMs:F.targetBufferMs,droppedFrames:F.droppedFrames,totalFrames:F.totalEnqueuedFrames,decoderState:((e=this.decoder)==null?void 0:e.state)??"none",streamWidth:this.streamWidth,streamHeight:this.streamHeight,frameRate:this.estimatedFrameRate,latency:F.latency}}on(F,e){super.on(F,e)}off(F,e){super.off(F,e)}async handleStreamData(F){var s,l,B,a,r;const e=F.data;if(!e.valid||!e.header)return;if(e.header.type===_i.AUDIO_FRAME||F.streamType==="audio"){const h=this.config.audioTrackName;if(h!=null&&F.trackName!==h&&F.streamType!=="audio")return;await this.handleAudioData(e);return}const Q=this.trackFilter??this.config.videoTrackName;if(Q!=null&&F.trackName!==Q||F.streamType!=="video"||!e.codec_data)return;const n=!!(e.header.flags&In);if(n&&this.logger.info(`Keyframe received: ${e.codec_data.width}x${e.codec_data.height}`),fn(this.currentCodecData,e.codec_data)){if(!n){this.logger.debug("Waiting for keyframe (codec change)");return}this.currentCodecData=e.codec_data,this.isConfiguring=!0,this.pendingDuringConfig=[e],await this.configureDecoder(e.codec_data),this.isConfiguring=!1,this.waitingForKeyframe=!0;const h=this.pendingDuringConfig;this.pendingDuringConfig=[],this.logger.info(`Processing ${h.length} frames queued during configuration`);for(const J of h)await this.handleStreamData({trackName:F.trackName,streamType:F.streamType,data:J});return}if(this.isConfiguring){this.logger.debug(`Queueing frame pts=${e.header.pts} during configuration`),this.pendingDuringConfig.push(e);return}if(!this.decoder||this.decoder.state!=="configured"){this.logger.warn(`Dropping frame pts=${e.header.pts}: decoder not ready (state=${((s=this.decoder)==null?void 0:s.state)??"null"})`);return}if(this.waitingForKeyframe){if(!n){this.logger.debug(`Dropping frame pts=${e.header.pts}: waiting for keyframe`);const h=Date.now();(!this.lastWaitingForKeyframeLog||h-this.lastWaitingForKeyframeLog>1e3)&&(this.logger.info("Waiting for keyframe to resume playback..."),this.lastWaitingForKeyframeLog=h,(!this.lastKeyframeRequest||h-this.lastKeyframeRequest>1e3)&&(this.logger.info("Requesting keyframe..."),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l),this.lastKeyframeRequest=h));return}this.logger.info("Keyframe received, resuming decode"),this.waitingForKeyframe=!1,this.lastWaitingForKeyframeLog=0}try{const h=performance.now(),J=(a=e.codec_data)!=null&&a.timebase_den&&((r=e.codec_data)!=null&&r.timebase_num)?{num:e.codec_data.timebase_num,den:e.codec_data.timebase_den}:{num:1,den:1e6},E={num:1,den:1e6},S=on(e.header.pts,J,E);if(this.arrivalTimes.set(S,h),this.arrivalTimes.size>100){const Z=[...this.arrivalTimes.entries()];for(let u=0;u<Z.length-100;u++)this.arrivalTimes.delete(Z[u][0])}this.decoder.decodeBinary(e)}catch(h){this.logger.error(`Decode error: ${h}`)}}async handleAudioData(F){if(!this.config.enableAudio)return;const e=this.audioCodecData??void 0;F.codec_data&&fn(e,F.codec_data)&&(this.audioCodecData=F.codec_data,this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.audioContext||(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.audioPlayer=new _n(this.audioContext,{bufferDelayMs:this.config.bufferDelayMs??100}),await this.audioPlayer.init(F.codec_data),this.audioPlayer.start(),this.logger.info(`Audio player started: ${F.codec_data.codec_type}, ${F.codec_data.sample_rate}Hz, ${F.codec_data.channels}ch`)),this.audioPlayer&&F.payload&&F.header&&this.audioPlayer.decode(F.payload,F.header.pts)}async configureDecoder(F){this.useWasmDecoder=this.config.preferredDecoder==="wasm",(!this.decoder||this.useWasmDecoder&&this.decoder instanceof Hi||!this.useWasmDecoder&&this.decoder instanceof tn)&&(this.decoder&&this.decoder.dispose(),this.useWasmDecoder?(this.logger.info("Using WASM decoder"),this.decoder=new tn({onFrameDecoded:t=>this.handleDecodedYUVFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})):(this.logger.info(`Using WebCodecs decoder (${this.config.preferredDecoder})`),this.decoder=new Hi({logger:this.logger,onFrameDecoded:t=>this.handleDecodedFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})));const e=this.config.preferredDecoder==="webcodecs-hw";try{this.useWasmDecoder?await this.decoder.configure(F):await this.decoder.configure(F,e),this.streamWidth=F.width,this.streamHeight=F.height,F.timebase_num&&F.timebase_den&&(this.estimatedFrameRate=F.timebase_den/F.timebase_num),this.emit("metadata",{width:F.width,height:F.height,codec:this.getCodecName(F.codec_type)})}catch(t){this.logger.error(`Failed to configure decoder: ${t}`),this.setState("error"),this.emit("error",t instanceof Error?t:new Error(String(t)))}}getCodecName(F){switch(F){case 3:return"H.264";case 4:return"HEVC";case 5:return"AV1";default:return"Unknown"}}handleDecodedFrame(F){const e=performance.now(),Q={arrivalTime:this.arrivalTimes.get(F.timestamp)??e,decodeTime:e};this.frameScheduler.enqueue(F,F.timestamp,Q),this.emit("frame",F)}handleDecodedYUVFrame(F){const e=performance.now(),t=this.arrivalTimes.get(F.timestamp)??e,Q=this.convertYUVToVideoFrame(F,this.streamWidth,this.streamHeight);if(Q){const n={arrivalTime:t,decodeTime:e};this.frameScheduler.enqueue(Q,F.timestamp,n),this.emit("frame",Q)}}convertYUVToVideoFrame(F,e,t){try{const{y:Q,u:n,v:s,width:l,height:B,chromaStride:a,chromaHeight:r}=F,h=e>0?e:l,J=t>0?t:B,S=l*B,Z=a*r,u=S+Z*2,f=new Uint8Array(u);f.set(Q.subarray(0,S),0);const k=l/2,b=S;if(a===k)f.set(n.subarray(0,Z),b);else for(let c=0;c<r;c++)f.set(n.subarray(c*a,c*a+k),b+c*k);const D=b+k*r;if(a===k)f.set(s.subarray(0,Z),D);else for(let c=0;c<r;c++)f.set(s.subarray(c*a,c*a+k),D+c*k);return new VideoFrame(f,{format:"I420",codedWidth:l,codedHeight:B,visibleRect:{x:0,y:0,width:h,height:J},timestamp:F.timestamp,duration:this.estimatedFrameRate>0?1e6/this.estimatedFrameRate:33333})}catch(Q){return this.logger.error(`YUV conversion error: ${Q}`),null}}handleDecoderError(F){this.logger.error(`Decoder error: ${F.message}`),this.emit("error",F)}handleQueueOverflow(F){this.logger.warn(`Decoder queue overflow: ${F} frames, flushing...`),this.flush()}dispose(){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=null,this.boundDataHandler=null,this.decoder&&(this.decoder.dispose(),this.decoder=null),this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.ownsAudioContext&&this.audioContext&&this.audioContext.close(),this.audioContext=null,this.audioCodecData=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.arrivalTimes.clear(),this.currentCodecData=void 0,this.waitingForKeyframe=!0,this.totalDrops=0,this.consecutiveDrops=0,this.clearEventHandlers(),this.setState("idle"),this.logger.info("Player disposed")}}var js=Object.defineProperty,zn=(i,U)=>{for(var F in U)js(i,F,{get:U[F],enumerable:!0})},Fn=Math.pow(2,32),g=Math.pow(2,32)-1,Ks=1,Ps=2,qs=4,Ci=1,Ti=2,gi=8,Di=16,xi=32,Cn=131072,rU=1,bi=4,RU=256,oU=512,hU=1024,VU=2048,Yn=-1,L=0,v=1,A=class Gn extends ArrayBuffer{constructor(U){super(U),this.fileStart=0,this.usedBytes=0}static fromArrayBuffer(U,F){const e=new Gn(U.byteLength);return new Uint8Array(e).set(new Uint8Array(U)),e.fileStart=F,e}},JU,Qn,p,w=(p=class{constructor(U,F,e){Ki(this,JU);this._byteLength=0,this.failurePosition=0,this._dynamicSize=1,this._byteOffset=F||0,U instanceof ArrayBuffer?this.buffer=A.fromArrayBuffer(U,0):U instanceof DataView?(this.dataView=U,F&&(this._byteOffset+=F)):this.buffer=new A(U||0),this.position=0,this.endianness=e||1}getPosition(){return this.position}_realloc(U){if(!this._dynamicSize)return;const F=this._byteOffset+this.position+U;let e=this._buffer.byteLength;if(F<=e){F>this._byteLength&&(this._byteLength=F);return}for(e<1&&(e=1);F>e;)e*=2;const t=new A(e),Q=new Uint8Array(this._buffer);new Uint8Array(t,0,Q.length).set(Q),this.buffer=t,this._byteLength=F}_trimAlloc(){if(this._byteLength===this._buffer.byteLength)return;const U=new A(this._byteLength),F=new Uint8Array(U),e=new Uint8Array(this._buffer,0,F.length);F.set(e),this.buffer=U}get byteLength(){return this._byteLength-this._byteOffset}get buffer(){return this._trimAlloc(),this._buffer}set buffer(U){this._buffer=U,this._dataView=new DataView(U,this._byteOffset),this._byteLength=U.byteLength}get byteOffset(){return this._byteOffset}set byteOffset(U){this._byteOffset=U,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}get dataView(){return this._dataView}set dataView(U){this._byteOffset=U.byteOffset,this._buffer=A.fromArrayBuffer(U.buffer,0),this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+U.byteLength}seek(U){const F=Math.max(0,Math.min(this.byteLength,U));this.position=isNaN(F)||!isFinite(F)?0:F}isEof(){return this.position>=this._byteLength}mapUint8Array(U){this._realloc(U*1);const F=new Uint8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,F}readInt32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Int32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt16Array(U,F){U=U===void 0?this.byteLength-this.position/2:U;const e=new Int16Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt8Array(U){U=U===void 0?this.byteLength-this.position:U;const F=new Int8Array(U);return p.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),this.position+=F.byteLength,F}readUint32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Uint32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readUint16Array(U,F){U=U===void 0?this.byteLength-this.position/2:U;const e=new Uint16Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readUint8Array(U){U=U===void 0?this.byteLength-this.position:U;const F=new Uint8Array(U);return p.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),this.position+=F.byteLength,F}readFloat64Array(U,F){U=U===void 0?this.byteLength-this.position/8:U;const e=new Float64Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readFloat32Array(U,F){U=U===void 0?this.byteLength-this.position/4:U;const e=new Float32Array(U);return p.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),p.arrayToNative(e,F??this.endianness),this.position+=e.byteLength,e}readInt32(U){const F=this._dataView.getInt32(this.position,(U??this.endianness)===2);return this.position+=4,F}readInt16(U){const F=this._dataView.getInt16(this.position,(U??this.endianness)===2);return this.position+=2,F}readInt8(){const U=this._dataView.getInt8(this.position);return this.position+=1,U}readUint32(U){const F=this._dataView.getUint32(this.position,(U??this.endianness)===2);return this.position+=4,F}readUint16(U){const F=this._dataView.getUint16(this.position,(U??this.endianness)===2);return this.position+=2,F}readUint8(){const U=this._dataView.getUint8(this.position);return this.position+=1,U}readFloat32(U){const F=this._dataView.getFloat32(this.position,(U??this.endianness)===2);return this.position+=4,F}readFloat64(U){const F=this._dataView.getFloat64(this.position,(U??this.endianness)===2);return this.position+=8,F}static memcpy(U,F,e,t,Q){const n=new Uint8Array(U,F,Q),s=new Uint8Array(e,t,Q);n.set(s)}static arrayToNative(U,F){return F===p.ENDIANNESS?U:this.flipArrayEndianness(U)}static nativeToEndian(U,F){return F&&p.ENDIANNESS===2?U:this.flipArrayEndianness(U)}static flipArrayEndianness(U){const F=new Uint8Array(U.buffer,U.byteOffset,U.byteLength);for(let e=0;e<U.byteLength;e+=U.BYTES_PER_ELEMENT)for(let t=e+U.BYTES_PER_ELEMENT-1,Q=e;t>Q;t--,Q++){const n=F[Q];F[Q]=F[t],F[t]=n}return U}readString(U,F){return F===void 0||F==="ASCII"?Tn(this.mapUint8Array(U===void 0?this.byteLength-this.position:U)):new TextDecoder(F).decode(this.mapUint8Array(U))}readCString(U){let F=0;const e=this.byteLength-this.position,t=new Uint8Array(this._buffer,this._byteOffset+this.position),Q=U!==void 0?Math.min(U,e):e;for(;F<Q&&t[F]!==0;F++);const n=Tn(this.mapUint8Array(F));return U!==void 0?this.position+=Q-F:F!==e&&(this.position+=1),n}readInt64(){return this.readInt32()*Fn+this.readUint32()}readUint64(){return this.readUint32()*Fn+this.readUint32()}readUint24(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()}save(U){const F=new Blob([this.buffer]);if(typeof window<"u"&&typeof document<"u")if(window.URL&&URL.createObjectURL){const e=window.URL.createObjectURL(F),t=document.createElement("a");document.body.appendChild(t),t.setAttribute("href",e),t.setAttribute("download",U),t.setAttribute("target","_self"),t.click(),window.URL.revokeObjectURL(e),document.body.removeChild(t)}else throw new Error("DataStream.save: Can't create object URL.");return F}get dynamicSize(){return this._dynamicSize}set dynamicSize(U){U||this._trimAlloc(),this._dynamicSize=U}shift(U){const F=new A(this._byteLength-U),e=new Uint8Array(F),t=new Uint8Array(this._buffer,U,e.length);e.set(t),this.buffer=F,this.position-=U}writeInt32Array(U,F){if(this._realloc(U.length*4),U instanceof Int32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeInt32(U[e],F)}writeInt16Array(U,F){if(this._realloc(U.length*2),U instanceof Int16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt16Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeInt16(U[e],F)}writeInt8Array(U){if(this._realloc(U.length*1),U instanceof Int8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt8Array(U.length);else for(let F=0;F<U.length;F++)this.writeInt8(U[F])}writeUint32Array(U,F){if(this._realloc(U.length*4),U instanceof Uint32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeUint32(U[e],F)}writeUint16Array(U,F){if(this._realloc(U.length*2),U instanceof Uint16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint16Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeUint16(U[e],F)}writeUint8Array(U){if(this._realloc(U.length*1),U instanceof Uint8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint8Array(U.length);else for(let F=0;F<U.length;F++)this.writeUint8(U[F])}writeFloat64Array(U,F){if(this._realloc(U.length*8),U instanceof Float64Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat64Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeFloat64(U[e],F)}writeFloat32Array(U,F){if(this._realloc(U.length*4),U instanceof Float32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)p.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat32Array(U.length,F);else for(let e=0;e<U.length;e++)this.writeFloat32(U[e],F)}writeInt64(U,F){this._realloc(8),this._dataView.setBigInt64(this.position,BigInt(U),(F??this.endianness)===2),this.position+=8}writeInt32(U,F){this._realloc(4),this._dataView.setInt32(this.position,U,(F??this.endianness)===2),this.position+=4}writeInt16(U,F){this._realloc(2),this._dataView.setInt16(this.position,U,(F??this.endianness)===2),this.position+=2}writeInt8(U){this._realloc(1),this._dataView.setInt8(this.position,U),this.position+=1}writeUint32(U,F){this._realloc(4),this._dataView.setUint32(this.position,U,(F??this.endianness)===2),this.position+=4}writeUint16(U,F){this._realloc(2),this._dataView.setUint16(this.position,U,(F??this.endianness)===2),this.position+=2}writeUint8(U){this._realloc(1),this._dataView.setUint8(this.position,U),this.position+=1}writeFloat32(U,F){this._realloc(4),this._dataView.setFloat32(this.position,U,(F??this.endianness)===2),this.position+=4}writeFloat64(U,F){this._realloc(8),this._dataView.setFloat64(this.position,U,(F??this.endianness)===2),this.position+=8}writeUCS2String(U,F,e){e===void 0&&(e=U.length);let t;for(t=0;t<U.length&&t<e;t++)this.writeUint16(U.charCodeAt(t),F);for(;t<e;t++)this.writeUint16(0)}writeString(U,F,e){let t=0;if(F===void 0||F==="ASCII")if(e!==void 0){const Q=Math.min(U.length,e);for(t=0;t<Q;t++)this.writeUint8(U.charCodeAt(t));for(;t<e;t++)this.writeUint8(0)}else for(t=0;t<U.length;t++)this.writeUint8(U.charCodeAt(t));else this.writeUint8Array(new TextEncoder(F).encode(U.substring(0,e)))}writeCString(U,F){let e=0;if(F!==void 0){const t=Math.min(U.length,F);for(e=0;e<t;e++)this.writeUint8(U.charCodeAt(e));for(;e<F;e++)this.writeUint8(0)}else{for(e=0;e<U.length;e++)this.writeUint8(U.charCodeAt(e));this.writeUint8(0)}}writeStruct(U,F){for(let e=0;e<U.length;e++){const[t,Q]=U[e],n=F[t];this.writeType(Q,n,F)}}writeType(U,F,e){if(typeof U=="function")return U(this,F);if(typeof U=="object"&&!(U instanceof Array))return U.set(this,F,e);let t,Q="ASCII";const n=this.position;let s=U;if(typeof U=="string"&&/:/.test(U)){const l=U.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":this.writeUint8(F);break;case"int8":this.writeInt8(F);break;case"uint16":this.writeUint16(F,this.endianness);break;case"int16":this.writeInt16(F,this.endianness);break;case"uint32":this.writeUint32(F,this.endianness);break;case"int32":this.writeInt32(F,this.endianness);break;case"float32":this.writeFloat32(F,this.endianness);break;case"float64":this.writeFloat64(F,this.endianness);break;case"uint16be":this.writeUint16(F,1);break;case"int16be":this.writeInt16(F,1);break;case"uint32be":this.writeUint32(F,1);break;case"int32be":this.writeInt32(F,1);break;case"float32be":this.writeFloat32(F,1);break;case"float64be":this.writeFloat64(F,1);break;case"uint16le":this.writeUint16(F,2);break;case"int16le":this.writeInt16(F,2);break;case"uint32le":this.writeUint32(F,2);break;case"int32le":this.writeInt32(F,2);break;case"float32le":this.writeFloat32(F,2);break;case"float64le":this.writeFloat64(F,2);break;case"cstring":this.writeCString(F,t);break;case"string":this.writeString(F,Q,t);break;case"u16string":this.writeUCS2String(F,this.endianness,t);break;case"u16stringle":this.writeUCS2String(F,2,t);break;case"u16stringbe":this.writeUCS2String(F,1,t);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l]=s;for(let B=0;B<F.length;B++)this.writeType(l,F[B]);break}else{this.writeStruct(s,F);break}}t&&(this.position=n,this._realloc(t),this.position=n+t)}writeUint64(U){const F=Math.floor(U/Fn);this.writeUint32(F),this.writeUint32(U&4294967295)}writeUint24(U){this.writeUint8((U&16711680)>>16),this.writeUint8((U&65280)>>8),this.writeUint8(U&255)}adjustUint32(U,F){const e=this.position;this.seek(U),this.writeUint32(F),this.seek(e)}readStruct(U){const F={},e=this.position;for(let t=0;t<U.length;t+=1){const Q=U[t][1],n=this.readType(Q,F);if(!n){this.failurePosition===0&&(this.failurePosition=this.position),this.position=e;return}F[U[t][0]]=n}return F}readUCS2String(U,F){return String.fromCharCode.apply(void 0,this.readUint16Array(U,F))}readType(U,F){if(typeof U=="function")return U(this,F);if(typeof U=="object"&&!(U instanceof Array))return U.get(this,F);if(U instanceof Array&&U.length!==3)return this.readStruct(U);let e,t,Q="ASCII";const n=this.position;let s=U;if(typeof s=="string"&&/:/.test(s)){const l=s.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":e=this.readUint8();break;case"int8":e=this.readInt8();break;case"uint16":e=this.readUint16(this.endianness);break;case"int16":e=this.readInt16(this.endianness);break;case"uint32":e=this.readUint32(this.endianness);break;case"int32":e=this.readInt32(this.endianness);break;case"float32":e=this.readFloat32(this.endianness);break;case"float64":e=this.readFloat64(this.endianness);break;case"uint16be":e=this.readUint16(1);break;case"int16be":e=this.readInt16(1);break;case"uint32be":e=this.readUint32(1);break;case"int32be":e=this.readInt32(1);break;case"float32be":e=this.readFloat32(1);break;case"float64be":e=this.readFloat64(1);break;case"uint16le":e=this.readUint16(2);break;case"int16le":e=this.readInt16(2);break;case"uint32le":e=this.readUint32(2);break;case"int32le":e=this.readInt32(2);break;case"float32le":e=this.readFloat32(2);break;case"float64le":e=this.readFloat64(2);break;case"cstring":e=this.readCString(t);break;case"string":e=this.readString(t,Q);break;case"u16string":e=this.readUCS2String(t,this.endianness);break;case"u16stringle":e=this.readUCS2String(t,2);break;case"u16stringbe":e=this.readUCS2String(t,1);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l,B]=s,a=typeof B=="function"?B(F,this,s):typeof B=="string"&&F[B]!==void 0?parseInt(F[B]):typeof B=="number"?B:B==="*"?void 0:parseInt(B);if(typeof l=="string"){const r=l.replace(/(le|be)$/,"");let h;switch(/le$/.test(l)?h=2:/be$/.test(l)&&(h=1),r){case"uint8":e=this.readUint8Array(a);break;case"uint16":e=this.readUint16Array(a,h);break;case"uint32":e=this.readUint32Array(a,h);break;case"int8":e=this.readInt8Array(a);break;case"int16":e=this.readInt16Array(a,h);break;case"int32":e=this.readInt32Array(a,h);break;case"float32":e=this.readFloat32Array(a,h);break;case"float64":e=this.readFloat64Array(a,h);break;case"cstring":case"utf16string":case"string":if(a){e=new Array(a);for(let J=0;J<a;J++)e[J]=this.readType(l,F)}else for(e=[];!this.isEof();){const J=this.readType(l,F);if(!J)break;e.push(J)}break}}else if(a){e=new Array(a);for(let r=0;r<a;r++){const h=this.readType(l,F);if(!h)return;e[r]=h}}else for(e=[];;){const r=this.position;try{const h=this.readType(l,F);if(!h){this.position=r;break}e.push(h)}catch{this.position=r;break}}break}}return t&&(this.position=n+t),e}mapInt32Array(U,F){this._realloc(U*4);const e=new Int32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}mapInt16Array(U,F){this._realloc(U*2);const e=new Int16Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*2,e}mapInt8Array(U,F){this._realloc(U*1);const e=new Int8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,e}mapUint32Array(U,F){this._realloc(U*4);const e=new Uint32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}mapUint16Array(U,F){this._realloc(U*2);const e=new Uint16Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*2,e}mapFloat64Array(U,F){this._realloc(U*8);const e=new Float64Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*8,e}mapFloat32Array(U,F){this._realloc(U*4);const e=new Float32Array(this._buffer,this.byteOffset+this.position,U);return p.arrayToNative(e,F??this.endianness),this.position+=U*4,e}},JU=new WeakSet,Qn=function(U){return Array.isArray(U)&&U.length===3&&U[0]==="[]"},p.ENDIANNESS=new Int8Array(new Int16Array([1]).buffer)[0]>0?2:1,p);function Tn(i){const U=[];for(let F=0;F<i.length;F++)U[F]=i[F];return String.fromCharCode.apply(void 0,U)}var fi=new Date,Mi=4,gn=3,Dn=2,xn=1,G=Mi,R={setLogLevel(i){i===this.debug?G=xn:i===this.info?G=Dn:i===this.warn?G=gn:(this.error,G=Mi)},debug(i,U){console.debug===void 0&&(console.debug=console.log),xn>=G&&console.debug("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},log(i,U){this.debug(i.msg)},info(i,U){Dn>=G&&console.info("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},warn(i,U){gn>=G&&console.warn("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},error(i,U,F){F!=null&&F.onError?F.onError(i,U):Mi>=G&&console.error("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},getDurationString(i,U){let F;function e(B,a){const h=(""+B).split(".");for(;h[0].length<a;)h[0]="0"+h[0];return h.join(".")}i<0?(F=!0,i=-i):F=!1;let Q=i/(U||1);const n=Math.floor(Q/3600);Q-=n*3600;const s=Math.floor(Q/60);Q-=s*60;let l=Q*1e3;return Q=Math.floor(Q),l-=Q*1e3,l=Math.floor(l),(F?"-":"")+n+":"+e(s,2)+":"+e(Q,2)+"."+e(l,3)},printRanges(i){const U=i.length;if(U>0){let F="";for(let e=0;e<U;e++)e>0&&(F+=","),F+="["+R.getDurationString(i.start(e))+","+R.getDurationString(i.end(e))+"]";return F}else return"(empty)"}};function $s(i,U){R.debug("ArrayBuffer","Trying to create a new buffer of size: "+(i.byteLength+U.byteLength));const F=new Uint8Array(i.byteLength+U.byteLength);return F.set(new Uint8Array(i),0),F.set(new Uint8Array(U),i.byteLength),F.buffer}var yi=class extends w{constructor(i){super(new ArrayBuffer,0),this.buffers=[],this.bufferIndex=-1,i&&(this.insertBuffer(i),this.bufferIndex=0)}initialized(){if(this.bufferIndex>-1)return!0;if(this.buffers.length>0){const i=this.buffers[0];return i.fileStart===0?(this.buffer=i,this.bufferIndex=0,R.debug("MultiBufferStream","Stream ready for parsing"),!0):(R.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1)}else return R.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1}reduceBuffer(i,U,F){const e=new Uint8Array(F);return e.set(new Uint8Array(i,U,F)),e.buffer.fileStart=i.fileStart+U,e.buffer.usedBytes=0,e.buffer}insertBuffer(i){let U=!0,F=0;for(;F<this.buffers.length;F++){const e=this.buffers[F];if(i.fileStart<=e.fileStart){if(i.fileStart===e.fileStart)if(i.byteLength>e.byteLength){this.buffers.splice(F,1),F--;continue}else R.warn("MultiBufferStream","Buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+") already appended, ignoring");else i.fileStart+i.byteLength<=e.fileStart||(i=this.reduceBuffer(i,0,e.fileStart-i.fileStart)),R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.splice(F,0,i),F===0&&(this.buffer=i);U=!1;break}else if(i.fileStart<e.fileStart+e.byteLength){const t=e.fileStart+e.byteLength-i.fileStart,Q=i.byteLength-t;if(Q>0)i=this.reduceBuffer(i,t,Q);else{U=!1;break}}}U&&(R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.push(i),F===0&&(this.buffer=i))}logBufferLevel(i){const U=[];let F="",e,t=0,Q=0;for(let s=0;s<this.buffers.length;s++){const l=this.buffers[s];s===0?(e={start:l.fileStart,end:l.fileStart+l.byteLength},U.push(e),F+="["+e.start+"-"):e.end===l.fileStart?e.end=l.fileStart+l.byteLength:(e={start:l.fileStart,end:l.fileStart+l.byteLength},F+=U[U.length-1].end-1+"], ["+e.start+"-",U.push(e)),t+=l.usedBytes,Q+=l.byteLength}U.length>0&&(F+=e.end-1+"]");const n=i?R.info:R.debug;this.buffers.length===0?n("MultiBufferStream","No more buffer in memory"):n("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+t+"/"+Q+" bytes), continuous ranges: "+F)}cleanBuffers(){for(let i=0;i<this.buffers.length;i++){const U=this.buffers[i];U.usedBytes===U.byteLength&&(R.debug("MultiBufferStream","Removing buffer #"+i),this.buffers.splice(i,1),i--)}}mergeNextBuffer(){if(this.bufferIndex+1<this.buffers.length){const i=this.buffers[this.bufferIndex+1];if(i.fileStart===this.buffer.fileStart+this.buffer.byteLength){const U=this.buffer.byteLength,F=this.buffer.usedBytes,e=this.buffer.fileStart;return this.buffers[this.bufferIndex]=$s(this.buffer,i),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=F,this.buffer.fileStart=e,R.debug("ISOFile","Concatenating buffer for box parsing (length: "+U+"->"+this.buffer.byteLength+")"),!0}else return!1}else return!1}findPosition(i,U,F){let e=-1,t=i===!0?0:this.bufferIndex;for(;t<this.buffers.length;){const n=this.buffers[t];if(n&&n.fileStart<=U)e=t,F&&(n.fileStart+n.byteLength<=U?n.usedBytes=n.byteLength:n.usedBytes=U-n.fileStart,this.logBufferLevel());else break;t++}if(e===-1)return-1;const Q=this.buffers[e];return Q.fileStart+Q.byteLength>=U?(R.debug("MultiBufferStream","Found position in existing buffer #"+e),e):-1}findEndContiguousBuf(i){const U=i!==void 0?i:this.bufferIndex;let F=this.buffers[U];if(this.buffers.length>U+1)for(let e=U+1;e<this.buffers.length;e++){const t=this.buffers[e];if(t.fileStart===F.fileStart+F.byteLength)F=t;else break}return F.fileStart+F.byteLength}getEndFilePositionAfter(i){const U=this.findPosition(!0,i,!1);return U!==-1?this.findEndContiguousBuf(U):i}addUsedBytes(i){this.buffer.usedBytes+=i,this.logBufferLevel()}setAllUsedBytes(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()}seek(i,U,F){const e=this.findPosition(U,i,F);return e!==-1?(this.buffer=this.buffers[e],this.bufferIndex=e,this.position=i-this.buffer.fileStart,R.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(R.debug("MultiBufferStream","Position "+i+" not found in buffered data"),!1)}getPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.position}getLength(){return this.byteLength}getEndPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.byteLength}getAbsoluteEndPosition(){if(this.buffers.length===0)return 0;const i=this.buffers[this.buffers.length-1];return i.fileStart+i.byteLength}},SU,cU,V=(cU=class{constructor(U=0){Ki(this,SU,void 0);this.size=U}get type(){return this.constructor.fourcc??En(this,SU)}set type(U){Nn(this,SU,U)}addBox(U){return this.boxes||(this.boxes=[]),this.boxes.push(U),this[U.type+"s"]?this[U.type+"s"].push(U):this[U.type]=U,U}set(U,F){return this[U]=F,this}addEntry(U,F){const e=F||"entries";return this[e]||(this[e]=[]),this[e].push(U),this}writeHeader(U,F){if(this.size+=8,(this.size>g||this.original_size===1)&&(this.size+=8),this.type==="uuid"&&(this.size+=16),R.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+U.getPosition()+(F||"")),this.original_size===0?U.writeUint32(0):this.size>g||this.original_size===1?U.writeUint32(1):(this.sizePosition=U.getPosition(),U.writeUint32(this.size)),U.writeString(this.type,void 0,4),this.type==="uuid"){const e=new Uint8Array(16);for(let t=0;t<16;t++)e[t]=parseInt(this.uuid.substring(t*2,t*2+2),16);U.writeUint8Array(e)}(this.size>g||this.original_size===1)&&(this.sizePosition=U.getPosition(),U.writeUint64(this.size))}write(U){if(this.type==="mdat"){const F=this;if(F.stream){this.size=F.stream.getAbsoluteEndPosition(),this.writeHeader(U);for(const e of F.stream.buffers){const t=new Uint8Array(e);U.writeUint8Array(t)}}else F.data&&(this.size=F.data.length,this.writeHeader(U),U.writeUint8Array(F.data))}else this.size=this.data?this.data.length:0,this.writeHeader(U),this.data&&U.writeUint8Array(this.data)}printHeader(U){this.size+=8,this.size>g&&(this.size+=8),this.type==="uuid"&&(this.size+=16),U.log(U.indent+"size:"+this.size),U.log(U.indent+"type:"+this.type)}print(U){this.printHeader(U)}parse(U){this.type!=="mdat"?this.data=U.readUint8Array(this.size-this.hdr_size):this.size===0?U.seek(U.getEndPosition()):U.seek(this.start+this.size)}parseDataAndRewind(U){this.data=U.readUint8Array(this.size-this.hdr_size),U.seek(this.start+this.hdr_size)}parseLanguage(U){this.language=U.readUint16();const F=[];F[0]=this.language>>10&31,F[1]=this.language>>5&31,F[2]=this.language&31,this.languageString=String.fromCharCode(F[0]+96,F[1]+96,F[2]+96)}computeSize(U){const F=U||new yi;this.write(F)}isEndOfBox(U){const F=U.getPosition(),e=this.start+this.size;return F===e}},SU=new WeakMap,cU.registryId=Symbol.for("BoxIdentifier"),cU),o=class extends V{constructor(){super(...arguments),this.flags=0,this.version=0}writeHeader(i){this.size+=4,super.writeHeader(i," v="+this.version+" f="+this.flags),i.writeUint8(this.version),i.writeUint24(this.flags)}printHeader(i){this.size+=4,super.printHeader(i),i.log(i.indent+"version:"+this.version),i.log(i.indent+"flags:"+this.flags)}parseDataAndRewind(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,i.seek(this.start+this.hdr_size)}parseFullHeader(i){this.version=i.readUint8(),this.flags=i.readUint24(),this.hdr_size+=4}parse(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size)}},WU,C=(WU=class{constructor(U){this.grouping_type=U}write(U){U.writeUint8Array(this.data)}parse(U){R.warn("BoxParser",`Unknown sample group type: '${this.grouping_type}'`),this.data=U.readUint8Array(this.description_length)}},WU.registryId=Symbol.for("SampleGroupEntryIdentifier"),WU),Ul=class extends o{parse(i){this.parseFullHeader(i),this.track_group_id=i.readUint32()}},Fl=class extends V{constructor(i,U,F,e,t){super(U),this.box_name=F,this.hdr_size=e,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint16();const U=i.readUint16();this.references=[];for(let F=0;F<U;F++)this.references[F]={to_item_ID:i.readUint16()}}},el=class extends V{constructor(i,U,F,e,t){super(U),this.box_name=F,this.hdr_size=e,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint32();const U=i.readUint16();this.references=[];for(let F=0;F<U;F++)this.references[F]={to_item_ID:i.readUint32()}}},tl=class extends V{constructor(i,U,F,e){super(U),this.hdr_size=F,this.start=e,this.type=i}parse(i){this.track_ids=i.readUint32Array((this.size-this.hdr_size)/4)}write(i){this.size=this.track_ids.length*4,this.writeHeader(i),i.writeUint32Array(this.track_ids)}},nn=["boxes","entries","references","subsamples","items","item_infos","extents","associations","subsegments","ranges","seekLists","seekPoints","esd","levels"],Ql=["compatible_brands","matrix","opcolor","sample_counts","sample_deltas","first_chunk","samples_per_chunk","sample_sizes","chunk_offsets","sample_offsets","sample_description_index","sample_duration"];function il(i,U){if(i&&!U)return!1;let F;for(F in i)if(!nn.find(e=>e===F)){if(i[F]instanceof V||U[F]instanceof V)continue;if(typeof i[F]>"u"||typeof U[F]>"u")continue;if(typeof i[F]=="function"||typeof U[F]=="function")continue;if("subBoxNames"in i&&i.subBoxNames.indexOf(F.slice(0,4))>-1||"subBoxNames"in U&&U.subBoxNames.indexOf(F.slice(0,4))>-1)continue;if(F==="data"||F==="start"||F==="size"||F==="creation_time"||F==="modification_time")continue;if(Ql.find(e=>e===F))continue;if(i[F]!==U[F])return!1}return!0}function Xn(i,U){if(!il(i,U))return!1;for(let F=0;F<nn.length;F++){const e=nn[F];if(i[e]&&U[e]&&!Xn(i[e],U[e]))return!1}return!0}function hn(i){let U=i;for(;U;){if("registryId"in U)return U.registryId;U=Object.getPrototypeOf(U)}}var nl=i=>{const U=Symbol.for("SampleGroupEntryIdentifier");return hn(i)===U},sl=i=>{const U=Symbol.for("SampleEntryIdentifier");return hn(i)===U},ll=i=>{const U=Symbol.for("BoxIdentifier");return hn(i)===U},M={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};function Bl(i){const U={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};for(const[F,e]of Object.entries(i)){if(nl(e)){const t="grouping_type"in e?e.grouping_type:void 0;if(!t)throw new Error(`SampleGroupEntry class ${F} does not have a valid static grouping_type. Please ensure it is defined correctly.`);if(t in U.sampleGroupEntry)throw new Error(`SampleGroupEntry class ${F} has a grouping_type that is already registered. Please ensure it is unique.`);U.sampleGroupEntry[t]=e;continue}if(sl(e)){const t="fourcc"in e?e.fourcc:void 0;if(!t)throw new Error(`SampleEntry class ${F} does not have a valid static fourcc. Please ensure it is defined correctly.`);if(t in U.sampleEntry)throw new Error(`SampleEntry class ${F} has a fourcc that is already registered. Please ensure it is unique.`);U.sampleEntry[t]=e;continue}if(ll(e)){const t="fourcc"in e?e.fourcc:void 0,Q="uuid"in e?e.uuid:void 0;if(t==="uuid"){if(!Q)throw new Error(`Box class ${F} has a fourcc of 'uuid' but does not have a valid uuid. Please ensure it is defined correctly.`);if(Q in U.uuid)throw new Error(`Box class ${F} has a uuid that is already registered. Please ensure it is unique.`);U.uuid[Q]=e;continue}U.box[t]=e;continue}throw new Error(`Box class ${F} does not have a valid static fourcc, uuid, or grouping_type. Please ensure it is defined correctly.`)}return M.uuid={...U.uuid},M.sampleEntry={...U.sampleEntry},M.sampleGroupEntry={...U.sampleGroupEntry},M.box={...U.box},M}var zi={};function al(i){return Object.entries(i).forEach(([U,F])=>zi[U]=F),zi}function dl(i){return P(i)}function P(i){let U="";for(let F=0;F<16;F++){const e=i.readUint8().toString(16);U+=e.length===1?"0"+e:e}return U}function z(i,U,F){let e,t;const Q=i.getPosition();let n=0,s;if(i.getEndPosition()-Q<8)return R.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:L};if(F&&F<8)return R.debug("BoxParser","Not enough bytes left in the parent box to parse a new box"),{code:L};let l=i.readUint32();const B=i.readString(4);if(B.length!==4||!/^[\x20-\x7E]{4}$/.test(B))return R.error("BoxParser",`Invalid box type: '${B}'`),{code:Yn,start:Q,type:B};let a=B;if(R.debug("BoxParser","Found box of type '"+B+"' and size "+l+" at position "+Q),n=8,B==="uuid"){if(i.getEndPosition()-i.getPosition()<16||F-n<16)return i.seek(Q),R.debug("BoxParser","Not enough bytes left in the parent box to parse a UUID box"),{code:L};s=dl(i),n+=16,a=s}if(l===1){if(i.getEndPosition()-i.getPosition()<8||F&&F-n<8)return i.seek(Q),R.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+B+'" box'),{code:L};t=l,l=i.readUint64(),n+=8}else if(l===0){if(F)l=F;else if(B!=="mdat")return R.error("BoxParser","Unlimited box size not supported for type: '"+B+"'"),e=new V(l),e.type=B,{code:v,box:e,size:e.size}}if(l!==0&&l<n)return R.error("BoxParser","Box of type "+B+" has an invalid size "+l+" (too small to be a box)"),{code:L,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&F&&l>F)return R.error("BoxParser","Box of type '"+B+"' has a size "+l+" greater than its container size "+F),{code:L,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&Q+l>i.getEndPosition())return i.seek(Q),R.info("BoxParser","Not enough data in stream to parse the entire '"+B+"' box"),{code:L,type:B,size:l,hdr_size:n,start:Q,original_size:t};if(U)return{code:v,type:B,size:l,hdr_size:n,start:Q};B in M.box?e=new M.box[B](l):B!=="uuid"?(R.warn("BoxParser",`Unknown box type: '${B}'`),e=new V(l),e.type=B,e.has_unparsed_data=!0):s in M.uuid?e=new M.uuid[s](l):(R.warn("BoxParser",`Unknown UUID box type: '${s}'`),e=new V(l),e.type=B,e.uuid=s,e.has_unparsed_data=!0),e.original_size=t,e.hdr_size=n,e.start=Q,e.write===V.prototype.write&&e.type!=="mdat"&&(R.info("BoxParser","'"+a+"' box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(i)),e.parse(i);const r=i.getPosition()-(e.start+e.size);return r<0?(R.warn("BoxParser","Parsing of box '"+a+"' did not read the entire indicated box data size (missing "+-r+" bytes), seeking forward"),i.seek(e.start+e.size)):r>0&&e.size!==0&&(R.error("BoxParser","Parsing of box '"+a+"' read "+r+" more bytes than the indicated box data size, seeking backwards"),i.seek(e.start+e.size)),{code:v,box:e,size:e.size}}var N=class extends V{write(i){if(this.size=0,this.writeHeader(i),this.boxes)for(let U=0;U<this.boxes.length;U++)this.boxes[U]&&(this.boxes[U].write(i),this.size+=this.boxes[U].size);R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),i.adjustUint32(this.sizePosition,this.size)}print(i){this.printHeader(i);for(let U=0;U<this.boxes.length;U++)if(this.boxes[U]){const F=i.indent;i.indent+=" ",this.boxes[U].print(i),i.indent=F}}parse(i){let U;for(;i.getPosition()<this.start+this.size;)if(U=z(i,!1,this.size-(i.getPosition()-this.start)),U.code===v){const F=U.box;if(this.boxes||(this.boxes=[]),this.boxes.push(F),this.subBoxNames&&this.subBoxNames.indexOf(F.type)!==-1){const e=this.subBoxNames[this.subBoxNames.indexOf(F.type)]+"s";this[e]||(this[e]=[]),this[e].push(F)}else{const e=F.type!=="uuid"?F.type:F.uuid;this[e]?R.warn("ContainerBox",`Box of type ${e} already exists in container box ${this.type}.`):this[e]=F}}else return}},pU,X=(pU=class extends N{constructor(U,F,e){super(U),this.hdr_size=F,this.start=e}isVideo(){return!1}isAudio(){return!1}isSubtitle(){return!1}isMetadata(){return!1}isHint(){return!1}getCodec(){return this.type.replace(".","")}getWidth(){return""}getHeight(){return""}getChannelCount(){return""}getSampleRate(){return""}getSampleSize(){return""}parseHeader(U){U.readUint8Array(6),this.data_reference_index=U.readUint16(),this.hdr_size+=8}parse(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size)}parseDataAndRewind(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,U.seek(this.start+this.hdr_size)}parseFooter(U){super.parse(U)}writeHeader(U){this.size=8,super.writeHeader(U),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint16(this.data_reference_index)}writeFooter(U){if(this.boxes)for(let F=0;F<this.boxes.length;F++)this.boxes[F].write(U),this.size+=this.boxes[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}write(U){this.writeHeader(U),U.writeUint8Array(this.data),this.size+=this.data.length,R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},pU.registryId=Symbol.for("SampleEntryIdentifier"),pU),bn=class extends X{},QU=class extends X{isMetadata(){return!0}},q=class extends X{isSubtitle(){return!0}},rl=class extends X{},m=class extends X{parse(i){this.parseHeader(i),i.readUint16(),i.readUint16(),i.readUint32Array(3),this.width=i.readUint16(),this.height=i.readUint16(),this.horizresolution=i.readUint32(),this.vertresolution=i.readUint32(),i.readUint32(),this.frame_count=i.readUint16();const U=Math.min(31,i.readUint8());this.compressorname=i.readString(U),U<31&&i.readString(31-U),this.depth=i.readUint16(),i.readUint16(),this.parseFooter(i)}isVideo(){return!0}getWidth(){return this.width}getHeight(){return this.height}write(i){this.writeHeader(i),this.size+=2*7+6*4+32,i.writeUint16(0),i.writeUint16(0),i.writeUint32(0),i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.width),i.writeUint16(this.height),i.writeUint32(this.horizresolution),i.writeUint32(this.vertresolution),i.writeUint32(0),i.writeUint16(this.frame_count),i.writeUint8(Math.min(31,this.compressorname.length)),i.writeString(this.compressorname,void 0,31),i.writeUint16(this.depth),i.writeInt16(-1),this.writeFooter(i)}},y=class extends X{parse(i){var F,e;this.parseHeader(i),this.version=i.readUint16(),i.readUint16(),i.readUint32(),this.channel_count=i.readUint16(),this.samplesize=i.readUint16(),i.readUint16(),i.readUint16(),this.samplerate=i.readUint32()/65536,((e=(F=i.isofile)==null?void 0:F.ftyp)==null?void 0:e.major_brand.includes("qt"))&&(this.version===1?this.extensions=i.readUint8Array(16):this.version===2&&(this.extensions=i.readUint8Array(36))),this.parseFooter(i)}isAudio(){return!0}getChannelCount(){return this.channel_count}getSampleRate(){return this.samplerate}getSampleSize(){return this.samplesize}write(i){this.writeHeader(i),this.size+=2*4+3*4,i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.channel_count),i.writeUint16(this.samplesize),i.writeUint16(0),i.writeUint16(0),i.writeUint32(this.samplerate<<16),this.writeFooter(i)}},Vn=class extends X{parse(i){this.parseHeader(i),this.parseFooter(i)}write(i){this.writeHeader(i),this.writeFooter(i)}},Mn=class extends Array{toString(){let i="<table class='inner-table'>";i+="<thead><tr><th>length</th><th>nalu_data</th></tr></thead>",i+="<tbody>";for(let U=0;U<this.length;U++){const F=this[U];i+="<tr>",i+="<td>"+F.length+"</td>",i+="<td>",i+=F.data.reduce(function(e,t){return e+t.toString(16).padStart(2,"0")},"0x"),i+="</td></tr>"}return i+="</tbody></table>",i}},EU,Ln=(EU=class extends V{constructor(){super(...arguments),this.box_name="AVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.AVCProfileIndication=U.readUint8(),this.profile_compatibility=U.readUint8(),this.AVCLevelIndication=U.readUint8(),this.lengthSizeMinusOne=U.readUint8()&3,this.nb_SPS_nalus=U.readUint8()&31;let F=this.size-this.hdr_size-6;this.SPS=new Mn;for(let e=0;e<this.nb_SPS_nalus;e++){const t=U.readUint16();this.SPS.push({length:t,data:U.readUint8Array(t)}),F-=2+t}this.nb_PPS_nalus=U.readUint8(),F--,this.PPS=new Mn;for(let e=0;e<this.nb_PPS_nalus;e++){const t=U.readUint16();this.PPS.push({length:t,data:U.readUint8Array(t)}),F-=2+t}F>0&&(this.ext=U.readUint8Array(F))}write(U){this.size=7;for(let F=0;F<this.SPS.length;F++)this.size+=2+this.SPS[F].length;for(let F=0;F<this.PPS.length;F++)this.size+=2+this.PPS[F].length;this.ext&&(this.size+=this.ext.length),this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8(this.AVCProfileIndication),U.writeUint8(this.profile_compatibility),U.writeUint8(this.AVCLevelIndication),U.writeUint8(this.lengthSizeMinusOne+252),U.writeUint8(this.SPS.length+224);for(let F=0;F<this.SPS.length;F++)U.writeUint16(this.SPS[F].length),U.writeUint8Array(this.SPS[F].data);U.writeUint8(this.PPS.length);for(let F=0;F<this.PPS.length;F++)U.writeUint16(this.PPS[F].length),U.writeUint8Array(this.PPS[F].data);this.ext&&U.writeUint8Array(this.ext)}},EU.fourcc="avcC",EU),NU,Ii=(NU=class extends V{constructor(){super(...arguments),this.box_name="MediaDataBox"}},NU.fourcc="mdat",NU),ZU,Rl=(ZU=class extends V{constructor(){super(...arguments),this.box_name="ItemDataBox"}},ZU.fourcc="idat",ZU),kU,ol=(kU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},kU.fourcc="free",kU),uU,hl=(uU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},uU.fourcc="skip",uU),fU,On=(fU=class extends o{constructor(){super(...arguments),this.box_name="HintMediaHeaderBox"}},fU.fourcc="hmhd",fU),mU,wi=(mU=class extends o{constructor(){super(...arguments),this.box_name="NullMediaHeaderBox"}},mU.fourcc="nmhd",mU),CU,Vl=(CU=class extends o{constructor(){super(...arguments),this.box_name="ObjectDescriptorBox"}},CU.fourcc="iods",CU),TU,Jl=(TU=class extends o{constructor(){super(...arguments),this.box_name="XMLBox"}},TU.fourcc="xml ",TU),gU,Sl=(gU=class extends o{constructor(){super(...arguments),this.box_name="BinaryXMLBox"}},gU.fourcc="bxml",gU),DU,cl=(DU=class extends o{constructor(){super(...arguments),this.box_name="ItemProtectionBox",this.sinfs=[]}get protections(){return this.sinfs}},DU.fourcc="ipro",DU),xU,sn=(xU=class extends N{constructor(){super(...arguments),this.box_name="MovieBox",this.traks=[],this.psshs=[],this.subBoxNames=["trak","pssh"]}},xU.fourcc="moov",xU),bU,An=(bU=class extends N{constructor(){super(...arguments),this.box_name="TrackBox",this.samples=[]}},bU.fourcc="trak",bU),MU,Wl=(MU=class extends N{constructor(){super(...arguments),this.box_name="EditBox"}},MU.fourcc="edts",MU),yU,jn=(yU=class extends N{constructor(){super(...arguments),this.box_name="MediaBox"}},yU.fourcc="mdia",yU),IU,Kn=(IU=class extends N{constructor(){super(...arguments),this.box_name="MediaInformationBox"}},IU.fourcc="minf",IU),wU,Pn=(wU=class extends N{constructor(){super(...arguments),this.box_name="DataInformationBox"}},wU.fourcc="dinf",wU),vU,qn=(vU=class extends N{constructor(){super(...arguments),this.box_name="SampleTableBox",this.sgpds=[],this.sbgps=[],this.subBoxNames=["sgpd","sbgp"]}},vU.fourcc="stbl",vU),_U,ln=(_U=class extends N{constructor(){super(...arguments),this.box_name="MovieExtendsBox",this.trexs=[],this.subBoxNames=["trex"]}},_U.fourcc="mvex",_U),HU,$n=(HU=class extends N{constructor(){super(...arguments),this.box_name="MovieFragmentBox",this.trafs=[],this.subBoxNames=["traf"]}},HU.fourcc="moof",HU),zU,Us=(zU=class extends N{constructor(){super(...arguments),this.box_name="TrackFragmentBox",this.truns=[],this.sgpds=[],this.sbgps=[],this.subBoxNames=["trun","sgpd","sbgp"]}},zU.fourcc="traf",zU),YU,pl=(YU=class extends N{constructor(){super(...arguments),this.box_name="VTTCueBox"}},YU.fourcc="vttc",YU),GU,El=(GU=class extends N{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessBox",this.tfras=[],this.subBoxNames=["tfra"]}},GU.fourcc="mfra",GU),XU,Nl=(XU=class extends N{constructor(){super(...arguments),this.box_name="AdditionalMetadataContainerBox"}},XU.fourcc="meco",XU),LU,Zl=(LU=class extends N{constructor(){super(...arguments),this.box_name="trackhintinformation",this.subBoxNames=["sdp ","rtp "]}},LU.fourcc="hnti",LU),OU,kl=(OU=class extends N{constructor(){super(...arguments),this.box_name="hintstatisticsbox",this.maxrs=[],this.subBoxNames=["maxr"]}},OU.fourcc="hinf",OU),AU,ul=(AU=class extends N{constructor(){super(...arguments),this.box_name="SubTrackBox"}},AU.fourcc="strk",AU),jU,fl=(jU=class extends N{constructor(){super(...arguments),this.box_name="SubTrackDefinitionBox"}},jU.fourcc="strd",jU),KU,ml=(KU=class extends N{constructor(){super(...arguments),this.box_name="ProtectionSchemeInfoBox"}},KU.fourcc="sinf",KU),PU,Cl=(PU=class extends N{constructor(){super(...arguments),this.box_name="RestrictedSchemeInfoBox"}},PU.fourcc="rinf",PU),qU,Tl=(qU=class extends N{constructor(){super(...arguments),this.box_name="SchemeInformationBox"}},qU.fourcc="schi",qU),$U,gl=($U=class extends N{constructor(){super(...arguments),this.box_name="TrackGroupBox"}},$U.fourcc="trgr",$U),UF,Dl=(UF=class extends N{constructor(){super(...arguments),this.box_name="UserDataBox",this.kinds=[],this.strks=[],this.subBoxNames=["kind","strk"]}},UF.fourcc="udta",UF),FF,xl=(FF=class extends N{constructor(){super(...arguments),this.box_name="ItemPropertiesBox",this.ipmas=[],this.subBoxNames=["ipma"]}},FF.fourcc="iprp",FF),eF,bl=(eF=class extends N{constructor(){super(...arguments),this.box_name="ItemPropertyContainerBox",this.hvcCs=[],this.ispes=[],this.claps=[],this.irots=[],this.subBoxNames=["hvcC","ispe","clap","irot"]}},eF.fourcc="ipco",eF),tF,Ml=(tF=class extends N{constructor(){super(...arguments),this.box_name="GroupsListBox"}},tF.fourcc="grpl",tF),QF,yl=(QF=class extends N{constructor(){super(...arguments),this.box_name="J2KHeaderInfoBox"}},QF.fourcc="j2kH",QF),iF,Il=(iF=class extends N{constructor(){super(...arguments),this.box_name="ExtendedTypeBox",this.tycos=[],this.subBoxNames=["tyco"]}},iF.fourcc="etyp",iF),nF,wl=(nF=class extends N{constructor(){super(...arguments),this.box_name="ProjectedOmniVideoBox",this.subBoxNames=["prfr"]}},nF.fourcc="povd",nF),sF,Fs=(sF=class extends o{constructor(){super(...arguments),this.box_name="DataReferenceBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){const t=z(U,!1,this.size-(U.getPosition()-this.start));if(t.code===v){const Q=t.box;this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++)this.entries[F].write(U),this.size+=this.entries[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},sF.fourcc="dref",sF),lF,es=(lF=class extends o{constructor(){super(...arguments),this.box_name="ExtendedLanguageBox"}parse(U){this.parseFullHeader(U),this.extended_language=U.readString(this.size-this.hdr_size)}write(U){this.version=0,this.flags=0,this.size=this.extended_language.length,this.writeHeader(U),U.writeString(this.extended_language)}},lF.fourcc="elng",lF),BF,ts=(BF=class extends V{constructor(){super(...arguments),this.box_name="FileTypeBox"}parse(U){let F=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),F-=8,this.compatible_brands=[];let e=0;for(;F>=4;)this.compatible_brands[e]=U.readString(4),F-=4,e++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let F=0;F<this.compatible_brands.length;F++)U.writeString(this.compatible_brands[F],void 0,4)}},BF.fourcc="ftyp",BF),aF,Qs=(aF=class extends o{constructor(){super(...arguments),this.box_name="HandlerBox"}parse(U){if(this.parseFullHeader(U),this.version===0&&(U.readUint32(),this.handler=U.readString(4),U.readUint32Array(3),!this.isEndOfBox(U))){const F=this.start+this.size-U.getPosition();this.name=U.readCString();const e=this.start+this.size-1;U.seek(e),U.readUint8()!==0&&F>1&&(R.info("BoxParser","Warning: hdlr name is not null-terminated, possibly length-prefixed string. Trimming first byte."),this.name=this.name.slice(1))}}write(U){this.size=5*4+this.name.length+1,this.version=0,this.flags=0,this.writeHeader(U),U.writeUint32(0),U.writeString(this.handler,void 0,4),U.writeUint32Array([0,0,0]),U.writeCString(this.name)}},aF.fourcc="hdlr",aF),dF,is=(dF=class extends V{constructor(){super(...arguments),this.box_name="HEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8();let F=U.readUint8();this.general_profile_space=F>>6,this.general_tier_flag=(F&32)>>5,this.general_profile_idc=F&31,this.general_profile_compatibility=U.readUint32(),this.general_constraint_indicator=U.readUint8Array(6),this.general_level_idc=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3,this.chroma_format_idc=U.readUint8()&3,this.bit_depth_luma_minus8=U.readUint8()&7,this.bit_depth_chroma_minus8=U.readUint8()&7,this.avgFrameRate=U.readUint16(),F=U.readUint8(),this.constantFrameRate=F>>6,this.numTemporalLayers=(F&13)>>3,this.temporalIdNested=(F&4)>>2,this.lengthSizeMinusOne=F&3,this.nalu_arrays=[];const e=U.readUint8();for(let t=0;t<e;t++){const Q=[];this.nalu_arrays.push(Q),F=U.readUint8(),Q.completeness=(F&128)>>7,Q.nalu_type=F&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}write(U){this.size=23;for(let F=0;F<this.nalu_arrays.length;F++){this.size+=3;for(let e=0;e<this.nalu_arrays[F].length;e++)this.size+=2+this.nalu_arrays[F][e].data.length}this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8((this.general_profile_space<<6)+(this.general_tier_flag<<5)+this.general_profile_idc),U.writeUint32(this.general_profile_compatibility),U.writeUint8Array(this.general_constraint_indicator),U.writeUint8(this.general_level_idc),U.writeUint16(this.min_spatial_segmentation_idc+(15<<24)),U.writeUint8(this.parallelismType+252),U.writeUint8(this.chroma_format_idc+252),U.writeUint8(this.bit_depth_luma_minus8+248),U.writeUint8(this.bit_depth_chroma_minus8+248),U.writeUint16(this.avgFrameRate),U.writeUint8((this.constantFrameRate<<6)+(this.numTemporalLayers<<3)+(this.temporalIdNested<<2)+this.lengthSizeMinusOne),U.writeUint8(this.nalu_arrays.length);for(let F=0;F<this.nalu_arrays.length;F++){U.writeUint8((this.nalu_arrays[F].completeness<<7)+this.nalu_arrays[F].nalu_type),U.writeUint16(this.nalu_arrays[F].length);for(let e=0;e<this.nalu_arrays[F].length;e++)U.writeUint16(this.nalu_arrays[F][e].data.length),U.writeUint8Array(this.nalu_arrays[F][e].data)}}},dF.fourcc="hvcC",dF),rF,ns=(rF=class extends o{constructor(){super(...arguments),this.box_name="MediaHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.parseLanguage(U),U.readUint16()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=4*4+2*2,this.size+=F?3*4:0,this.flags=0,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint16(this.language),U.writeUint16(0)}},rF.fourcc="mdhd",rF),RF,ss=(RF=class extends o{constructor(){super(...arguments),this.box_name="MovieExtendsHeaderBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(R.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),this.version===1?this.fragment_duration=U.readUint64():this.fragment_duration=U.readUint32()}write(U){const F=this.fragment_duration>g||this.version===1;this.version=F?1:0,this.size=4,this.size+=F?4:0,this.flags=0,this.writeHeader(U),F?U.writeUint64(this.fragment_duration):U.writeUint32(this.fragment_duration)}},RF.fourcc="mehd",RF),oF,vl=(oF=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoEntry"}parse(U){if(this.parseFullHeader(U),(this.version===0||this.version===1)&&(this.item_ID=U.readUint16(),this.item_protection_index=U.readUint16(),this.item_name=U.readCString(),this.content_type=U.readCString(),this.isEndOfBox(U)||(this.content_encoding=U.readCString())),this.version===1){this.extension_type=U.readString(4),R.warn("BoxParser","Cannot parse extension type"),U.seek(this.start+this.size);return}this.version>=2&&(this.version===2?this.item_ID=U.readUint16():this.version===3&&(this.item_ID=U.readUint32()),this.item_protection_index=U.readUint16(),this.item_type=U.readString(4),this.item_name=U.readCString(),this.item_type==="mime"?(this.content_type=U.readCString(),this.content_encoding=U.readCString()):this.item_type==="uri "&&(this.item_uri_type=U.readCString()))}},oF.fourcc="infe",oF),hF,_l=(hF=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoBox"}parse(U){this.parseFullHeader(U),this.version===0?this.entry_count=U.readUint16():this.entry_count=U.readUint32(),this.item_infos=[];for(let F=0;F<this.entry_count;F++){const e=z(U,!1,this.size-(U.getPosition()-this.start));if(e.code===v){const t=e.box;t.type==="infe"?this.item_infos[F]=t:R.error("BoxParser","Expected 'infe' box, got "+e.box.type,U.isofile)}else return}}},hF.fourcc="iinf",hF),VF,Hl=(VF=class extends o{constructor(){super(...arguments),this.box_name="ItemLocationBox"}parse(U){this.parseFullHeader(U);let F;F=U.readUint8(),this.offset_size=F>>4&15,this.length_size=F&15,F=U.readUint8(),this.base_offset_size=F>>4&15,this.version===1||this.version===2?this.index_size=F&15:this.index_size=0,this.items=[];let e=0;if(this.version<2)e=U.readUint16();else if(this.version===2)e=U.readUint32();else throw new Error("version of iloc box not supported");for(let t=0;t<e;t++){let Q=0,n=0,s=0;if(this.version<2)Q=U.readUint16();else if(this.version===2)Q=U.readUint32();else throw new Error("version of iloc box not supported");this.version===1||this.version===2?n=U.readUint16()&15:n=0;const l=U.readUint16();switch(this.base_offset_size){case 0:s=0;break;case 4:s=U.readUint32();break;case 8:s=U.readUint64();break;default:throw new Error("Error reading base offset size")}const B=[],a=U.readUint16();for(let r=0;r<a;r++){let h=0,J=0,E=0;if(this.version===1||this.version===2)switch(this.index_size){case 0:h=0;break;case 4:h=U.readUint32();break;case 8:h=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.offset_size){case 0:J=0;break;case 4:J=U.readUint32();break;case 8:J=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.length_size){case 0:E=0;break;case 4:E=U.readUint32();break;case 8:E=U.readUint64();break;default:throw new Error("Error reading extent index")}B.push({extent_index:h,extent_length:E,extent_offset:J})}this.items.push({base_offset:s,construction_method:n,item_ID:Q,data_reference_index:l,extents:B})}}},VF.fourcc="iloc",VF),zl={auxl:"Auxiliary image item",base:"Pre-derived image item base",cdsc:"Item describes referenced item",dimg:"Derived image item",dpnd:"Item coding dependency",eroi:"Region",evir:"EVC slice",exbl:"Scalable image item","fdl ":"File delivery",font:"Font item",iloc:"Item data location",mask:"Region mask",mint:"Data integrity",pred:"Predictively coded item",prem:"Pre-multiplied item",tbas:"HEVC tile track base item",text:"Text item",thmb:"Thumbnail image item"},j,Yl=(j=class extends o{constructor(){super(...arguments),this.box_name="ItemReferenceBox",this.references=[]}parse(U){for(this.parseFullHeader(U),this.references=[];U.getPosition()<this.start+this.size;){const F=z(U,!0,this.size-(U.getPosition()-this.start));if(F.code===v){let e="Unknown item reference";j.allowed_types.includes(F.type)?e=zl[F.type]:R.warn("BoxParser",`Unknown item reference type: '${F.type}'`);const t=this.version===0?new Fl(F.type,F.size,e,F.hdr_size,F.start):new el(F.type,F.size,e,F.hdr_size,F.start);t.write===V.prototype.write&&t.type!=="mdat"&&(R.warn("BoxParser",t.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),t.parseDataAndRewind(U)),t.parse(U),this.references.push(t)}else return}}},j.fourcc="iref",j.allowed_types=["auxl","base","cdsc","dimg","dpnd","eroi","evir","exbl","fdl ","font","iloc","mask","mint","pred","prem","tbas","text","thmb"],j),JF,Gl=(JF=class extends o{constructor(){super(...arguments),this.box_name="PrimaryItemBox"}parse(U){this.parseFullHeader(U),this.version===0?this.item_id=U.readUint16():this.item_id=U.readUint32()}},JF.fourcc="pitm",JF),SF,Xl=(SF=class extends o{constructor(){super(...arguments),this.box_name="MetaBox",this.isQT=!1}parse(U){const F=U.getPosition();if(this.size>8){switch(U.readUint32(),U.readString(4)){case"hdlr":case"mhdr":case"keys":case"ilst":case"ctry":case"lang":this.isQT=!0;break}U.seek(F)}this.isQT||this.parseFullHeader(U),N.prototype.parse.call(this,U)}},SF.fourcc="meta",SF),cF,ls=(cF=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentHeaderBox"}parse(U){this.parseFullHeader(U),this.sequence_number=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.sequence_number)}},cF.fourcc="mfhd",cF),WF,Bs=(WF=class extends o{constructor(){super(...arguments),this.box_name="MovieHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.rate=U.readUint32(),this.volume=U.readUint16()>>8,U.readUint16(),U.readUint32Array(2),this.matrix=U.readInt32Array(9),U.readUint32Array(6),this.next_track_id=U.readUint32()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=4*4+20*4,this.size+=F?3*4:0,this.flags=0,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint32(this.rate),U.writeUint16(this.volume<<8),U.writeUint16(0),U.writeUint32(0),U.writeUint32(0),U.writeInt32Array(this.matrix),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(this.next_track_id)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"timescale: "+this.timescale),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"rate: "+this.rate),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"next_track_id: "+this.next_track_id)}},WF.fourcc="mvhd",WF),pF,Ll=(pF=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},pF.fourcc="mett",pF),EF,Ol=(EF=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.parseFooter(U)}},EF.fourcc="metx",EF),NF,Al=(NF=class extends V{constructor(){super(...arguments),this.box_name="AV1CodecConfigurationBox"}parse(U){let F=U.readUint8();if((F>>7&1)!==1){R.error("BoxParser","av1C marker problem",U.isofile);return}if(this.version=F&127,this.version!==1){R.error("BoxParser","av1C version "+this.version+" not supported",U.isofile);return}if(F=U.readUint8(),this.seq_profile=F>>5&7,this.seq_level_idx_0=F&31,F=U.readUint8(),this.seq_tier_0=F>>7&1,this.high_bitdepth=F>>6&1,this.twelve_bit=F>>5&1,this.monochrome=F>>4&1,this.chroma_subsampling_x=F>>3&1,this.chroma_subsampling_y=F>>2&1,this.chroma_sample_position=F&3,F=U.readUint8(),this.reserved_1=F>>5&7,this.reserved_1!==0){R.error("BoxParser","av1C reserved_1 parsing problem",U.isofile);return}if(this.initial_presentation_delay_present=F>>4&1,this.initial_presentation_delay_present===1)this.initial_presentation_delay_minus_one=F&15;else if(this.reserved_2=F&15,this.reserved_2!==0){R.error("BoxParser","av1C reserved_2 parsing problem",U.isofile);return}const e=this.size-this.hdr_size-4;this.configOBUs=U.readUint8Array(e)}},NF.fourcc="av1C",NF),ZF,jl=(ZF=class extends o{constructor(){super(...arguments),this.box_name="ElementaryStreamDescriptorBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8Array(this.size-this.hdr_size);if("MPEG4DescriptorParser"in zi){const e=new zi.MPEG4DescriptorParser;this.esd=e.parseOneDescriptor(new w(F.buffer,0))}}},ZF.fourcc="esds",ZF),kF,Kl=(kF=class extends o{constructor(){super(...arguments),this.box_name="VPCodecConfigurationRecord"}parse(U){if(this.parseFullHeader(U),this.version===1){this.profile=U.readUint8(),this.level=U.readUint8();const F=U.readUint8();this.bitDepth=F>>4,this.chromaSubsampling=F>>1&7,this.videoFullRangeFlag=F&1,this.colourPrimaries=U.readUint8(),this.transferCharacteristics=U.readUint8(),this.matrixCoefficients=U.readUint8(),this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}else{this.profile=U.readUint8(),this.level=U.readUint8();let F=U.readUint8();this.bitDepth=F>>4&15,this.colorSpace=F&15,F=U.readUint8(),this.chromaSubsampling=F>>4&15,this.transferFunction=F>>1&7,this.videoFullRangeFlag=F&1,this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}}},kF.fourcc="vpcC",kF),uF,Pl=(uF=class extends o{constructor(){super(...arguments),this.box_name="VvcConfigurationBox"}parse(U){this.parseFullHeader(U);const F={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(n){this.held_bits=n.readUint8(),this.num_held_bits=1*8},stream_read_2_bytes:function(n){this.held_bits=n.readUint16(),this.num_held_bits=2*8},extract_bits:function(n){const s=this.held_bits>>this.num_held_bits-n&(1<<n)-1;return this.num_held_bits-=n,s}};if(F.stream_read_1_bytes(U),F.extract_bits(5),this.lengthSizeMinusOne=F.extract_bits(2),this.ptl_present_flag=F.extract_bits(1),this.ptl_present_flag){F.stream_read_2_bytes(U),this.ols_idx=F.extract_bits(9),this.num_sublayers=F.extract_bits(3),this.constant_frame_rate=F.extract_bits(2),this.chroma_format_idc=F.extract_bits(2),F.stream_read_1_bytes(U),this.bit_depth_minus8=F.extract_bits(3),F.extract_bits(5);{if(F.stream_read_2_bytes(U),F.extract_bits(2),this.num_bytes_constraint_info=F.extract_bits(6),this.general_profile_idc=F.extract_bits(7),this.general_tier_flag=F.extract_bits(1),this.general_level_idc=U.readUint8(),F.stream_read_1_bytes(U),this.ptl_frame_only_constraint_flag=F.extract_bits(1),this.ptl_multilayer_enabled_flag=F.extract_bits(1),this.general_constraint_info=new Uint8Array(this.num_bytes_constraint_info),this.num_bytes_constraint_info){for(let n=0;n<this.num_bytes_constraint_info-1;n++){const s=F.extract_bits(6);F.stream_read_1_bytes(U);const l=F.extract_bits(2);this.general_constraint_info[n]=s<<2|l}this.general_constraint_info[this.num_bytes_constraint_info-1]=F.extract_bits(6)}else F.extract_bits(6);if(this.num_sublayers>1){F.stream_read_1_bytes(U),this.ptl_sublayer_present_mask=0;for(let n=this.num_sublayers-2;n>=0;--n){const s=F.extract_bits(1);this.ptl_sublayer_present_mask|=s<<n}for(let n=this.num_sublayers;n<=8&&this.num_sublayers>1;++n)F.extract_bits(1);this.sublayer_level_idc=[];for(let n=this.num_sublayers-2;n>=0;--n)this.ptl_sublayer_present_mask&1<<n&&(this.sublayer_level_idc[n]=U.readUint8())}if(this.ptl_num_sub_profiles=U.readUint8(),this.general_sub_profile_idc=[],this.ptl_num_sub_profiles)for(let n=0;n<this.ptl_num_sub_profiles;n++)this.general_sub_profile_idc.push(U.readUint32())}this.max_picture_width=U.readUint16(),this.max_picture_height=U.readUint16(),this.avg_frame_rate=U.readUint16()}const e=12,t=13;this.nalu_arrays=[];const Q=U.readUint8();for(let n=0;n<Q;n++){const s=[];this.nalu_arrays.push(s),F.stream_read_1_bytes(U),s.completeness=F.extract_bits(1),F.extract_bits(2),s.nalu_type=F.extract_bits(5);let l=1;s.nalu_type!==t&&s.nalu_type!==e&&(l=U.readUint16());for(let B=0;B<l;B++){const a=U.readUint16();s.push({data:U.readUint8Array(a),length:a})}}}},uF.fourcc="vvcC",uF),fF,ql=(fF=class extends V{constructor(){super(...arguments),this.box_name="ColourInformationBox"}parse(U){if(this.colour_type=U.readString(4),this.colour_type==="nclx"){this.colour_primaries=U.readUint16(),this.transfer_characteristics=U.readUint16(),this.matrix_coefficients=U.readUint16();const F=U.readUint8();this.full_range_flag=F>>7}else this.colour_type==="rICC"?this.ICC_profile=U.readUint8Array(this.size-4):this.colour_type==="prof"&&(this.ICC_profile=U.readUint8Array(this.size-4))}},fF.fourcc="colr",fF);function tU(i,U){let F=Number(i).toString(16);for(U=typeof U>"u"?2:U;F.length<U;)F="0"+F;return F}var Gi=class extends m{getCodec(){const i=super.getCodec();return this.avcC?`${i}.${tU(this.avcC.AVCProfileIndication)}${tU(this.avcC.profile_compatibility)}${tU(this.avcC.AVCLevelIndication)}`:i}},mF,$l=(mF=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},mF.fourcc="avc1",mF),CF,UB=(CF=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},CF.fourcc="avc2",CF),TF,FB=(TF=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},TF.fourcc="avc3",TF),gF,eB=(gF=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},gF.fourcc="avc4",gF),DF,tB=(DF=class extends m{constructor(){super(...arguments),this.box_name="AV1SampleEntry"}getCodec(){const U=super.getCodec(),F=this.av1C.seq_level_idx_0,e=F<10?"0"+F:F;let t;return this.av1C.seq_profile===2&&this.av1C.high_bitdepth===1?t=this.av1C.twelve_bit===1?"12":"10":this.av1C.seq_profile<=2&&(t=this.av1C.high_bitdepth===1?"10":"08"),U+"."+this.av1C.seq_profile+"."+e+(this.av1C.seq_tier_0?"H":"M")+"."+t}},DF.fourcc="av01",DF),xF,QB=(xF=class extends m{},xF.fourcc="dav1",xF),Xi=class extends m{getCodec(){let i=super.getCodec();if(this.hvcC){switch(i+=".",this.hvcC.general_profile_space){case 0:i+="";break;case 1:i+="A";break;case 2:i+="B";break;case 3:i+="C";break}i+=this.hvcC.general_profile_idc,i+=".";let U=this.hvcC.general_profile_compatibility,F=0;for(let Q=0;Q<32&&(F|=U&1,Q!==31);Q++)F<<=1,U>>=1;i+=tU(F,0),i+=".",this.hvcC.general_tier_flag===0?i+="L":i+="H",i+=this.hvcC.general_level_idc;let e=!1,t="";for(let Q=5;Q>=0;Q--)(this.hvcC.general_constraint_indicator[Q]||e)&&(t="."+tU(this.hvcC.general_constraint_indicator[Q],0)+t,e=!0);i+=t}return i}},bF,iB=(bF=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry"}},bF.fourcc="hvc1",bF),MF,nB=(MF=class extends Xi{},MF.fourcc="hvc2",MF),yF,sB=(yF=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry",this.colrs=[],this.subBoxNames=["colr"]}},yF.fourcc="hev1",yF),IF,lB=(IF=class extends Xi{},IF.fourcc="hev2",IF),wF,BB=(wF=class extends m{constructor(){super(...arguments),this.box_name="HEVCTileSampleSampleEntry"}},wF.fourcc="hvt1",wF),vF,aB=(vF=class extends m{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},vF.fourcc="lhe1",vF),_F,dB=(_F=class extends m{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},_F.fourcc="lhv1",_F),HF,rB=(HF=class extends m{},HF.fourcc="dvh1",HF),zF,RB=(zF=class extends m{},zF.fourcc="dvhe",zF),as=class extends m{getCodec(){let i=super.getCodec();if(this.vvcC){i+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?i+=".H":i+=".L",i+=this.vvcC.general_level_idc;let U="";if(this.vvcC.general_constraint_info){const F=[];let e=0;e|=this.vvcC.ptl_frame_only_constraint_flag<<7,e|=this.vvcC.ptl_multilayer_enabled_flag<<6;let t;for(let Q=0;Q<this.vvcC.general_constraint_info.length;++Q)e|=this.vvcC.general_constraint_info[Q]>>2&63,F.push(e),e&&(t=Q),e=this.vvcC.general_constraint_info[Q]>>2&3;if(t===void 0)U=".CA";else{U=".C";const Q="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,s=0;for(let l=0;l<=t;++l)for(n=n<<8|F[l],s+=8;s>=5;){const B=n>>s-5&31;U+=Q[B],s-=5,n&=(1<<s)-1}s&&(n<<=5-s,U+=Q[n&31])}}i+=U}return i}},YF,oB=(YF=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},YF.fourcc="vvc1",YF),GF,hB=(GF=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},GF.fourcc="vvi1",GF),XF,VB=(XF=class extends m{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},XF.fourcc="vvs1",XF),LF,JB=(LF=class extends m{constructor(){super(...arguments),this.box_name="VvcNonVCLSampleEntry"}},LF.fourcc="vvcN",LF),ds=class extends m{getCodec(){const i=super.getCodec();let U=this.vpcC.level;U===0&&(U="00");let F=this.vpcC.bitDepth;return F===8&&(F="08"),`${i}.0${this.vpcC.profile}.${U}.${F}`}},OF,SB=(OF=class extends ds{},OF.fourcc="vp08",OF),AF,cB=(AF=class extends ds{},AF.fourcc="vp09",AF),jF,WB=(jF=class extends m{},jF.fourcc="avs3",jF),KF,pB=(KF=class extends m{constructor(){super(...arguments),this.box_name="J2KSampleEntry"}},KF.fourcc="j2ki",KF),PF,EB=(PF=class extends m{},PF.fourcc="mjp2",PF),qF,NB=(qF=class extends m{},qF.fourcc="mjpg",qF),$F,ZB=($F=class extends m{constructor(){super(...arguments),this.box_name="UncompressedVideoSampleEntry"}},$F.fourcc="uncv",$F),Ue,kB=(Ue=class extends m{constructor(){super(...arguments),this.box_name="MP4VisualSampleEntry"}},Ue.fourcc="mp4v",Ue),Fe,uB=(Fe=class extends y{constructor(){super(...arguments),this.box_name="MP4AudioSampleEntry"}getCodec(){const U=super.getCodec();if(this.esds&&this.esds.esd){const F=this.esds.esd.getOTI(),e=this.esds.esd.getAudioConfig();return U+"."+tU(F)+(e?"."+e:"")}else return U}},Fe.fourcc="mp4a",Fe),ee,fB=(ee=class extends y{},ee.fourcc="m4ae",ee),te,mB=(te=class extends y{},te.fourcc="ac-3",te),Qe,CB=(Qe=class extends y{},Qe.fourcc="ac-4",Qe),ie,TB=(ie=class extends y{},ie.fourcc="ec-3",ie),ne,gB=(ne=class extends y{},ne.fourcc="Opus",ne),se,DB=(se=class extends y{},se.fourcc="mha1",se),le,xB=(le=class extends y{},le.fourcc="mha2",le),Be,bB=(Be=class extends y{},Be.fourcc="mhm1",Be),ae,MB=(ae=class extends y{},ae.fourcc="mhm2",ae),de,yB=(de=class extends y{},de.fourcc="fLaC",de),re,IB=(re=class extends m{},re.fourcc="encv",re),Re,wB=(Re=class extends y{},Re.fourcc="enca",Re),oe,vB=(oe=class extends q{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},oe.fourcc="encu",oe),he,_B=(he=class extends Vn{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},he.fourcc="encs",he),Ve,HB=(Ve=class extends Vn{},Ve.fourcc="mp4s",Ve),Je,zB=(Je=class extends rl{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},Je.fourcc="enct",Je),Se,YB=(Se=class extends QU{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},Se.fourcc="encm",Se),ce,GB=(ce=class extends m{constructor(){super(...arguments),this.box_name="RestrictedVideoSampleEntry"}},ce.fourcc="resv",ce),We,XB=(We=class extends q{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},We.fourcc="sbtt",We),pe,rs=(pe=class extends q{parse(U){this.parseHeader(U),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.auxiliary_mime_types=U.readCString(),this.parseFooter(U)}write(U){this.writeHeader(U),this.size+=this.namespace.length+1+this.schema_location.length+1+this.auxiliary_mime_types.length+1,U.writeCString(this.namespace),U.writeCString(this.schema_location),U.writeCString(this.auxiliary_mime_types),this.writeFooter(U)}},pe.fourcc="stpp",pe),Ee,LB=(Ee=class extends q{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}getCodec(){const U=super.getCodec();return this.mime_format?U+"."+this.mime_format:U}},Ee.fourcc="stxt",Ee),Ne,OB=(Ne=class extends q{parse(U){this.parseHeader(U),this.displayFlags=U.readUint32(),this.horizontal_justification=U.readInt8(),this.vertical_justification=U.readInt8(),this.bg_color_rgba=U.readUint8Array(4),this.box_record=U.readInt16Array(4),this.style_record=U.readUint8Array(12),this.parseFooter(U)}},Ne.fourcc="tx3g",Ne),Ze,AB=(Ze=class extends QU{parse(U){this.parseHeader(U),this.parseFooter(U)}},Ze.fourcc="wvtt",Ze),ke,jB=(ke=class extends o{constructor(){super(...arguments),this.box_name="SampleToGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),this.version===1?this.grouping_type_parameter=U.readUint32():this.grouping_type_parameter=0,this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++)this.entries.push({sample_count:U.readInt32(),group_description_index:U.readInt32()})}write(U){this.grouping_type_parameter?this.version=1:this.version=0,this.flags=0,this.size=8+8*this.entries.length+(this.version===1?4:0),this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.grouping_type_parameter),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++){const e=this.entries[F];U.writeInt32(e.sample_count),U.writeInt32(e.group_description_index)}}},ke.fourcc="sbgp",ke),ue,KB=(ue=class extends o{constructor(){super(...arguments),this.box_name="SampleDependencyTypeBox"}parse(U){this.parseFullHeader(U);const F=this.size-this.hdr_size;this.is_leading=[],this.sample_depends_on=[],this.sample_is_depended_on=[],this.sample_has_redundancy=[];for(let e=0;e<F;e++){const t=U.readUint8();this.is_leading[e]=t>>6,this.sample_depends_on[e]=t>>4&3,this.sample_is_depended_on[e]=t>>2&3,this.sample_has_redundancy[e]=t&3}}},ue.fourcc="sdtp",ue),fe,PB=(fe=class extends o{constructor(){super(...arguments),this.box_name="SampleGroupDescriptionBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),R.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),this.version===1?this.default_length=U.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=U.readUint32()),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){let t;this.grouping_type in M.sampleGroupEntry?t=new M.sampleGroupEntry[this.grouping_type](this.grouping_type):t=new C(this.grouping_type),this.entries.push(t),this.version===1?this.default_length===0?t.description_length=U.readUint32():t.description_length=this.default_length:t.description_length=this.default_length,t.write===C.prototype.write&&(R.info("BoxParser","SampleGroup for type "+this.grouping_type+" writing not yet implemented, keeping unparsed data in memory for later write"),t.data=U.readUint8Array(t.description_length),U.seek(U.getPosition()-t.description_length)),t.parse(U)}}write(U){this.flags=0,this.size=12;for(let F=0;F<this.entries.length;F++){const e=this.entries[F];this.version===1&&(this.default_length===0&&(this.size+=4),this.size+=e.data.length)}this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.default_length),this.version>=2&&U.writeUint32(this.default_sample_description_index),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++){const e=this.entries[F];this.version===1&&this.default_length===0&&U.writeUint32(e.description_length),e.write(U)}}},fe.fourcc="sgpd",fe),me,qB=(me=class extends o{constructor(){super(...arguments),this.box_name="CompressedSegmentIndexBox"}parse(U){this.parseFullHeader(U),this.reference_ID=U.readUint32(),this.timescale=U.readUint32(),this.version===0?(this.earliest_presentation_time=U.readUint32(),this.first_offset=U.readUint32()):(this.earliest_presentation_time=U.readUint64(),this.first_offset=U.readUint64()),U.readUint16(),this.references=[];const F=U.readUint16();for(let e=0;e<F;e++){const t=U.readUint32(),Q=U.readUint32(),n=U.readUint32();this.references.push({reference_type:t>>31&1,referenced_size:t&2147483647,subsegment_duration:Q,starts_with_SAP:n>>31&1,SAP_type:n>>28&7,SAP_delta_time:n&268435455})}}write(U){const F=this.earliest_presentation_time>g||this.first_offset>g||this.version===1;this.version=F?1:0,this.size=4*2+2+2+12*this.references.length,this.size+=F?16:8,this.flags=0,this.writeHeader(U),U.writeUint32(this.reference_ID),U.writeUint32(this.timescale),F?(U.writeUint64(this.earliest_presentation_time),U.writeUint64(this.first_offset)):(U.writeUint32(this.earliest_presentation_time),U.writeUint32(this.first_offset)),U.writeUint16(0),U.writeUint16(this.references.length);for(let e=0;e<this.references.length;e++){const t=this.references[e];U.writeUint32(t.reference_type<<31|t.referenced_size),U.writeUint32(t.subsegment_duration),U.writeUint32(t.starts_with_SAP<<31|t.SAP_type<<28|t.SAP_delta_time)}}},me.fourcc="sidx",me),Ce,Rs=(Ce=class extends o{constructor(){super(...arguments),this.box_name="SoundMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.balance=U.readUint16(),U.readUint16()}write(U){this.version=0,this.size=4,this.writeHeader(U),U.writeUint16(this.balance),U.writeUint16(0)}},Ce.fourcc="smhd",Ce),Te,os=(Te=class extends o{constructor(){super(...arguments),this.box_name="ChunkOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let e=0;e<F;e++)this.chunk_offsets.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+4*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length),U.writeUint32Array(this.chunk_offsets)}unpack(U){for(let F=0;F<this.chunk_offsets.length;F++)U[F].offset=this.chunk_offsets[F]}},Te.fourcc="stco",Te),ge,hs=(ge=class extends o{constructor(){super(...arguments),this.box_name="SubtitleMediaHeaderBox"}},ge.fourcc="sthd",ge),De,Vs=(De=class extends o{constructor(){super(...arguments),this.box_name="SampleToChunkBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],this.version===0)for(let e=0;e<F;e++)this.first_chunk.push(U.readUint32()),this.samples_per_chunk.push(U.readUint32()),this.sample_description_index.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+12*this.first_chunk.length,this.writeHeader(U),U.writeUint32(this.first_chunk.length);for(let F=0;F<this.first_chunk.length;F++)U.writeUint32(this.first_chunk[F]),U.writeUint32(this.samples_per_chunk[F]),U.writeUint32(this.sample_description_index[F])}unpack(U){let F=0,e=0;for(let t=0;t<this.first_chunk.length;t++)for(let Q=0;Q<(t+1<this.first_chunk.length?this.first_chunk[t+1]:1/0);Q++){e++;for(let n=0;n<this.samples_per_chunk[t];n++){if(U[F])U[F].description_index=this.sample_description_index[t],U[F].chunk_index=e;else return;F++}}}},De.fourcc="stsc",De),xe,Js=(xe=class extends o{constructor(){super(...arguments),this.box_name="SampleDescriptionBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=1;e<=F;e++){const t=z(U,!0,this.size-(U.getPosition()-this.start));if(t.code===v){let Q;t.type in M.sampleEntry?(Q=new M.sampleEntry[t.type](t.size),Q.hdr_size=t.hdr_size,Q.start=t.start):(R.warn("BoxParser",`Unknown sample entry type: '${t.type}'`),Q=new X(t.size,t.hdr_size,t.start),Q.type=t.type),Q.write===X.prototype.write&&(R.info("BoxParser","SampleEntry "+Q.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),Q.parseDataAndRewind(U)),Q.parse(U),this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=0,this.writeHeader(U),U.writeUint32(this.entries.length),this.size+=4;for(let F=0;F<this.entries.length;F++)this.entries[F].write(U),this.size+=this.entries[F].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},xe.fourcc="stsd",xe),be,Ss=(be=class extends o{constructor(){super(...arguments),this.box_name="SampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.sample_size=U.readUint32(),this.sample_count=U.readUint32();for(let F=0;F<this.sample_count;F++)this.sample_size===0?this.sample_sizes.push(U.readUint32()):this.sample_sizes[F]=this.sample_size}}write(U){let F=!0;if(this.version=0,this.flags=0,this.sample_sizes.length>0){let e=0;for(;e+1<this.sample_sizes.length;)if(this.sample_sizes[e+1]!==this.sample_sizes[0]){F=!1;break}else e++}else F=!1;this.size=8,F||(this.size+=4*this.sample_sizes.length),this.writeHeader(U),F?U.writeUint32(this.sample_sizes[0]):U.writeUint32(0),U.writeUint32(this.sample_sizes.length),F||U.writeUint32Array(this.sample_sizes)}unpack(U){for(let F=0;F<this.sample_sizes.length;F++)U[F].size=this.sample_sizes[F]}},be.fourcc="stsz",be),Me,cs=(Me=class extends o{constructor(){super(...arguments),this.box_name="TimeToSampleBox",this.sample_counts=[],this.sample_deltas=[]}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.sample_counts.length=0,this.sample_deltas.length=0,this.version===0)for(let e=0;e<F;e++){this.sample_counts.push(U.readUint32());let t=U.readInt32();t<0&&(R.warn("BoxParser","File uses negative stts sample delta, using value 1 instead, sync may be lost!"),t=1),this.sample_deltas.push(t)}}write(U){this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let F=0;F<this.sample_counts.length;F++)U.writeUint32(this.sample_counts[F]),U.writeUint32(this.sample_deltas[F])}unpack(U){let F=0;for(let e=0;e<this.sample_counts.length;e++)for(let t=0;t<this.sample_counts[e];t++)F===0?U[F].dts=0:U[F].dts=U[F-1].dts+this.sample_deltas[e],F++}},Me.fourcc="stts",Me),ye,Ws=(ye=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentBaseMediaDecodeTimeBox"}parse(U){this.parseFullHeader(U),this.version===1?this.baseMediaDecodeTime=U.readUint64():this.baseMediaDecodeTime=U.readUint32()}write(U){const F=this.baseMediaDecodeTime>g||this.version===1;this.version=F?1:0,this.size=4,this.size+=F?4:0,this.flags=0,this.writeHeader(U),F?U.writeUint64(this.baseMediaDecodeTime):U.writeUint32(this.baseMediaDecodeTime)}},ye.fourcc="tfdt",ye),Ie,ps=(Ie=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentHeaderBox"}parse(U){this.parseFullHeader(U);let F=0;this.track_id=U.readUint32(),this.size-this.hdr_size>F&&this.flags&Ci?(this.base_data_offset=U.readUint64(),F+=8):this.base_data_offset=0,this.size-this.hdr_size>F&&this.flags&Ti?(this.default_sample_description_index=U.readUint32(),F+=4):this.default_sample_description_index=0,this.size-this.hdr_size>F&&this.flags&gi?(this.default_sample_duration=U.readUint32(),F+=4):this.default_sample_duration=0,this.size-this.hdr_size>F&&this.flags&Di?(this.default_sample_size=U.readUint32(),F+=4):this.default_sample_size=0,this.size-this.hdr_size>F&&this.flags&xi?(this.default_sample_flags=U.readUint32(),F+=4):this.default_sample_flags=0}write(U){this.version=0,this.size=4,this.flags&Ci&&(this.size+=8),this.flags&Ti&&(this.size+=4),this.flags&gi&&(this.size+=4),this.flags&Di&&(this.size+=4),this.flags&xi&&(this.size+=4),this.writeHeader(U),U.writeUint32(this.track_id),this.flags&Ci&&U.writeUint64(this.base_data_offset),this.flags&Ti&&U.writeUint32(this.default_sample_description_index),this.flags&gi&&U.writeUint32(this.default_sample_duration),this.flags&Di&&U.writeUint32(this.default_sample_size),this.flags&xi&&U.writeUint32(this.default_sample_flags)}},Ie.fourcc="tfhd",Ie),we,Es=(we=class extends o{constructor(){super(...arguments),this.box_name="TrackHeaderBox",this.layer=0,this.alternate_group=0}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint32()),U.readUint32Array(2),this.layer=U.readInt16(),this.alternate_group=U.readInt16(),this.volume=U.readInt16()>>8,U.readUint16(),this.matrix=U.readInt32Array(9),this.width=U.readUint32(),this.height=U.readUint32()}write(U){const F=this.modification_time>g||this.creation_time>g||this.duration>g||this.version===1;this.version=F?1:0,this.size=5*4+15*4,this.size+=F?3*4:0,this.flags=this.flags??3,this.writeHeader(U),F?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint32(this.duration)),U.writeUint32Array([0,0]),U.writeInt16(this.layer),U.writeInt16(this.alternate_group),U.writeInt16(this.volume<<8),U.writeInt16(0),U.writeInt32Array(this.matrix),U.writeUint32(this.width),U.writeUint32(this.height)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"track_id: "+this.track_id),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"layer: "+this.layer),U.log(U.indent+"alternate_group: "+this.alternate_group),U.log(U.indent+"width: "+this.width),U.log(U.indent+"height: "+this.height)}},we.fourcc="tkhd",we),ve,Bn=(ve=class extends o{constructor(){super(...arguments),this.box_name="TrackExtendsBox"}parse(U){this.parseFullHeader(U),this.track_id=U.readUint32(),this.default_sample_description_index=U.readUint32(),this.default_sample_duration=U.readUint32(),this.default_sample_size=U.readUint32(),this.default_sample_flags=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4*5,this.writeHeader(U),U.writeUint32(this.track_id),U.writeUint32(this.default_sample_description_index),U.writeUint32(this.default_sample_duration),U.writeUint32(this.default_sample_size),U.writeUint32(this.default_sample_flags)}},ve.fourcc="trex",ve),_e,Ns=(_e=class extends o{constructor(){super(...arguments),this.box_name="TrackRunBox",this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[]}parse(U){this.parseFullHeader(U);let F=0;if(this.sample_count=U.readUint32(),F+=4,this.size-this.hdr_size>F&&this.flags&rU?(this.data_offset=U.readInt32(),F+=4):this.data_offset=0,this.size-this.hdr_size>F&&this.flags&bi?(this.first_sample_flags=U.readUint32(),F+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>F)for(let e=0;e<this.sample_count;e++)this.flags&RU&&(this.sample_duration[e]=U.readUint32()),this.flags&oU&&(this.sample_size[e]=U.readUint32()),this.flags&hU&&(this.sample_flags[e]=U.readUint32()),this.flags&VU&&(this.version===0?this.sample_composition_time_offset[e]=U.readUint32():this.sample_composition_time_offset[e]=U.readInt32())}write(U){this.size=4,this.flags&rU&&(this.size+=4),this.flags&bi&&(this.size+=4),this.flags&RU&&(this.size+=4*this.sample_duration.length),this.flags&oU&&(this.size+=4*this.sample_size.length),this.flags&hU&&(this.size+=4*this.sample_flags.length),this.flags&VU&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(U),U.writeUint32(this.sample_count),this.flags&rU&&(this.data_offset_position=U.getPosition(),U.writeInt32(this.data_offset)),this.flags&bi&&U.writeUint32(this.first_sample_flags);for(let F=0;F<this.sample_count;F++)this.flags&RU&&U.writeUint32(this.sample_duration[F]),this.flags&oU&&U.writeUint32(this.sample_size[F]),this.flags&hU&&U.writeUint32(this.sample_flags[F]),this.flags&VU&&(this.version===0?U.writeUint32(this.sample_composition_time_offset[F]):U.writeInt32(this.sample_composition_time_offset[F]))}},_e.fourcc="trun",_e),He,Zs=(He=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrlBox"}parse(U){this.parseFullHeader(U),this.flags!==1&&(this.location=U.readCString())}write(U){this.version=0,this.location?(this.flags=0,this.size=this.location.length+1):(this.flags=1,this.size=0),this.writeHeader(U),this.location&&U.writeCString(this.location)}},He.fourcc="url ",He),ze,ks=(ze=class extends o{constructor(){super(...arguments),this.box_name="VideoMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.graphicsmode=U.readUint16(),this.opcolor=U.readUint16Array(3)}write(U){this.version=0,this.size=8,this.writeHeader(U),U.writeUint16(this.graphicsmode),U.writeUint16Array(this.opcolor)}},ze.fourcc="vmhd",ze),en=class{constructor(i,U,F){this.grouping_type=i,this.grouping_type_parameter=U,this.sbgp=F,this.last_sample_in_run=-1,this.entry_index=-1}},$B=class O{constructor(U,F=!0){this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.moovStartSent=!1,this.readySent=!1,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.sidxSent=!1,this.items=[],this.entity_groups=[],this.itemsDataSize=0,this.lastMoofIndex=0,this.samplesDataSize=0,this.lastBoxStartPosition=0,this.nextParsePosition=0,this.discardMdatData=!0,this.discardMdatData=F,U?(this.stream=U,this.parse()):this.stream=new yi,this.stream.isofile=this}setSegmentOptions(U,F,e){const{sizePerSegment:t=Number.MAX_SAFE_INTEGER,rapAlignement:Q=!0}=e;let n=e.nbSamples??e.nbSamplesPerFragment??1e3;const s=e.nbSamplesPerFragment??n;if(n<=0||s<=0||t<=0){R.error("ISOFile",`Invalid segment options: nbSamples=${n}, nbSamplesPerFragment=${s}, sizePerSegment=${t}`);return}if(n<s&&(R.warn("ISOFile",`nbSamples (${n}) is less than nbSamplesPerFragment (${s}), setting nbSamples to nbSamplesPerFragment`),n=s),this.fragmentedTracks.some(B=>B.nb_samples!==n)){R.error("ISOFile",`Cannot set segment options for track ${U}: nbSamples (${n}) does not match existing tracks`);return}const l=this.getTrackById(U);if(l){const B={id:U,user:F,trak:l,segmentStream:void 0,nb_samples:n,nb_samples_per_fragment:s,size_per_segment:t,rapAlignement:Q,state:{lastFragmentSampleNumber:0,lastSegmentSampleNumber:0,accumulatedSize:0}};this.fragmentedTracks.push(B),l.nextSample=0}this.discardMdatData&&R.warn("ISOFile","Segmentation options set but discardMdatData is true, samples will not be segmented")}unsetSegmentOptions(U){let F=-1;for(let e=0;e<this.fragmentedTracks.length;e++)this.fragmentedTracks[e].id===U&&(F=e);F>-1&&this.fragmentedTracks.splice(F,1)}setExtractionOptions(U,F,{nbSamples:e=1e3}={}){const t=this.getTrackById(U);t&&(this.extractedTracks.push({id:U,user:F,trak:t,nb_samples:e,samples:[]}),t.nextSample=0),this.discardMdatData&&R.warn("ISOFile","Extraction options set but discardMdatData is true, samples will not be extracted")}unsetExtractionOptions(U){let F=-1;for(let e=0;e<this.extractedTracks.length;e++)this.extractedTracks[e].id===U&&(F=e);F>-1&&this.extractedTracks.splice(F,1)}parse(){if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else{this.saveParsePosition&&this.saveParsePosition();const F=z(this.stream,!1);if(F.code===L)if(this.processIncompleteBox){if(this.processIncompleteBox(F))continue;return}else return;else if(F.code===v){const e=F.box;if(this.boxes.push(e),e.type==="uuid")this[e.uuid]!==void 0&&R.warn("ISOFile","Duplicate Box of uuid: "+e.uuid+", overriding previous occurrence"),this[e.uuid]=e;else switch(e.type){case"mdat":this.mdats.push(e),this.transferMdatData(e);break;case"moof":this.moofs.push(e);break;case"free":case"skip":break;case"moov":this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0);default:this[e.type]!==void 0?Array.isArray(this[e.type+"s"])?(R.info("ISOFile",`Found multiple boxes of type ${e.type} in ISOFile, adding to array`),this[e.type+"s"].push(e)):(R.warn("ISOFile",`Found multiple boxes of type ${e.type} but no array exists. Creating array dynamically.`),this[e.type+"s"]=[this[e.type],e]):(this[e.type]=e,Array.isArray(this[e.type+"s"])&&this[e.type+"s"].push(e));break}this.updateUsedBytes&&this.updateUsedBytes(e,F)}else if(F.code===Yn){R.error("ISOFile",`Invalid data found while parsing box of type '${F.type}' at position ${F.start}. Aborting parsing.`,this);break}}}checkBuffer(U){if(!U)throw new Error("Buffer must be defined and non empty");return U.byteLength===0?(R.warn("ISOFile","Ignoring empty buffer (fileStart: "+U.fileStart+")"),this.stream.logBufferLevel(),!1):(R.info("ISOFile","Processing buffer (fileStart: "+U.fileStart+")"),U.usedBytes=0,this.stream.insertBuffer(U),this.stream.logBufferLevel(),this.stream.initialized()?!0:(R.warn("ISOFile","Not ready to start parsing"),!1))}appendBuffer(U,F){let e;if(this.checkBuffer(U))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(F),this.nextSeekPosition?(e=this.nextSeekPosition,this.nextSeekPosition=void 0):e=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(e=this.stream.getEndFilePositionAfter(e))):this.nextParsePosition?e=this.nextParsePosition:e=0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(R.info("ISOFile","Done processing buffer (fileStart: "+U.fileStart+") - next buffer to fetch should have a fileStart position of "+e),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),e}getFragmentDuration(){const U=this.getBox("mvex");if(!U)return;if(U.mehd)return{num:U.mehd.fragment_duration,den:this.moov.mvhd.timescale};const F=this.getBoxes("trak",!1);let e={num:0,den:1};for(const t of F){const Q=t.samples_duration,n=t.mdia.mdhd.timescale;Q&&n&&Q/n>e.num/e.den&&(e={num:Q,den:n})}return e}getInfo(){if(!this.moov)return{hasMoov:!1,mime:""};const U=new Date("1904-01-01T00:00:00Z").getTime(),F=this.getBox("mvex")!==void 0,e={hasMoov:!0,duration:this.moov.mvhd.duration,timescale:this.moov.mvhd.timescale,isFragmented:F,fragment_duration:this.getFragmentDuration(),isProgressive:this.isProgressive,hasIOD:this.moov.iods!==void 0,brands:[this.ftyp.major_brand].concat(this.ftyp.compatible_brands),created:new Date(U+this.moov.mvhd.creation_time*1e3),modified:new Date(U+this.moov.mvhd.modification_time*1e3),tracks:[],audioTracks:[],videoTracks:[],subtitleTracks:[],metadataTracks:[],hintTracks:[],otherTracks:[],mime:""};for(let t=0;t<this.moov.traks.length;t++){const Q=this.moov.traks[t],n=Q.mdia.minf.stbl.stsd.entries[0],s=Q.samples_size,l=Q.mdia.mdhd.timescale,B=Q.samples_duration,a=s*8*l/B,r={samples_duration:B,bitrate:a,size:s,timescale:l,alternate_group:Q.tkhd.alternate_group,codec:n.getCodec(),created:new Date(U+Q.tkhd.creation_time*1e3),cts_shift:Q.mdia.minf.stbl.cslg,duration:Q.mdia.mdhd.duration,id:Q.tkhd.track_id,kind:Q.udta&&Q.udta.kinds.length?Q.udta.kinds[0]:{schemeURI:"",value:""},language:Q.mdia.elng?Q.mdia.elng.extended_language:Q.mdia.mdhd.languageString,layer:Q.tkhd.layer,matrix:Q.tkhd.matrix,modified:new Date(U+Q.tkhd.modification_time*1e3),movie_duration:Q.tkhd.duration,movie_timescale:e.timescale,name:Q.mdia.hdlr.name,nb_samples:Q.samples.length,references:[],track_height:Q.tkhd.height/65536,track_width:Q.tkhd.width/65536,volume:Q.tkhd.volume};if(e.tracks.push(r),Q.tref)for(let h=0;h<Q.tref.references.length;h++)r.references.push({type:Q.tref.references[h].type,track_ids:Q.tref.references[h].track_ids});Q.edts!==void 0&&Q.edts.elst!==void 0&&(r.edits=Q.edts.elst.entries),n instanceof y?(r.type="audio",e.audioTracks.push(r),r.audio={sample_rate:n.getSampleRate(),channel_count:n.getChannelCount(),sample_size:n.getSampleSize()}):n instanceof m?(r.type="video",e.videoTracks.push(r),r.video={width:n.getWidth(),height:n.getHeight()}):n instanceof q?(r.type="subtitles",e.subtitleTracks.push(r)):n instanceof bn?(r.type="metadata",e.hintTracks.push(r)):n instanceof QU?(r.type="metadata",e.metadataTracks.push(r)):(r.type="metadata",e.otherTracks.push(r))}e.videoTracks&&e.videoTracks.length>0?e.mime+='video/mp4; codecs="':e.audioTracks&&e.audioTracks.length>0?e.mime+='audio/mp4; codecs="':e.mime+='application/mp4; codecs="';for(let t=0;t<e.tracks.length;t++)t!==0&&(e.mime+=","),e.mime+=e.tracks[t].codec;return e.mime+='"; profiles="',e.mime+=this.ftyp.compatible_brands.join(),e.mime+='"',e}setNextSeekPositionFromSample(U){U&&(this.nextSeekPosition?this.nextSeekPosition=Math.min(U.offset+U.alreadyRead,this.nextSeekPosition):this.nextSeekPosition=U.offset+U.alreadyRead)}processSamples(U){if(this.sampleProcessingStarted){if(this.isFragmentationInitialized&&this.onSegment!==void 0){const F=new Set;for(;F.size<this.fragmentedTracks.length&&this.fragmentedTracks.some(e=>e.trak.nextSample<e.trak.samples.length)&&this.sampleProcessingStarted;)for(const e of this.fragmentedTracks){const t=e.trak;if(!F.has(e.id)){const Q=t.nextSample<t.samples.length?this.getSample(t,t.nextSample):void 0;if(!Q){this.setNextSeekPositionFromSample(t.samples[t.nextSample]),F.add(e.id);continue}e.state.accumulatedSize+=Q.size;const n=t.nextSample+1,s=n-e.state.lastFragmentSampleNumber>e.nb_samples_per_fragment,l=n-e.state.lastSegmentSampleNumber>e.nb_samples;let B=s||n%e.nb_samples_per_fragment===0,a=l||n%e.nb_samples===0,r=e.state.accumulatedSize>=e.size_per_segment;const h=!e.rapAlignement||Q.is_sync,J=U||t.nextSample+1>=t.samples.length;if(J&&!h&&R.warn("ISOFile","Flushing track #"+e.id+" at sample #"+t.nextSample+" which is not a RAP, this may lead to playback issues"),B=B&&h,a=a&&h,r=r&&h,B||r||J){s?R.warn("ISOFile","Fragment on track #"+e.id+" is overdue, creating it with samples ["+e.state.lastFragmentSampleNumber+", "+t.nextSample+"]"):R.debug("ISOFile","Creating media fragment on track #"+e.id+" for samples ["+e.state.lastFragmentSampleNumber+", "+t.nextSample+"]");const E=this.createFragment(e.id,e.state.lastFragmentSampleNumber,t.nextSample,e.segmentStream);if(E)e.segmentStream=E,e.state.lastFragmentSampleNumber=t.nextSample+1;else{F.add(e.id);continue}}(a||r||J)&&(l?R.warn("ISOFile","Segment on track #"+e.id+" is overdue, sending it with samples ["+Math.max(0,t.nextSample-e.nb_samples)+", "+(t.nextSample-1)+"]"):R.info("ISOFile","Sending fragmented data on track #"+e.id+" for samples ["+Math.max(0,t.nextSample-e.nb_samples)+", "+(t.nextSample-1)+"]"),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(e.id,e.user,e.segmentStream.buffer,t.nextSample+1,U||t.nextSample+1>=t.samples.length),e.segmentStream=void 0,e.state.accumulatedSize=0,e.state.lastSegmentSampleNumber=t.nextSample+1),t.nextSample++}}}if(this.onSamples!==void 0)for(let F=0;F<this.extractedTracks.length;F++){const e=this.extractedTracks[F],t=e.trak;for(;t.nextSample<t.samples.length&&this.sampleProcessingStarted;){R.debug("ISOFile","Exporting on track #"+e.id+" sample #"+t.nextSample);const Q=this.getSample(t,t.nextSample);if(Q)t.nextSample++,e.samples.push(Q);else{this.setNextSeekPositionFromSample(t.samples[t.nextSample]);break}if((t.nextSample%e.nb_samples===0||t.nextSample>=t.samples.length)&&(R.debug("ISOFile","Sending samples on track #"+e.id+" for sample "+t.nextSample),this.onSamples&&this.onSamples(e.id,e.user,e.samples),e.samples=[],e!==this.extractedTracks[F]))break}}}}getBox(U){const F=this.getBoxes(U,!0);return F.length?F[0]:void 0}getBoxes(U,F){const e=[],t=Q=>{Q instanceof V&&Q.type&&Q.type===U&&e.push(Q);const n=[];Q.boxes&&n.push(...Q.boxes),Q.entries&&n.push(...Q.entries),Q.item_infos&&n.push(...Q.item_infos),Q.references&&n.push(...Q.references);for(const s of n){if(e.length&&F)return;t(s)}};return t(this),e}getTrackSamplesInfo(U){const F=this.getTrackById(U);if(F)return F.samples}getTrackSample(U,F){const e=this.getTrackById(U);return this.getSample(e,F)}releaseUsedSamples(U,F){let e=0;const t=this.getTrackById(U);t.lastValidSample||(t.lastValidSample=0);for(let Q=t.lastValidSample;Q<F;Q++)e+=this.releaseSample(t,Q);R.info("ISOFile","Track #"+U+" released samples up to "+F+" (released size: "+e+", remaining: "+this.samplesDataSize+")"),t.lastValidSample=F}start(){this.sampleProcessingStarted=!0,this.processSamples(!1)}stop(){this.sampleProcessingStarted=!1}flush(){R.info("ISOFile","Flushing remaining samples"),this.updateSampleLists(),this.processSamples(!0),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0)}seekTrack(U,F,e){let t=0,Q=0,n;if(e.samples.length===0)return R.info("ISOFile","No sample in track, cannot seek! Using time "+R.getDurationString(0,1)+" and offset: 0"),{offset:0,time:0};for(let l=0;l<e.samples.length;l++){const B=e.samples[l];if(l===0)Q=0,n=B.timescale;else if(B.cts>U*B.timescale){Q=l-1;break}F&&B.is_sync&&(t=l)}for(F&&(Q=t),U=e.samples[Q].cts,e.nextSample=Q;e.samples[Q].alreadyRead===e.samples[Q].size&&e.samples[Q+1];)Q++;const s=e.samples[Q].offset+e.samples[Q].alreadyRead;return R.info("ISOFile","Seeking to "+(F?"RAP":"")+" sample #"+e.nextSample+" on track "+e.tkhd.track_id+", time "+R.getDurationString(U,n)+" and offset: "+s),{offset:s,time:U/n}}getTrackDuration(U){if(!U.samples)return 1/0;const F=U.samples[U.samples.length-1];return(F.cts+F.duration)/F.timescale}seek(U,F){const e=this.moov;let t={offset:1/0,time:1/0};if(this.moov){for(let Q=0;Q<e.traks.length;Q++){const n=e.traks[Q];if(U>this.getTrackDuration(n))continue;const s=this.seekTrack(U,F,n);s.offset<t.offset&&(t.offset=s.offset),s.time<t.time&&(t.time=s.time)}return R.info("ISOFile","Seeking at time "+R.getDurationString(t.time,1)+" needs a buffer with a fileStart position of "+t.offset),t.offset===1/0?t={offset:this.nextParsePosition,time:0}:t.offset=this.stream.getEndFilePositionAfter(t.offset),R.info("ISOFile","Adjusted seek position (after checking data already in buffer): "+t.offset),t}else throw new Error("Cannot seek: moov not received!")}equal(U){let F=0;for(;F<this.boxes.length&&F<U.boxes.length;){const e=this.boxes[F],t=U.boxes[F];if(!Xn(e,t))return!1;F++}return!0}write(U){for(let F=0;F<this.boxes.length;F++)this.boxes[F].write(U)}createFragment(U,F,e,t){const Q=[];for(let a=F;a<=e;a++){const r=this.getTrackById(U),h=this.getSample(r,a);if(!h){this.setNextSeekPositionFromSample(r.samples[a]);return}Q.push(h)}const n=t||new w,s=this.createMoof(Q);s.write(n),s.trafs[0].truns[0].data_offset=s.size+8,R.debug("MP4Box","Adjusting data_offset with new value "+s.trafs[0].truns[0].data_offset),n.adjustUint32(s.trafs[0].truns[0].data_offset_position,s.trafs[0].truns[0].data_offset);const l=new Ii;l.stream=new yi;let B=0;for(const a of Q)if(a.data){const r=A.fromArrayBuffer(a.data.buffer,B);l.stream.insertBuffer(r),B+=a.data.byteLength}return l.write(n),n}static writeInitializationSegment(U,F,e){var n;R.debug("ISOFile","Generating initialization segment");const t=new w;U.write(t);const Q=F.addBox(new ln);if(e){const s=Q.addBox(new ss);s.fragment_duration=e}for(let s=0;s<F.traks.length;s++){const l=Q.addBox(new Bn);l.track_id=F.traks[s].tkhd.track_id,l.default_sample_description_index=1,l.default_sample_duration=((n=F.traks[s].samples[0])==null?void 0:n.duration)??0,l.default_sample_size=0,l.default_sample_flags=65536}return F.write(t),t.buffer}save(U){const F=new w;return F.isofile=this,this.write(F),F.save(U)}getBuffer(){const U=new w;return U.isofile=this,this.write(U),U}initializeSegmentation(){var F,e;this.onSegment||R.warn("MP4Box","No segmentation callback set!"),this.isFragmentationInitialized||(this.isFragmentationInitialized=!0,this.resetTables());const U=new sn;U.addBox(this.moov.mvhd);for(let t=0;t<this.fragmentedTracks.length;t++){const Q=this.getTrackById(this.fragmentedTracks[t].id);if(!Q){R.warn("ISOFile",`Track with id ${this.fragmentedTracks[t].id} not found, skipping fragmentation initialization`);continue}U.addBox(Q)}return{tracks:U.traks.map((t,Q)=>({id:t.tkhd.track_id,user:this.fragmentedTracks[Q].user})),buffer:O.writeInitializationSegment(this.ftyp,U,(e=(F=this.moov)==null?void 0:F.mvex)==null?void 0:e.mehd.fragment_duration)}}resetTables(){this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0;for(let U=0;U<this.moov.traks.length;U++){const F=this.moov.traks[U];F.tkhd.duration=0,F.mdia.mdhd.duration=0;const e=F.mdia.minf.stbl.stco||F.mdia.minf.stbl.co64;e.chunk_offsets=[];const t=F.mdia.minf.stbl.stsc;t.first_chunk=[],t.samples_per_chunk=[],t.sample_description_index=[];const Q=F.mdia.minf.stbl.stsz||F.mdia.minf.stbl.stz2;Q.sample_sizes=[];const n=F.mdia.minf.stbl.stts;n.sample_counts=[],n.sample_deltas=[];const s=F.mdia.minf.stbl.ctts;s&&(s.sample_counts=[],s.sample_offsets=[]);const l=F.mdia.minf.stbl.stss,B=F.mdia.minf.stbl.boxes.indexOf(l);B!==-1&&(F.mdia.minf.stbl.boxes[B]=void 0)}}static initSampleGroups(U,F,e,t,Q){F&&(F.sample_groups_info=[]),U.sample_groups_info||(U.sample_groups_info=[]);for(let n=0;n<e.length;n++){const s=e[n].grouping_type+"/"+e[n].grouping_type_parameter,l=new en(e[n].grouping_type,e[n].grouping_type_parameter,e[n]);F&&(F.sample_groups_info[s]=l),U.sample_groups_info[s]||(U.sample_groups_info[s]=l);for(let B=0;B<t.length;B++)t[B].grouping_type===e[n].grouping_type&&(l.description=t[B],l.description.used=!0);if(Q)for(let B=0;B<Q.length;B++)Q[B].grouping_type===e[n].grouping_type&&(l.fragment_description=Q[B],l.fragment_description.used=!0,l.is_fragment=!0)}if(F){if(Q){for(let n=0;n<Q.length;n++)if(!Q[n].used&&Q[n].version>=2){const s=Q[n].grouping_type+"/0",l=new en(Q[n].grouping_type,0);l.is_fragment=!0,F.sample_groups_info[s]||(F.sample_groups_info[s]=l)}}}else for(let n=0;n<t.length;n++)if(!t[n].used&&t[n].version>=2){const s=t[n].grouping_type+"/0",l=new en(t[n].grouping_type,0);U.sample_groups_info[s]||(U.sample_groups_info[s]=l)}}static setSampleGroupProperties(U,F,e,t){F.sample_groups=[];for(const Q in t)if(F.sample_groups[Q]={grouping_type:t[Q].grouping_type,grouping_type_parameter:t[Q].grouping_type_parameter},e>=t[Q].last_sample_in_run&&(t[Q].last_sample_in_run<0&&(t[Q].last_sample_in_run=0),t[Q].entry_index++,t[Q].entry_index<=t[Q].sbgp.entries.length-1&&(t[Q].last_sample_in_run+=t[Q].sbgp.entries[t[Q].entry_index].sample_count)),t[Q].entry_index<=t[Q].sbgp.entries.length-1?F.sample_groups[Q].group_description_index=t[Q].sbgp.entries[t[Q].entry_index].group_description_index:F.sample_groups[Q].group_description_index=-1,F.sample_groups[Q].group_description_index!==0){let n;if(t[Q].fragment_description?n=t[Q].fragment_description:n=t[Q].description,F.sample_groups[Q].group_description_index>0){let s;F.sample_groups[Q].group_description_index>65535?s=(F.sample_groups[Q].group_description_index>>16)-1:s=F.sample_groups[Q].group_description_index-1,n&&s>=0&&(F.sample_groups[Q].description=n.entries[s])}else n&&n.version>=2&&n.default_group_description_index>0&&(F.sample_groups[Q].description=n.entries[n.default_group_description_index-1])}}static process_sdtp(U,F,e){F&&(U?(F.is_leading=U.is_leading[e],F.depends_on=U.sample_depends_on[e],F.is_depended_on=U.sample_is_depended_on[e],F.has_redundancy=U.sample_has_redundancy[e]):(F.is_leading=0,F.depends_on=0,F.is_depended_on=0,F.has_redundancy=0))}buildSampleLists(){for(let U=0;U<this.moov.traks.length;U++)this.buildTrakSampleLists(this.moov.traks[U])}buildTrakSampleLists(U){let F,e,t,Q,n,s;U.samples=[],U.samples_duration=0,U.samples_size=0;const l=U.mdia.minf.stbl.stco||U.mdia.minf.stbl.co64,B=U.mdia.minf.stbl.stsc,a=U.mdia.minf.stbl.stsz||U.mdia.minf.stbl.stz2,r=U.mdia.minf.stbl.stts,h=U.mdia.minf.stbl.ctts,J=U.mdia.minf.stbl.stss,E=U.mdia.minf.stbl.stsd,S=U.mdia.minf.stbl.subs,Z=U.mdia.minf.stbl.stdp,u=U.mdia.minf.stbl.sbgps,f=U.mdia.minf.stbl.sgpds;let k=-1,b=-1,D=-1,c=-1,_=0,T=0,I=0;if(O.initSampleGroups(U,void 0,u,f),!(typeof a>"u")){for(F=0;F<a.sample_sizes.length;F++){const W={number:F,track_id:U.tkhd.track_id,timescale:U.mdia.mdhd.timescale,alreadyRead:0,size:a.sample_sizes[F]};U.samples[F]=W,U.samples_size+=W.size,F===0?(t=1,e=0,W.chunk_index=t,W.chunk_run_index=e,s=B.samples_per_chunk[e],n=0,e+1<B.first_chunk.length?Q=B.first_chunk[e+1]-1:Q=1/0):F<s?(W.chunk_index=t,W.chunk_run_index=e):(t++,W.chunk_index=t,n=0,t<=Q||(e++,e+1<B.first_chunk.length?Q=B.first_chunk[e+1]-1:Q=1/0),W.chunk_run_index=e,s+=B.samples_per_chunk[e]),W.description_index=B.sample_description_index[W.chunk_run_index]-1,W.description=E.entries[W.description_index],W.offset=l.chunk_offsets[W.chunk_index-1]+n,n+=W.size,F>k&&(b++,k<0&&(k=0),k+=r.sample_counts[b]),F>0?(U.samples[F-1].duration=r.sample_deltas[b],U.samples_duration+=U.samples[F-1].duration,W.dts=U.samples[F-1].dts+U.samples[F-1].duration):W.dts=0,h?(F>=D&&(c++,D<0&&(D=0),D+=h.sample_counts[c]),W.cts=U.samples[F].dts+h.sample_offsets[c]):W.cts=W.dts,J?(F===J.sample_numbers[_]-1?(W.is_sync=!0,_++):(W.is_sync=!1,W.degradation_priority=0),S&&S.entries[T].sample_delta+I===F+1&&(W.subsamples=S.entries[T].subsamples,I+=S.entries[T].sample_delta,T++)):W.is_sync=!0,O.process_sdtp(U.mdia.minf.stbl.sdtp,W,W.number),Z?W.degradation_priority=Z.priority[F]:W.degradation_priority=0,S&&S.entries[T].sample_delta+I===F&&(W.subsamples=S.entries[T].subsamples,I+=S.entries[T].sample_delta),(u.length>0||f.length>0)&&O.setSampleGroupProperties(U,W,F,U.sample_groups_info)}F>0&&(U.samples[F-1].duration=Math.max(U.mdia.mdhd.duration-U.samples[F-1].dts,0),U.samples_duration+=U.samples[F-1].duration)}}updateSampleLists(){let U,F,e,t,Q;if(this.moov!==void 0)for(;this.lastMoofIndex<this.moofs.length;){const n=this.moofs[this.lastMoofIndex];if(this.lastMoofIndex++,n.type==="moof"){const s=n;for(let l=0;l<s.trafs.length;l++){const B=s.trafs[l],a=this.getTrackById(B.tfhd.track_id),r=this.getTrexById(B.tfhd.track_id);B.tfhd.flags&Ti?U=B.tfhd.default_sample_description_index:U=r?r.default_sample_description_index:1,B.tfhd.flags&gi?F=B.tfhd.default_sample_duration:F=r?r.default_sample_duration:0,B.tfhd.flags&Di?e=B.tfhd.default_sample_size:e=r?r.default_sample_size:0,B.tfhd.flags&xi?t=B.tfhd.default_sample_flags:t=r?r.default_sample_flags:0,B.sample_number=0,B.sbgps.length>0&&O.initSampleGroups(a,B,B.sbgps,a.mdia.minf.stbl.sgpds,B.sgpds);for(let h=0;h<B.truns.length;h++){const J=B.truns[h];for(let E=0;E<J.sample_count;E++){const S=U-1;let Z=t;J.flags&hU?Z=J.sample_flags[E]:E===0&&J.flags&bi&&(Z=J.first_sample_flags);let u=e;J.flags&oU&&(u=J.sample_size[E]),a.samples_size+=u;let f=F;J.flags&RU&&(f=J.sample_duration[E]),a.samples_duration+=f;let k;a.first_traf_merged||E>0?k=a.samples[a.samples.length-1].dts+a.samples[a.samples.length-1].duration:(B.tfdt?k=B.tfdt.baseMediaDecodeTime:k=0,a.first_traf_merged=!0);let b=k;J.flags&VU&&(b=k+J.sample_composition_time_offset[E]);const D=!!(B.tfhd.flags&Ci),c=!!(B.tfhd.flags&Cn),_=!!(J.flags&rU);let T=0;D?T=B.tfhd.base_data_offset:c||h===0?T=s.start:T=Q;let I;h===0&&E===0?_?I=T+J.data_offset:I=T:I=Q,Q=I+u;const W=B.sample_number;B.sample_number++;const UU={cts:b,description_index:S,description:a.mdia.minf.stbl.stsd.entries[S],dts:k,duration:f,moof_number:this.lastMoofIndex,number_in_traf:W,number:a.samples.length,offset:I,size:u,timescale:a.mdia.mdhd.timescale,track_id:a.tkhd.track_id,is_sync:!(Z>>16&1),is_leading:Z>>26&3,depends_on:Z>>24&3,is_depended_on:Z>>22&3,has_redundancy:Z>>20&3,degradation_priority:Z&65535};B.first_sample_index=a.samples.length,a.samples.push(UU),(B.sbgps.length>0||B.sgpds.length>0||a.mdia.minf.stbl.sbgps.length>0||a.mdia.minf.stbl.sgpds.length>0)&&O.setSampleGroupProperties(a,UU,UU.number_in_traf,B.sample_groups_info)}}if(B.subs){a.has_fragment_subsamples=!0;let h=B.first_sample_index;for(let J=0;J<B.subs.entries.length;J++){h+=B.subs.entries[J].sample_delta;const E=a.samples[h-1];E.subsamples=B.subs.entries[J].subsamples}}}}}}getSample(U,F){const e=U.samples[F];if(this.moov){if(!e.data)e.data=new Uint8Array(e.size),e.alreadyRead=0,this.samplesDataSize+=e.size,R.debug("ISOFile","Allocating sample #"+F+" on track #"+U.tkhd.track_id+" of size "+e.size+" (total: "+this.samplesDataSize+")");else if(e.alreadyRead===e.size)return e;for(;;){let t=this.stream,Q=t.findPosition(!0,e.offset+e.alreadyRead,!1),n,s;if(Q>-1)n=t.buffers[Q],s=n.fileStart;else for(const l of this.mdats){if(!l.stream){R.debug("ISOFile","mdat stream not yet fully read for #"+this.mdats.indexOf(l)+" mdat");continue}if(Q=l.stream.findPosition(!0,e.offset+e.alreadyRead-l.start-l.hdr_size,!1),Q>-1){t=l.stream,n=l.stream.buffers[Q],s=l.start+l.hdr_size+n.fileStart;break}}if(n){const l=n.byteLength-(e.offset+e.alreadyRead-s);if(e.size-e.alreadyRead<=l)return R.debug("ISOFile","Getting sample #"+F+" data (alreadyRead: "+e.alreadyRead+" offset: "+(e.offset+e.alreadyRead-s)+" read size: "+(e.size-e.alreadyRead)+" full size: "+e.size+")"),w.memcpy(e.data.buffer,e.alreadyRead,n,e.offset+e.alreadyRead-s,e.size-e.alreadyRead),n.usedBytes+=e.size-e.alreadyRead,t.logBufferLevel(),e.alreadyRead=e.size,e;if(l===0)return;R.debug("ISOFile","Getting sample #"+F+" partial data (alreadyRead: "+e.alreadyRead+" offset: "+(e.offset+e.alreadyRead-s)+" read size: "+l+" full size: "+e.size+")"),w.memcpy(e.data.buffer,e.alreadyRead,n,e.offset+e.alreadyRead-s,l),e.alreadyRead+=l,n.usedBytes+=l,t.logBufferLevel()}else return}}}releaseSample(U,F){const e=U.samples[F];return e.data?(this.samplesDataSize-=e.size,e.data=void 0,e.alreadyRead=0,e.size):0}getAllocatedSampleDataSize(){return this.samplesDataSize}getCodecs(){let U="";for(let F=0;F<this.moov.traks.length;F++){const e=this.moov.traks[F];F>0&&(U+=","),U+=e.mdia.minf.stbl.stsd.entries[0].getCodec()}return U}getTrexById(U){if(!(!this.moov||!this.moov.mvex))for(let F=0;F<this.moov.mvex.trexs.length;F++){const e=this.moov.mvex.trexs[F];if(e.track_id===U)return e}}getTrackById(U){if(this.moov)for(let F=0;F<this.moov.traks.length;F++){const e=this.moov.traks[F];if(e.tkhd.track_id===U)return e}}flattenItemInfo(){const U=this.items,F=this.entity_groups,e=this.meta;if(!(!e||!e.hdlr||!e.iinf)){for(let t=0;t<e.iinf.item_infos.length;t++){const Q=e.iinf.item_infos[t].item_ID;U[Q]={id:Q,name:e.iinf.item_infos[t].item_name,ref_to:[],content_type:e.iinf.item_infos[t].content_type,content_encoding:e.iinf.item_infos[t].content_encoding,item_uri_type:e.iinf.item_infos[t].item_uri_type,type:e.iinf.item_infos[t].item_type?e.iinf.item_infos[t].item_type:"mime",protection:e.iinf.item_infos[t].item_protection_index>0?e.ipro.protections[e.iinf.item_infos[t].item_protection_index-1]:void 0}}if(e.grpl)for(let t=0;t<e.grpl.boxes.length;t++){const Q=e.grpl.boxes[t];F[Q.group_id]={id:Q.group_id,entity_ids:Q.entity_ids,type:Q.type}}if(e.iloc)for(let t=0;t<e.iloc.items.length;t++){const Q=e.iloc.items[t],n=U[Q.item_ID];Q.data_reference_index!==0&&(R.warn("Item storage with reference to other files: not supported"),n.source=e.dinf.boxes[Q.data_reference_index-1]),n.extents=[],n.size=0;for(let s=0;s<Q.extents.length;s++)n.extents[s]={offset:Q.extents[s].extent_offset+Q.base_offset,length:Q.extents[s].extent_length,alreadyRead:0},Q.construction_method===1&&(n.extents[s].offset+=e.idat.start+e.idat.hdr_size),n.size+=n.extents[s].length}if(e.pitm&&(U[e.pitm.item_id].primary=!0),e.iref)for(let t=0;t<e.iref.references.length;t++){const Q=e.iref.references[t];for(let n=0;n<Q.references.length;n++)U[Q.from_item_ID].ref_to.push({type:Q.type,id:Q.references[n]})}if(e.iprp)for(let t=0;t<e.iprp.ipmas.length;t++){const Q=e.iprp.ipmas[t];for(let n=0;n<Q.associations.length;n++){const s=Q.associations[n],l=U[s.id]??F[s.id];if(l){l.properties===void 0&&(l.properties={boxes:[]});for(let B=0;B<s.props.length;B++){const a=s.props[B];if(a.property_index>0&&a.property_index-1<e.iprp.ipco.boxes.length){const r=e.iprp.ipco.boxes[a.property_index-1];l.properties[r.type]=r,l.properties.boxes.push(r)}}}}}}}getItem(U){if(!this.meta)return;const F=this.items[U];if(!F.data&&F.size)F.data=new Uint8Array(F.size),F.alreadyRead=0,this.itemsDataSize+=F.size,R.debug("ISOFile","Allocating item #"+U+" of size "+F.size+" (total: "+this.itemsDataSize+")");else if(F.alreadyRead===F.size)return F;for(let e=0;e<F.extents.length;e++){const t=F.extents[e];if(t.alreadyRead!==t.length){const Q=this.stream.findPosition(!0,t.offset+t.alreadyRead,!1);if(Q>-1){const n=this.stream.buffers[Q],s=n.byteLength-(t.offset+t.alreadyRead-n.fileStart);if(t.length-t.alreadyRead<=s)R.debug("ISOFile","Getting item #"+U+" extent #"+e+" data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+(t.length-t.alreadyRead)+" full extent size: "+t.length+" full item size: "+F.size+")"),w.memcpy(F.data.buffer,F.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,t.length-t.alreadyRead),(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=t.length-t.alreadyRead),this.stream.logBufferLevel(),F.alreadyRead+=t.length-t.alreadyRead,t.alreadyRead=t.length;else{R.debug("ISOFile","Getting item #"+U+" extent #"+e+" partial data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+s+" full extent size: "+t.length+" full item size: "+F.size+")"),w.memcpy(F.data.buffer,F.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,s),t.alreadyRead+=s,F.alreadyRead+=s,(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=s),this.stream.logBufferLevel();return}}else return}}if(F.alreadyRead===F.size)return F}releaseItem(U){const F=this.items[U];if(F.data){this.itemsDataSize-=F.size,F.data=void 0,F.alreadyRead=0;for(let e=0;e<F.extents.length;e++){const t=F.extents[e];t.alreadyRead=0}return F.size}else return 0}processItems(U){for(const F in this.items){const e=this.items[F];this.getItem(e.id),U&&!e.sent&&(U(e),e.sent=!0,e.data=void 0)}}hasItem(U){for(const F in this.items){const e=this.items[F];if(e.name===U)return e.id}return-1}getMetaHandler(){if(this.meta)return this.meta.hdlr.handler}getPrimaryItem(){if(this.meta&&this.meta.pitm)return this.getItem(this.meta.pitm.item_id)}itemToFragmentedTrackFile({itemId:U}={}){let F;if(U?F=this.getItem(U):F=this.getPrimaryItem(),!F)return;const e=new O;e.discardMdatData=!1;const t={type:F.type,description_boxes:F.properties.boxes};F.properties.ispe&&(t.width=F.properties.ispe.image_width,t.height=F.properties.ispe.image_height);const Q=e.addTrack(t);if(Q)return e.addSample(Q,F.data),e}processIncompleteBox(U){if(U.type==="mdat"){const F=new Ii(U.size);return this.parsingMdat=F,this.boxes.push(F),this.mdats.push(F),F.start=U.start,F.hdr_size=U.hdr_size,F.original_size=U.original_size,this.stream.addUsedBytes(F.hdr_size),this.lastBoxStartPosition=F.start+F.size,this.stream.seek(F.start+F.size,!1,this.discardMdatData)?(this.transferMdatData(),this.parsingMdat=void 0,!0):(this.moovStartFound?this.nextParsePosition=this.stream.findEndContiguousBuf():this.nextParsePosition=F.start+F.size,!1)}else return U.type==="moov"&&(this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0)),(this.stream.mergeNextBuffer?this.stream.mergeNextBuffer():!1)?(this.nextParsePosition=this.stream.getEndPosition(),!0):(U.type?this.moovStartFound?this.nextParsePosition=this.stream.getEndPosition():this.nextParsePosition=this.stream.getPosition()+U.size:this.nextParsePosition=this.stream.getEndPosition(),!1)}hasIncompleteMdat(){return this.parsingMdat!==void 0}transferMdatData(U){const F=U??this.parsingMdat;if(this.discardMdatData){R.debug("ISOFile","Discarding 'mdat' data, not transferring it to the mdat box stream");return}if(!F){R.warn("ISOFile","Cannot transfer 'mdat' data, no mdat box is being parsed");return}const e=this.stream.findPosition(!0,F.start+F.hdr_size,!1),t=this.stream.findPosition(!0,F.start+F.size,!1);if(e===-1||t===-1){R.warn("ISOFile","Cannot transfer 'mdat' data, start or end buffer not found");return}F.stream=new yi;for(let Q=e;Q<=t;Q++){const n=this.stream.buffers[Q],s=Q===e?F.start+F.hdr_size-n.fileStart:0,l=Q===t?F.start+F.size-n.fileStart:n.byteLength;if(l>s){R.debug("ISOFile","Transferring 'mdat' data from buffer #"+Q+" ("+s+" to "+l+")");const B=l-s,a=new A(B),r=F.stream.getAbsoluteEndPosition();w.memcpy(a,0,n,s,B),a.fileStart=r,F.stream.insertBuffer(a),n.usedBytes+=B}}}processIncompleteMdat(){const U=this.parsingMdat;return this.stream.seek(U.start+U.size,!1,this.discardMdatData)?(R.debug("ISOFile","Found 'mdat' end in buffered data"),this.transferMdatData(),this.parsingMdat=void 0,!0):(this.nextParsePosition=this.stream.findEndContiguousBuf(),!1)}restoreParsePosition(){return this.stream.seek(this.lastBoxStartPosition,!0,this.discardMdatData)}saveParsePosition(){this.lastBoxStartPosition=this.stream.getPosition()}updateUsedBytes(U,F){this.stream.addUsedBytes&&(U.type==="mdat"?(this.stream.addUsedBytes(U.hdr_size),this.discardMdatData&&this.stream.addUsedBytes(U.size-U.hdr_size)):this.stream.addUsedBytes(U.size))}addBox(U){return V.prototype.addBox.call(this,U)}init(U={}){const F=this.addBox(new ts);F.major_brand=U.brands&&U.brands[0]||"iso4",F.minor_version=0,F.compatible_brands=U.brands||["iso4"];const e=this.addBox(new sn);e.addBox(new ln);const t=e.addBox(new Bs);return t.timescale=U.timescale||600,t.rate=U.rate||65536,t.creation_time=0,t.modification_time=0,t.duration=U.duration||0,t.volume=U.width?0:256,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.next_track_id=1,this}addTrack(U={}){this.moov||this.init(U);const F=U||{};F.width=F.width||320,F.height=F.height||320,F.id=F.id||this.moov.mvhd.next_track_id,F.type=F.type||"avc1";const e=this.moov.addBox(new An);this.moov.mvhd.next_track_id=F.id+1;const t=e.addBox(new Es);t.flags=Ks|Ps|qs,t.creation_time=0,t.modification_time=0,t.track_id=F.id,t.duration=F.duration||0,t.layer=F.layer||0,t.alternate_group=0,t.volume=1,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.width=F.width<<16,t.height=F.height<<16;const Q=e.addBox(new jn),n=Q.addBox(new ns);n.creation_time=0,n.modification_time=0,n.timescale=F.timescale||1,n.duration=F.media_duration||0,n.language=F.language||"und";const s=Q.addBox(new Qs);s.handler=F.hdlr||"vide",s.name=F.name||"Track created with MP4Box.js";const l=Q.addBox(new es);l.extended_language=F.language||"fr-FR";const B=Q.addBox(new Kn),a=M.sampleEntry[F.type];if(!a)return;const r=new a;if(r.data_reference_index=1,r instanceof m){const c=r,_=B.addBox(new ks);_.graphicsmode=0,_.opcolor=[0,0,0],c.width=F.width,c.height=F.height,c.horizresolution=72<<16,c.vertresolution=72<<16,c.frame_count=1,c.compressorname=F.type+" Compressor",c.depth=24,F.avcDecoderConfigRecord?c.addBox(new Ln(F.avcDecoderConfigRecord.byteLength)).parse(new w(F.avcDecoderConfigRecord)):F.hevcDecoderConfigRecord&&c.addBox(new is(F.hevcDecoderConfigRecord.byteLength)).parse(new w(F.hevcDecoderConfigRecord))}else if(r instanceof y){const c=r,_=B.addBox(new Rs);_.balance=F.balance||0,c.channel_count=F.channel_count||2,c.samplesize=F.samplesize||16,c.samplerate=F.samplerate||65536}else r instanceof bn?B.addBox(new On):r instanceof q?(B.addBox(new hs),r instanceof rs&&(r.namespace=F.namespace||"nonamespace",r.schema_location=F.schema_location||"",r.auxiliary_mime_types=F.auxiliary_mime_types||"")):r instanceof QU?B.addBox(new wi):r instanceof Vn?B.addBox(new wi):B.addBox(new wi);F.description&&r.addBox.call(r,F.description),F.description_boxes&&F.description_boxes.forEach(function(c){r.addBox.call(r,c)});const J=B.addBox(new Pn).addBox(new Fs),E=new Zs;E.flags=1,J.addEntry(E);const S=B.addBox(new qn);S.addBox(new Js).addEntry(r);const u=S.addBox(new cs);u.sample_counts=[],u.sample_deltas=[];const f=S.addBox(new Vs);f.first_chunk=[],f.samples_per_chunk=[],f.sample_description_index=[];const k=S.addBox(new os);k.chunk_offsets=[];const b=S.addBox(new Ss);b.sample_sizes=[];const D=this.moov.mvex.addBox(new Bn);return D.track_id=F.id,D.default_sample_description_index=F.default_sample_description_index||1,D.default_sample_duration=F.default_sample_duration||0,D.default_sample_size=F.default_sample_size||0,D.default_sample_flags=F.default_sample_flags||0,this.buildTrakSampleLists(e),F.id}addSample(U,F,{sample_description_index:e,duration:t=1,cts:Q=0,dts:n=0,is_sync:s=!1,is_leading:l=0,depends_on:B=0,is_depended_on:a=0,has_redundancy:r=0,degradation_priority:h=0,subsamples:J,offset:E=0}={}){const S=this.getTrackById(U);if(S===void 0)return;const Z=e?e-1:0,u={number:S.samples.length,track_id:S.tkhd.track_id,timescale:S.mdia.mdhd.timescale,description_index:Z,description:S.mdia.minf.stbl.stsd.entries[Z],data:F,size:F.byteLength,alreadyRead:F.byteLength,duration:t,cts:Q,dts:n,is_sync:s,is_leading:l,depends_on:B,is_depended_on:a,has_redundancy:r,degradation_priority:h,offset:E,subsamples:J};S.samples.push(u),S.samples_size+=u.size,S.samples_duration+=u.duration,S.first_dts===void 0&&(S.first_dts=n),this.processSamples();const f=this.addBox(this.createMoof([u]));f.computeSize(),f.trafs[0].truns[0].data_offset=f.size+8;const k=this.addBox(new Ii);return k.data=new Uint8Array(F),u}createMoof(U){if(U.length===0)return;if(U.some(a=>a.track_id!==U[0].track_id))throw new Error("Cannot create moof for samples from different tracks: "+U.map(a=>a.track_id).join(", "));const F=U[0].track_id,e=this.getTrackById(F);if(!e)throw new Error("Cannot create moof for non-existing track: "+F);const t=new $n,Q=t.addBox(new ls);Q.sequence_number=++this.nextMoofNumber;const n=t.addBox(new Us),s=n.addBox(new ps);s.track_id=F,s.flags=Cn;const l=n.addBox(new Ws);l.baseMediaDecodeTime=U[0].dts-(e.first_dts||0);const B=n.addBox(new Ns);B.flags=rU|RU|oU|hU|VU,B.data_offset=0,B.first_sample_flags=0,B.sample_count=U.length;for(const a of U){let r=0;a.is_sync?r=1<<25:r=65536,B.sample_duration.push(a.duration),B.sample_size.push(a.size),B.sample_flags.push(r),B.sample_composition_time_offset.push(a.cts-a.dts)}return t}print(U){U.indent="";for(let F=0;F<this.boxes.length;F++)this.boxes[F]&&this.boxes[F].print(U)}};function Ua(i=!1,U){return new $B(U,!i)}var us={};zn(us,{Descriptor:()=>$,ES_Descriptor:()=>Ts,MPEG4DescriptorParser:()=>ia});var fs=3,Yi=4,Jn=5,ms=6,$=class Cs{constructor(U,F){this.tag=U,this.size=F,this.descs=[]}parse(U){this.data=U.readUint8Array(this.size)}findDescriptor(U){for(let F=0;F<this.descs.length;F++)if(this.descs[F].tag===U)return this.descs[F]}parseOneDescriptor(U){let F=0;const e=U.readUint8();let t=U.readUint8();for(;t&128;)F=(F<<7)+(t&127),t=U.readUint8();F=(F<<7)+(t&127),R.debug("Descriptor","Found "+(vi[e]||"Descriptor "+e)+", size "+F+" at position "+U.getPosition());const Q=vi[e]?new Qa[vi[e]](F):new Cs(F);return Q.parse(U),Q}parseRemainingDescriptors(U){var e;const F=U.getPosition();for(;U.getPosition()<F+this.size;){const t=(e=this.parseOneDescriptor)==null?void 0:e.call(this,U);this.descs.push(t)}}},Ts=class extends ${constructor(i){super(fs,i)}parse(i){if(this.ES_ID=i.readUint16(),this.flags=i.readUint8(),this.size-=3,this.flags&128?(this.dependsOn_ES_ID=i.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,this.flags&64){const U=i.readUint8();this.URL=i.readString(U),this.size-=U+1}else this.URL="";this.flags&32?(this.OCR_ES_ID=i.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(i)}getOTI(){const i=this.findDescriptor(Yi);return i?i.oti:0}getAudioConfig(){const i=this.findDescriptor(Yi);if(!i)return;const U=i.findDescriptor(Jn);if(U&&U.data){let F=(U.data[0]&248)>>3;return F===31&&U.data.length>=2&&(F=32+((U.data[0]&7)<<3)+((U.data[1]&224)>>5)),F}}},Fa=class extends ${constructor(i){super(Yi,i)}parse(i){this.oti=i.readUint8(),this.streamType=i.readUint8(),this.upStream=(this.streamType>>1&1)!==0,this.streamType=this.streamType>>>2,this.bufferSize=i.readUint24(),this.maxBitrate=i.readUint32(),this.avgBitrate=i.readUint32(),this.size-=13,this.parseRemainingDescriptors(i)}},ea=class extends ${constructor(i){super(Jn,i)}},ta=class extends ${constructor(i){super(ms,i)}},Qa={Descriptor:$,ES_Descriptor:Ts,DecoderConfigDescriptor:Fa,DecoderSpecificInfo:ea,SLConfigDescriptor:ta},vi={[fs]:"ES_Descriptor",[Yi]:"DecoderConfigDescriptor",[Jn]:"DecoderSpecificInfo",[ms]:"SLConfigDescriptor"},ia=class{constructor(){this.parseOneDescriptor=$.prototype.parseOneDescriptor}getDescriptorName(i){return vi[i]}},gs={};zn(gs,{CoLLBox:()=>Sa,ItemContentIDPropertyBox:()=>Or,OpusSampleEntry:()=>gB,SmDmBox:()=>Gd,a1lxBox:()=>na,a1opBox:()=>sa,ac_3SampleEntry:()=>mB,ac_4SampleEntry:()=>CB,aebrBox:()=>ya,afbrBox:()=>Ia,albcBox:()=>wa,alstSampleGroupEntry:()=>Er,altrBox:()=>va,auxCBox:()=>la,av01SampleEntry:()=>tB,av1CBox:()=>Al,avc1SampleEntry:()=>$l,avc2SampleEntry:()=>UB,avc3SampleEntry:()=>FB,avc4SampleEntry:()=>eB,avcCBox:()=>Ln,avllSampleGroupEntry:()=>Nr,avs3SampleEntry:()=>WB,avssSampleGroupEntry:()=>Zr,brstBox:()=>_a,btrtBox:()=>Ba,bxmlBox:()=>Sl,ccstBox:()=>aa,cdefBox:()=>da,clapBox:()=>ra,clefBox:()=>md,clliBox:()=>Ra,cmexBox:()=>oa,cminBox:()=>ha,cmpdBox:()=>Va,co64Box:()=>Ja,colrBox:()=>ql,coviBox:()=>pa,cprtBox:()=>Ea,cschBox:()=>Na,cslgBox:()=>Za,cttsBox:()=>ka,dOpsBox:()=>Da,dac3Box:()=>ua,dataBox:()=>dU,dav1SampleEntry:()=>QB,dec3Box:()=>fa,dfLaBox:()=>ma,dimmBox:()=>Ca,dinfBox:()=>Pn,dmax:()=>Ta,dmedBox:()=>ga,dobrBox:()=>Ha,drefBox:()=>Fs,drepBox:()=>xa,dtrtSampleGroupEntry:()=>kr,dvh1SampleEntry:()=>rB,dvheSampleEntry:()=>RB,ec_3SampleEntry:()=>TB,edtsBox:()=>Wl,elngBox:()=>es,elstBox:()=>ba,emsgBox:()=>Ma,encaSampleEntry:()=>wB,encmSampleEntry:()=>YB,encsSampleEntry:()=>_B,enctSampleEntry:()=>zB,encuSampleEntry:()=>vB,encvSampleEntry:()=>IB,enofBox:()=>Td,eqivBox:()=>za,esdsBox:()=>jl,etypBox:()=>Il,fLaCSampleEntry:()=>yB,favcBox:()=>Ya,fielBox:()=>$a,fobrBox:()=>Ga,freeBox:()=>ol,frmaBox:()=>Ud,ftypBox:()=>ts,grplBox:()=>Ml,hdlrBox:()=>Qs,hev1SampleEntry:()=>sB,hev2SampleEntry:()=>lB,hinfBox:()=>kl,hmhdBox:()=>On,hntiBox:()=>Zl,hvc1SampleEntry:()=>iB,hvc2SampleEntry:()=>nB,hvcCBox:()=>is,hvt1SampleEntry:()=>BB,iaugBox:()=>Xa,idatBox:()=>Rl,iinfBox:()=>_l,ilocBox:()=>Hl,ilstBox:()=>gd,imirBox:()=>Fd,infeBox:()=>vl,iodsBox:()=>Vl,ipcoBox:()=>bl,ipmaBox:()=>ed,iproBox:()=>cl,iprpBox:()=>xl,irefBox:()=>Yl,irotBox:()=>td,ispeBox:()=>Qd,itaiBox:()=>id,j2kHBox:()=>yl,j2kiSampleEntry:()=>pB,keysBox:()=>Dd,kindBox:()=>nd,levaBox:()=>sd,lhe1SampleEntry:()=>aB,lhv1SampleEntry:()=>dB,lhvCBox:()=>ld,lselBox:()=>Bd,m4aeSampleEntry:()=>fB,maxrBox:()=>ad,mdatBox:()=>Ii,mdcvBox:()=>dd,mdhdBox:()=>ns,mdiaBox:()=>jn,mecoBox:()=>Nl,mehdBox:()=>ss,metaBox:()=>Xl,mettSampleEntry:()=>Ll,metxSampleEntry:()=>Ol,mfhdBox:()=>ls,mfraBox:()=>El,mfroBox:()=>rd,mha1SampleEntry:()=>DB,mha2SampleEntry:()=>xB,mhm1SampleEntry:()=>bB,mhm2SampleEntry:()=>MB,minfBox:()=>Kn,mjp2SampleEntry:()=>EB,mjpgSampleEntry:()=>NB,moofBox:()=>$n,moovBox:()=>sn,mp4aSampleEntry:()=>uB,mp4sSampleEntry:()=>HB,mp4vSampleEntry:()=>kB,mskCBox:()=>Rd,msrcTrackGroupTypeBox:()=>ar,mvexBox:()=>ln,mvhdBox:()=>Bs,mvifSampleGroupEntry:()=>ur,nmhdBox:()=>wi,npckBox:()=>od,numpBox:()=>hd,padbBox:()=>Jd,panoBox:()=>La,paspBox:()=>Sd,paylBox:()=>cd,paytBox:()=>Wd,pdinBox:()=>pd,piffLsmBox:()=>Hr,piffPsshBox:()=>zr,piffSencBox:()=>Yr,piffTencBox:()=>Gr,piffTfrfBox:()=>Xr,piffTfxdBox:()=>Lr,pitmBox:()=>Gl,pixiBox:()=>Ed,pmaxBox:()=>Nd,povdBox:()=>wl,prdiBox:()=>Zd,prfrBox:()=>kd,prftBox:()=>ud,prgrBox:()=>Pa,profBox:()=>xd,prolSampleGroupEntry:()=>fr,psshBox:()=>fd,pymdBox:()=>qa,rapSampleGroupEntry:()=>mr,rashSampleGroupEntry:()=>Cr,resvSampleEntry:()=>GB,rinfBox:()=>Cl,rollSampleGroupEntry:()=>Tr,rtp_Box:()=>yd,saioBox:()=>Id,saizBox:()=>wd,sbgpBox:()=>jB,sbpmBox:()=>_d,sbttSampleEntry:()=>XB,schiBox:()=>Tl,schmBox:()=>Hd,scifSampleGroupEntry:()=>gr,scnmSampleGroupEntry:()=>Dr,sdp_Box:()=>zd,sdtpBox:()=>KB,seigSampleGroupEntry:()=>xr,sencBox:()=>Yd,sgpdBox:()=>PB,sidxBox:()=>qB,sinfBox:()=>ml,skipBox:()=>hl,slidBox:()=>Oa,smhdBox:()=>Rs,sratBox:()=>Xd,ssixBox:()=>Ld,stblBox:()=>qn,stcoBox:()=>os,stdpBox:()=>Od,sterBox:()=>Aa,sthdBox:()=>hs,stppSampleEntry:()=>rs,strdBox:()=>fl,striBox:()=>Ad,strkBox:()=>ul,stsaSampleGroupEntry:()=>br,stscBox:()=>Vs,stsdBox:()=>Js,stsgBox:()=>jd,stshBox:()=>Kd,stssBox:()=>Pd,stszBox:()=>Ss,sttsBox:()=>cs,stviBox:()=>qd,stxtSampleEntry:()=>LB,stypBox:()=>$d,stz2Box:()=>Ur,subsBox:()=>Fr,syncSampleGroupEntry:()=>Mr,taicBox:()=>er,taptBox:()=>bd,teleSampleGroupEntry:()=>yr,tencBox:()=>tr,tfdtBox:()=>Ws,tfhdBox:()=>ps,tfraBox:()=>Qr,tkhdBox:()=>Es,tmaxBox:()=>ir,tminBox:()=>nr,totlBox:()=>sr,tpayBox:()=>lr,tpylBox:()=>Br,trafBox:()=>Us,trakBox:()=>An,trefBox:()=>dr,trepBox:()=>rr,trexBox:()=>Bn,trgrBox:()=>gl,trpyBox:()=>Rr,trunBox:()=>Ns,tsasSampleGroupEntry:()=>Ir,tsclSampleGroupEntry:()=>wr,tselBox:()=>or,tsynBox:()=>ja,tx3gSampleEntry:()=>OB,txtcBox:()=>hr,tycoBox:()=>Vr,udesBox:()=>Jr,udtaBox:()=>Dl,uncCBox:()=>Sr,uncvSampleEntry:()=>ZB,urlBox:()=>Zs,urnBox:()=>cr,viprSampleGroupEntry:()=>vr,vmhdBox:()=>ks,vp08SampleEntry:()=>SB,vp09SampleEntry:()=>cB,vpcCBox:()=>Kl,vttCBox:()=>Wr,vttcBox:()=>pl,vvc1SampleEntry:()=>oB,vvcCBox:()=>Pl,vvcNSampleEntry:()=>JB,vvi1SampleEntry:()=>hB,vvnCBox:()=>pr,vvs1SampleEntry:()=>VB,waveBox:()=>Md,wbbrBox:()=>Ka,wvttSampleEntry:()=>AB,xmlBox:()=>Jl});var Ye,na=(Ye=class extends V{constructor(){super(...arguments),this.box_name="AV1LayeredImageIndexingProperty"}parse(U){const e=((U.readUint8()&1&1)+1)*16;this.layer_size=[];for(let t=0;t<3;t++)e===16?this.layer_size[t]=U.readUint16():this.layer_size[t]=U.readUint32()}},Ye.fourcc="a1lx",Ye),Ge,sa=(Ge=class extends V{constructor(){super(...arguments),this.box_name="OperatingPointSelectorProperty"}parse(U){this.op_index=U.readUint8()}},Ge.fourcc="a1op",Ge),Xe,la=(Xe=class extends o{constructor(){super(...arguments),this.box_name="AuxiliaryTypeProperty"}parse(U){this.parseFullHeader(U),this.aux_type=U.readCString();const F=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=U.readUint8Array(F)}},Xe.fourcc="auxC",Xe),Le,Ba=(Le=class extends V{constructor(){super(...arguments),this.box_name="BitRateBox"}parse(U){this.bufferSizeDB=U.readUint32(),this.maxBitrate=U.readUint32(),this.avgBitrate=U.readUint32()}},Le.fourcc="btrt",Le),Oe,aa=(Oe=class extends o{constructor(){super(...arguments),this.box_name="CodingConstraintsBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.all_ref_pics_intra=(F&128)===128,this.intra_pred_used=(F&64)===64,this.max_ref_per_pic=(F&63)>>2,U.readUint24()}},Oe.fourcc="ccst",Oe),Ae,da=(Ae=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.channel_count=U.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[];for(let F=0;F<this.channel_count;F++)this.channel_indexes.push(U.readUint16()),this.channel_types.push(U.readUint16()),this.channel_associations.push(U.readUint16())}},Ae.fourcc="cdef",Ae),je,ra=(je=class extends V{constructor(){super(...arguments),this.box_name="CleanApertureBox"}parse(U){this.cleanApertureWidthN=U.readUint32(),this.cleanApertureWidthD=U.readUint32(),this.cleanApertureHeightN=U.readUint32(),this.cleanApertureHeightD=U.readUint32(),this.horizOffN=U.readUint32(),this.horizOffD=U.readUint32(),this.vertOffN=U.readUint32(),this.vertOffD=U.readUint32()}},je.fourcc="clap",je),Ke,Ra=(Ke=class extends V{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.max_content_light_level=U.readUint16(),this.max_pic_average_light_level=U.readUint16()}},Ke.fourcc="clli",Ke),Pe,oa=(Pe=class extends V{constructor(){super(...arguments),this.box_name="CameraExtrinsicMatrixProperty"}parse(U){this.flags&1&&(this.pos_x=U.readInt32()),this.flags&2&&(this.pos_y=U.readInt32()),this.flags&4&&(this.pos_z=U.readInt32()),this.flags&8&&(this.version===0?this.flags&16?(this.quat_x=U.readInt32(),this.quat_y=U.readInt32(),this.quat_z=U.readInt32()):(this.quat_x=U.readInt16(),this.quat_y=U.readInt16(),this.quat_z=U.readInt16()):this.version),this.flags&32&&(this.id=U.readUint32())}},Pe.fourcc="cmex",Pe),qe,ha=(qe=class extends V{constructor(){super(...arguments),this.box_name="CameraIntrinsicMatrixProperty"}parse(U){this.focal_length_x=U.readInt32(),this.principal_point_x=U.readInt32(),this.principal_point_y=U.readInt32(),this.flags&1&&(this.focal_length_y=U.readInt32(),this.skew_factor=U.readInt32())}},qe.fourcc="cmin",qe),$e,Va=($e=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.component_count=U.readUint32(),this.component_types=[],this.component_type_urls=[];for(let F=0;F<this.component_count;F++){const e=U.readUint16();this.component_types.push(e),e>=32768&&this.component_type_urls.push(U.readCString())}}},$e.fourcc="cmpd",$e),Ut,Ja=(Ut=class extends o{constructor(){super(...arguments),this.box_name="ChunkLargeOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let e=0;e<F;e++)this.chunk_offsets.push(U.readUint64())}write(U){this.version=0,this.flags=0,this.size=4+8*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length);for(let F=0;F<this.chunk_offsets.length;F++)U.writeUint64(this.chunk_offsets[F])}},Ut.fourcc="co64",Ut),Ft,Sa=(Ft=class extends o{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.parseFullHeader(U),this.maxCLL=U.readUint16(),this.maxFALL=U.readUint16()}},Ft.fourcc="CoLL",Ft),ca=class{toString(){let i="centre_azimuth: ";return i+=this.centre_azimuth,i+=" (",i+=this.centre_azimuth*2**-16,i+="°), centre_elevation: ",i+=this.centre_elevation,i+=" (",i+=this.centre_elevation*2**-16,i+="°), centre_tilt: ",i+=this.centre_tilt,i+=" (",i+=this.centre_tilt*2**-16,i+="°)",this.range_included_flag&&(i+=", azimuth_range: ",i+=this.azimuth_range,i+=" (",i+=this.azimuth_range*2**-16,i+="°), elevation_range: ",i+=this.elevation_range,i+=" (",i+=this.elevation_range*2**-16,i+="°)"),this.interpolate_included_flag&&(i+=", interpolate: ",i+=this.interpolate),i}},Wa=class{toString(){let i="";return this.view_idc&&(i+="view_idc: ",i+=this.view_idc,i+=", "),i+="sphere_region: {",i+=this.sphere_region,i+="}",i}},et,pa=(et=class extends o{constructor(){super(...arguments),this.box_name="CoverageInformationBox"}parse(U){this.parseFullHeader(U),this.coverage_shape_type=U.readUint8();const F=U.readUint8(),e=U.readInt8(),t=e&128;t&&(this.default_view_idc=(e&96)>>5),this.coverage_regions=new Array;for(let Q=0;Q<F;Q++){const n=new Wa;t&&(n.view_idc=U.readUint8()>>6),n.sphere_region=this.parseSphereRegion(U,!0,!0),this.coverage_regions.push(n)}}parseSphereRegion(U,F,e){const t=new ca;return t.centre_azimuth=U.readInt32(),t.centre_elevation=U.readInt32(),t.centre_tilt=U.readInt32(),t.range_included_flag=F,F&&(t.azimuth_range=U.readUint32(),t.elevation_range=U.readUint32()),t.interpolate_included_flag=e,e&&(t.interpolate=(U.readUint8()&128)===128),t}},et.fourcc="covi",et),tt,Ea=(tt=class extends o{constructor(){super(...arguments),this.box_name="CopyrightBox"}parse(U){this.parseFullHeader(U),this.parseLanguage(U),this.notice=U.readCString()}},tt.fourcc="cprt",tt),Qt,Na=(Qt=class extends o{constructor(){super(...arguments),this.box_name="CompatibleSchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readCString())}},Qt.fourcc="csch",Qt),BU=2147483647,it,Za=(it=class extends o{constructor(){super(...arguments),this.box_name="CompositionToDecodeBox"}parse(U){this.parseFullHeader(U),this.version===0?(this.compositionToDTSShift=U.readInt32(),this.leastDecodeToDisplayDelta=U.readInt32(),this.greatestDecodeToDisplayDelta=U.readInt32(),this.compositionStartTime=U.readInt32(),this.compositionEndTime=U.readInt32()):this.version===1&&(this.compositionToDTSShift=U.readInt64(),this.leastDecodeToDisplayDelta=U.readInt64(),this.greatestDecodeToDisplayDelta=U.readInt64(),this.compositionStartTime=U.readInt64(),this.compositionEndTime=U.readInt64())}write(U){this.version=0,(this.compositionToDTSShift>BU||this.leastDecodeToDisplayDelta>BU||this.greatestDecodeToDisplayDelta>BU||this.compositionStartTime>BU||this.compositionEndTime>BU)&&(this.version=1),this.flags=0,this.version===0?(this.size=4*5,this.writeHeader(U),U.writeInt32(this.compositionToDTSShift),U.writeInt32(this.leastDecodeToDisplayDelta),U.writeInt32(this.greatestDecodeToDisplayDelta),U.writeInt32(this.compositionStartTime),U.writeInt32(this.compositionEndTime)):this.version===1&&(this.size=8*5,this.writeHeader(U),U.writeInt64(this.compositionToDTSShift),U.writeInt64(this.leastDecodeToDisplayDelta),U.writeInt64(this.greatestDecodeToDisplayDelta),U.writeInt64(this.compositionStartTime),U.writeInt64(this.compositionEndTime))}},it.fourcc="cslg",it),nt,ka=(nt=class extends o{constructor(){super(...arguments),this.box_name="CompositionOffsetBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.sample_counts=[],this.sample_offsets=[],this.version===0)for(let e=0;e<F;e++){this.sample_counts.push(U.readUint32());const t=U.readInt32();t<0&&R.warn("BoxParser","ctts box uses negative values without using version 1"),this.sample_offsets.push(t)}else if(this.version===1)for(let e=0;e<F;e++)this.sample_counts.push(U.readUint32()),this.sample_offsets.push(U.readInt32())}write(U){this.version=this.sample_offsets.some(F=>F<0)?1:0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let F=0;F<this.sample_counts.length;F++)U.writeUint32(this.sample_counts[F]),this.version===1?U.writeInt32(this.sample_offsets[F]):U.writeUint32(this.sample_offsets[F])}unpack(U){let F=0;for(let e=0;e<this.sample_counts.length;e++)for(let t=0;t<this.sample_counts[e];t++)U[F].pts=U[F].dts+this.sample_offsets[e],F++}},nt.fourcc="ctts",nt),st,ua=(st=class extends V{constructor(){super(...arguments),this.box_name="AC3SpecificBox"}parse(U){const F=U.readUint8(),e=U.readUint8(),t=U.readUint8();this.fscod=F>>6,this.bsid=F>>1&31,this.bsmod=(F&1)<<2|e>>6&3,this.acmod=e>>3&7,this.lfeon=e>>2&1,this.bit_rate_code=e&3|t>>5&7}},st.fourcc="dac3",st),lt,fa=(lt=class extends V{constructor(){super(...arguments),this.box_name="EC3SpecificBox"}parse(U){const F=U.readUint16();this.data_rate=F>>3,this.num_ind_sub=F&7,this.ind_subs=[];for(let e=0;e<this.num_ind_sub+1;e++){const t=U.readUint8(),Q=U.readUint8(),n=U.readUint8(),s={fscod:t>>6,bsid:t>>1&31,bsmod:(t&1)<<4|Q>>4&15,acmod:Q>>1&7,lfeon:Q&1,num_dep_sub:n>>1&15};this.ind_subs.push(s),s.num_dep_sub>0&&(s.chan_loc=(n&1)<<8|U.readUint8())}}},lt.fourcc="dec3",lt),Bt,ma=(Bt=class extends o{constructor(){super(...arguments),this.box_name="FLACSpecificBox"}parse(U){this.parseFullHeader(U);const F=127,e=128,t=[],Q=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];let n;do{n=U.readUint8();const s=Math.min(n&F,Q.length-1);s?U.readUint8Array(U.readUint24()):(U.readUint8Array(13),this.samplerate=U.readUint32()>>12,U.readUint8Array(20)),t.push(Q[s])}while(n&e);this.numMetadataBlocks=t.length+" ("+t.join(", ")+")"}},Bt.fourcc="dfLa",Bt),at,Ca=(at=class extends V{constructor(){super(...arguments),this.box_name="hintimmediateBytesSent"}parse(U){this.bytessent=U.readUint64()}},at.fourcc="dimm",at),dt,Ta=(dt=class extends V{constructor(){super(...arguments),this.box_name="hintlongestpacket"}parse(U){this.time=U.readUint32()}},dt.fourcc="dmax",dt),rt,ga=(rt=class extends V{constructor(){super(...arguments),this.box_name="hintmediaBytesSent"}parse(U){this.bytessent=U.readUint64()}},rt.fourcc="dmed",rt),Rt,Da=(Rt=class extends V{constructor(){super(...arguments),this.box_name="OpusSpecificBox"}parse(U){if(this.Version=U.readUint8(),this.OutputChannelCount=U.readUint8(),this.PreSkip=U.readUint16(),this.InputSampleRate=U.readUint32(),this.OutputGain=U.readInt16(),this.ChannelMappingFamily=U.readUint8(),this.ChannelMappingFamily!==0){this.StreamCount=U.readUint8(),this.CoupledCount=U.readUint8(),this.ChannelMapping=[];for(let F=0;F<this.OutputChannelCount;F++)this.ChannelMapping[F]=U.readUint8()}}write(U){if(this.size=11,this.ChannelMappingFamily!==0&&(this.size+=2+this.OutputChannelCount),this.writeHeader(U),U.writeUint8(this.Version),U.writeUint8(this.OutputChannelCount),U.writeUint16(this.PreSkip),U.writeUint32(this.InputSampleRate),U.writeInt16(this.OutputGain),U.writeUint8(this.ChannelMappingFamily),this.ChannelMappingFamily!==0){U.writeUint8(this.StreamCount),U.writeUint8(this.CoupledCount);for(let F=0;F<this.OutputChannelCount;F++)U.writeUint8(this.ChannelMapping[F])}}},Rt.fourcc="dOps",Rt),ot,xa=(ot=class extends V{constructor(){super(...arguments),this.box_name="hintrepeatedBytesSent"}parse(U){this.bytessent=U.readUint64()}},ot.fourcc="drep",ot),ht,ba=(ht=class extends o{constructor(){super(...arguments),this.box_name="EditListBox"}parse(U){this.parseFullHeader(U),this.entries=[];const F=U.readUint32();for(let e=0;e<F;e++){const t={segment_duration:this.version===1?U.readUint64():U.readUint32(),media_time:this.version===1?U.readInt64():U.readInt32(),media_rate_integer:U.readInt16(),media_rate_fraction:U.readInt16()};this.entries.push(t)}}write(U){const F=this.entries.some(e=>e.segment_duration>g||e.media_time>g)||this.version===1;this.version=F?1:0,this.size=4+12*this.entries.length,this.size+=F?2*4*this.entries.length:0,this.writeHeader(U),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const t=this.entries[e];F?(U.writeUint64(t.segment_duration),U.writeInt64(t.media_time)):(U.writeUint32(t.segment_duration),U.writeInt32(t.media_time)),U.writeInt16(t.media_rate_integer),U.writeInt16(t.media_rate_fraction)}}},ht.fourcc="elst",ht),Vt,Ma=(Vt=class extends o{constructor(){super(...arguments),this.box_name="EventMessageBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.timescale=U.readUint32(),this.presentation_time=U.readUint64(),this.event_duration=U.readUint32(),this.id=U.readUint32(),this.scheme_id_uri=U.readCString(),this.value=U.readCString()):(this.scheme_id_uri=U.readCString(),this.value=U.readCString(),this.timescale=U.readUint32(),this.presentation_time_delta=U.readUint32(),this.event_duration=U.readUint32(),this.id=U.readUint32());let F=this.size-this.hdr_size-(4*4+(this.scheme_id_uri.length+1)+(this.value.length+1));this.version===1&&(F-=4),this.message_data=U.readUint8Array(F)}write(U){this.version=0,this.flags=0,this.size=4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1),this.writeHeader(U),U.writeCString(this.scheme_id_uri),U.writeCString(this.value),U.writeUint32(this.timescale),U.writeUint32(this.presentation_time_delta),U.writeUint32(this.event_duration),U.writeUint32(this.id),U.writeUint8Array(this.message_data)}},Vt.fourcc="emsg",Vt),x=class extends o{parse(i){this.parseFullHeader(i),this.group_id=i.readUint32(),this.num_entities_in_group=i.readUint32(),this.entity_ids=[];for(let U=0;U<this.num_entities_in_group;U++){const F=i.readUint32();this.entity_ids.push(F)}}},Jt,ya=(Jt=class extends x{constructor(){super(...arguments),this.box_name="Auto exposure bracketing"}},Jt.fourcc="aebr",Jt),St,Ia=(St=class extends x{constructor(){super(...arguments),this.box_name="Flash exposure information"}},St.fourcc="afbr",St),ct,wa=(ct=class extends x{constructor(){super(...arguments),this.box_name="Album collection"}},ct.fourcc="albc",ct),Wt,va=(Wt=class extends x{constructor(){super(...arguments),this.box_name="Alternative entity"}},Wt.fourcc="altr",Wt),pt,_a=(pt=class extends x{constructor(){super(...arguments),this.box_name="Burst image"}},pt.fourcc="brst",pt),Et,Ha=(Et=class extends x{constructor(){super(...arguments),this.box_name="Depth of field bracketing"}},Et.fourcc="dobr",Et),Nt,za=(Nt=class extends x{constructor(){super(...arguments),this.box_name="Equivalent entity"}},Nt.fourcc="eqiv",Nt),Zt,Ya=(Zt=class extends x{constructor(){super(...arguments),this.box_name="Favorites collection"}},Zt.fourcc="favc",Zt),kt,Ga=(kt=class extends x{constructor(){super(...arguments),this.box_name="Focus bracketing"}},kt.fourcc="fobr",kt),ut,Xa=(ut=class extends x{constructor(){super(...arguments),this.box_name="Image item with an audio track"}},ut.fourcc="iaug",ut),ft,La=(ft=class extends x{constructor(){super(...arguments),this.box_name="Panorama"}},ft.fourcc="pano",ft),mt,Oa=(mt=class extends x{constructor(){super(...arguments),this.box_name="Slideshow"}},mt.fourcc="slid",mt),Ct,Aa=(Ct=class extends x{constructor(){super(...arguments),this.box_name="Stereo"}},Ct.fourcc="ster",Ct),Tt,ja=(Tt=class extends x{constructor(){super(...arguments),this.box_name="Time-synchronized capture"}},Tt.fourcc="tsyn",Tt),gt,Ka=(gt=class extends x{constructor(){super(...arguments),this.box_name="White balance bracketing"}},gt.fourcc="wbbr",gt),Dt,Pa=(Dt=class extends x{constructor(){super(...arguments),this.box_name="Progressive rendering"}},Dt.fourcc="prgr",Dt),xt,qa=(xt=class extends x{constructor(){super(...arguments),this.box_name="Image pyramid"}parse(U){this.parseFullHeader(U),this.group_id=U.readUint32(),this.num_entities_in_group=U.readUint32(),this.entity_ids=[];for(let F=0;F<this.num_entities_in_group;F++){const e=U.readUint32();this.entity_ids.push(e)}this.tile_size_x=U.readUint16(),this.tile_size_y=U.readUint16(),this.layer_binning=[],this.tiles_in_layer_column_minus1=[],this.tiles_in_layer_row_minus1=[];for(let F=0;F<this.num_entities_in_group;F++)this.layer_binning[F]=U.readUint16(),this.tiles_in_layer_row_minus1[F]=U.readUint16(),this.tiles_in_layer_column_minus1[F]=U.readUint16()}},xt.fourcc="pymd",xt),bt,$a=(bt=class extends V{constructor(){super(...arguments),this.box_name="FieldHandlingBox"}parse(U){this.fieldCount=U.readUint8(),this.fieldOrdering=U.readUint8()}},bt.fourcc="fiel",bt),Mt,Ud=(Mt=class extends V{constructor(){super(...arguments),this.box_name="OriginalFormatBox"}parse(U){this.data_format=U.readString(4)}},Mt.fourcc="frma",Mt),yt,Fd=(yt=class extends V{constructor(){super(...arguments),this.box_name="ImageMirror"}parse(U){const F=U.readUint8();this.reserved=F>>7,this.axis=F&1}},yt.fourcc="imir",yt),It,ed=(It=class extends o{constructor(){super(...arguments),this.box_name="ItemPropertyAssociationBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.associations=[];for(let e=0;e<F;e++){const t=this.version<1?U.readUint16():U.readUint32(),Q=[],n=U.readUint8();for(let s=0;s<n;s++){const l=U.readUint8();Q.push({essential:(l&128)>>7===1,property_index:this.flags&1?(l&127)<<8|U.readUint8():l&127})}this.associations.push({id:t,props:Q})}}},It.fourcc="ipma",It),wt,td=(wt=class extends V{constructor(){super(...arguments),this.box_name="ImageRotation"}parse(U){this.angle=U.readUint8()&3}},wt.fourcc="irot",wt),vt,Qd=(vt=class extends o{constructor(){super(...arguments),this.box_name="ImageSpatialExtentsProperty"}parse(U){this.parseFullHeader(U),this.image_width=U.readUint32(),this.image_height=U.readUint32()}},vt.fourcc="ispe",vt),_t,id=(_t=class extends o{constructor(){super(...arguments),this.box_name="TAITimestampBox"}parse(U){this.TAI_timestamp=U.readUint64();const F=U.readUint8();this.sychronization_state=F>>7&1,this.timestamp_generation_failure=F>>6&1,this.timestamp_is_modified=F>>5&1}},_t.fourcc="itai",_t),Ht,nd=(Ht=class extends o{constructor(){super(...arguments),this.box_name="KindBox"}parse(U){this.parseFullHeader(U),this.schemeURI=U.readCString(),this.isEndOfBox(U)||(this.value=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.schemeURI.length+1+(this.value?this.value.length+1:0),this.writeHeader(U),U.writeCString(this.schemeURI),this.value&&U.writeCString(this.value)}},Ht.fourcc="kind",Ht),zt,sd=(zt=class extends o{constructor(){super(...arguments),this.box_name="LevelAssignmentBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.levels=[];for(let e=0;e<F;e++){const t={};this.levels[e]=t,t.track_ID=U.readUint32();const Q=U.readUint8();switch(t.padding_flag=Q>>7,t.assignment_type=Q&127,t.assignment_type){case 0:t.grouping_type=U.readString(4);break;case 1:t.grouping_type=U.readString(4),t.grouping_type_parameter=U.readUint32();break;case 2:break;case 3:break;case 4:t.sub_track_id=U.readUint32();break;default:R.warn("BoxParser",`Unknown level assignment type: ${t.assignment_type}`)}}}},zt.fourcc="leva",zt),Yt,ld=(Yt=class extends V{constructor(){super(...arguments),this.box_name="LHEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3;let F=U.readUint8();this.numTemporalLayers=(F&13)>>3,this.temporalIdNested=(F&4)>>2,this.lengthSizeMinusOne=F&3,this.nalu_arrays=[];const e=U.readUint8();for(let t=0;t<e;t++){const Q=[];this.nalu_arrays.push(Q),F=U.readUint8(),Q.completeness=(F&128)>>7,Q.nalu_type=F&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}},Yt.fourcc="lhvC",Yt),Gt,Bd=(Gt=class extends V{constructor(){super(...arguments),this.box_name="LayerSelectorProperty"}parse(U){this.layer_id=U.readUint16()}},Gt.fourcc="lsel",Gt),Xt,ad=(Xt=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrate"}parse(U){this.period=U.readUint32(),this.bytes=U.readUint32()}},Xt.fourcc="maxr",Xt),mi=class{constructor(i,U){this.x=i,this.y=U}toString(){return"("+this.x+","+this.y+")"}},Lt,dd=(Lt=class extends V{constructor(){super(...arguments),this.box_name="MasteringDisplayColourVolumeBox"}parse(U){this.display_primaries=[],this.display_primaries[0]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[1]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[2]=new mi(U.readUint16(),U.readUint16()),this.white_point=new mi(U.readUint16(),U.readUint16()),this.max_display_mastering_luminance=U.readUint32(),this.min_display_mastering_luminance=U.readUint32()}},Lt.fourcc="mdcv",Lt),Ot,rd=(Ot=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessOffsetBox"}parse(U){this.parseFullHeader(U),this._size=U.readUint32()}},Ot.fourcc="mfro",Ot),At,Rd=(At=class extends o{constructor(){super(...arguments),this.box_name="MaskConfigurationProperty"}parse(U){this.parseFullHeader(U),this.bits_per_pixel=U.readUint8()}},At.fourcc="mskC",At),jt,od=(jt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint32()}},jt.fourcc="npck",jt),Kt,hd=(Kt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint64()}},Kt.fourcc="nump",Kt),Vd=class{constructor(i,U){this.pad1=i,this.pad2=U}},Pt,Jd=(Pt=class extends o{constructor(){super(...arguments),this.box_name="PaddingBitsBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.padbits=[];for(let e=0;e<Math.floor((F+1)/2);e++){const t=U.readUint8(),Q=(t&112)>>4,n=t&7;this.padbits.push(new Vd(Q,n))}}},Pt.fourcc="padb",Pt),qt,Sd=(qt=class extends V{constructor(){super(...arguments),this.box_name="PixelAspectRatioBox"}parse(U){this.hSpacing=U.readUint32(),this.vSpacing=U.readUint32()}},qt.fourcc="pasp",qt),$t,cd=($t=class extends V{constructor(){super(...arguments),this.box_name="CuePayloadBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},$t.fourcc="payl",$t),UQ,Wd=(UQ=class extends V{constructor(){super(...arguments),this.box_name="hintpayloadID"}parse(U){this.payloadID=U.readUint32();const F=U.readUint8();this.rtpmap_string=U.readString(F)}},UQ.fourcc="payt",UQ),FQ,pd=(FQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDownloadInfoBox",this.rate=[],this.initial_delay=[]}parse(U){this.parseFullHeader(U);const F=(this.size-this.hdr_size)/8;for(let e=0;e<F;e++)this.rate[e]=U.readUint32(),this.initial_delay[e]=U.readUint32()}},FQ.fourcc="pdin",FQ),eQ,Ed=(eQ=class extends o{constructor(){super(...arguments),this.box_name="PixelInformationProperty"}parse(U){this.parseFullHeader(U),this.num_channels=U.readUint8(),this.bits_per_channels=[];for(let F=0;F<this.num_channels;F++)this.bits_per_channels[F]=U.readUint8()}},eQ.fourcc="pixi",eQ),tQ,Nd=(tQ=class extends V{constructor(){super(...arguments),this.box_name="hintlargestpacket"}parse(U){this.bytes=U.readUint32()}},tQ.fourcc="pmax",tQ),QQ,Zd=(QQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDerivedImageItemInformationProperty"}parse(U){if(this.parseFullHeader(U),this.step_count=U.readUint16(),this.item_count=[],this.flags&2)for(let F=0;F<this.step_count;F++)this.item_count[F]=U.readUint16()}},QQ.fourcc="prdi",QQ),iQ,kd=(iQ=class extends o{constructor(){super(...arguments),this.box_name="ProjectionFormatBox"}parse(U){this.parseFullHeader(U),this.projection_type=U.readUint8()&31}},iQ.fourcc="prfr",iQ),nQ,ud=(nQ=class extends o{constructor(){super(...arguments),this.box_name="ProducerReferenceTimeBox"}parse(U){this.parseFullHeader(U),this.ref_track_id=U.readUint32(),this.ntp_timestamp=U.readUint64(),this.version===0?this.media_time=U.readUint32():this.media_time=U.readUint64()}},nQ.fourcc="prft",nQ),sQ,fd=(sQ=class extends o{constructor(){super(...arguments),this.box_name="ProtectionSystemSpecificHeaderBox"}parse(U){if(this.parseFullHeader(U),this.system_id=P(U),this.kid=[],this.version>0){const e=U.readUint32();for(let t=0;t<e;t++)this.kid[t]=P(U)}const F=U.readUint32();F>0&&(this.protection_data=U.readUint8Array(F))}},sQ.fourcc="pssh",sQ),lQ,md=(lQ=class extends o{constructor(){super(...arguments),this.box_name="TrackCleanApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},lQ.fourcc="clef",lQ);function Cd(i,U){if(i===dU.Types.UTF8)return new TextDecoder("utf-8").decode(U);const F=new DataView(U.buffer);if(i===dU.Types.BE_UNSIGNED_INT){if(U.length===1)return F.getUint8(0);if(U.length===2)return F.getUint16(0,!1);if(U.length===4)return F.getUint32(0,!1);if(U.length===8)return F.getBigUint64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_UNSIGNED_INT length "+U.length)}else if(i===dU.Types.BE_SIGNED_INT){if(U.length===1)return F.getInt8(0);if(U.length===2)return F.getInt16(0,!1);if(U.length===4)return F.getInt32(0,!1);if(U.length===8)return F.getBigInt64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_SIGNED_INT length "+U.length)}else if(i===dU.Types.BE_FLOAT32)return F.getFloat32(0,!1);R.warn("DataBox","Unsupported or unimplemented itif data type: "+i)}var iU,dU=(iU=class extends V{constructor(){super(...arguments),this.box_name="DataBox"}parse(U){this.valueType=U.readUint32(),this.country=U.readUint16(),this.country>255&&(U.seek(U.getPosition()-2),this.countryString=U.readString(2)),this.language=U.readUint16(),this.language>255&&(U.seek(U.getPosition()-2),this.parseLanguage(U)),this.raw=U.readUint8Array(this.size-this.hdr_size-8),this.value=Cd(this.valueType,this.raw)}},iU.fourcc="data",iU.Types={RESERVED:0,UTF8:1,UTF16:2,SJIS:3,UTF8_SORT:4,UTF16_SORT:5,JPEG:13,PNG:14,BE_SIGNED_INT:21,BE_UNSIGNED_INT:22,BE_FLOAT32:23,BE_FLOAT64:24,BMP:27,QT_ATOM:28,BE_SIGNED_INT8:65,BE_SIGNED_INT16:66,BE_SIGNED_INT32:67,BE_FLOAT32_POINT:70,BE_FLOAT32_DIMENSIONS:71,BE_FLOAT32_RECT:72,BE_SIGNED_INT64:74,BE_UNSIGNED_INT8:75,BE_UNSIGNED_INT16:76,BE_UNSIGNED_INT32:77,BE_UNSIGNED_INT64:78,BE_FLOAT64_AFFINE_TRANSFORM:79},iU),BQ,Td=(BQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncodedPixelsDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},BQ.fourcc="enof",BQ),aQ,gd=(aQ=class extends V{constructor(){super(...arguments),this.box_name="IlstBox"}parse(U){this.list={};let F=this.size-this.hdr_size;for(;F>0;){const e=U.readUint32(),t=U.readUint32(),Q=z(U,!1,e-8);Q.code===v&&(this.list[t]=Q.box),F-=e}}},aQ.fourcc="ilst",aQ),dQ,Dd=(dQ=class extends o{constructor(){super(...arguments),this.box_name="KeysBox"}parse(U){this.parseFullHeader(U),this.count=U.readUint32(),this.keys={};for(let F=0;F<this.count;F++){const e=U.readUint32();this.keys[F+1]=U.readString(e-4)}}},dQ.fourcc="keys",dQ),rQ,xd=(rQ=class extends o{constructor(){super(...arguments),this.box_name="TrackProductionApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},rQ.fourcc="prof",rQ),RQ,bd=(RQ=class extends N{constructor(){super(...arguments),this.box_name="TrackApertureModeDimensionsBox",this.clefs=[],this.profs=[],this.enofs=[],this.subBoxNames=["clef","prof","enof"]}},RQ.fourcc="tapt",RQ),oQ,Md=(oQ=class extends N{constructor(){super(...arguments),this.box_name="siDecompressionParamBox"}},oQ.fourcc="wave",oQ),hQ,yd=(hQ=class extends V{constructor(){super(...arguments),this.box_name="rtpmoviehintinformation"}parse(U){this.descriptionformat=U.readString(4),this.sdptext=U.readString(this.size-this.hdr_size-4)}},hQ.fourcc="rtp ",hQ),VQ,Id=(VQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationOffsetsBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32());const F=U.readUint32();this.offset=[];for(let e=0;e<F;e++)this.version===0?this.offset[e]=U.readUint32():this.offset[e]=U.readUint64()}},VQ.fourcc="saio",VQ),JQ,wd=(JQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationSizesBox"}parse(U){if(this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32()),this.default_sample_info_size=U.readUint8(),this.sample_count=U.readUint32(),this.sample_info_size=[],this.default_sample_info_size===0)for(let F=0;F<this.sample_count;F++)this.sample_info_size[F]=U.readUint8()}},JQ.fourcc="saiz",JQ),vd=class{constructor(i,U){this.bad_pixel_row=i,this.bad_pixel_column=U}toString(){return"[row: "+this.bad_pixel_row+", column: "+this.bad_pixel_column+"]"}},SQ,_d=(SQ=class extends o{constructor(){super(...arguments),this.box_name="SensorBadPixelsMapBox"}parse(U){this.parseFullHeader(U),this.component_count=U.readUint16(),this.component_index=[];for(let e=0;e<this.component_count;e++)this.component_index.push(U.readUint16());const F=U.readUint8();this.correction_applied=(F&128)===128,this.num_bad_rows=U.readUint32(),this.num_bad_cols=U.readUint32(),this.num_bad_pixels=U.readUint32(),this.bad_rows=[],this.bad_columns=[],this.bad_pixels=[];for(let e=0;e<this.num_bad_rows;e++)this.bad_rows.push(U.readUint32());for(let e=0;e<this.num_bad_cols;e++)this.bad_columns.push(U.readUint32());for(let e=0;e<this.num_bad_pixels;e++){const t=U.readUint32(),Q=U.readUint32();this.bad_pixels.push(new vd(t,Q))}}},SQ.fourcc="sbpm",SQ),cQ,Hd=(cQ=class extends o{constructor(){super(...arguments),this.box_name="SchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readString(this.size-this.hdr_size-8))}},cQ.fourcc="schm",cQ),WQ,zd=(WQ=class extends V{constructor(){super(...arguments),this.box_name="rtptracksdphintinformation"}parse(U){this.sdptext=U.readString(this.size-this.hdr_size)}},WQ.fourcc="sdp ",WQ),pQ,Yd=(pQ=class extends o{constructor(){super(...arguments),this.box_name="SampleEncryptionBox"}},pQ.fourcc="senc",pQ),EQ,Gd=(EQ=class extends o{constructor(){super(...arguments),this.box_name="SMPTE2086MasteringDisplayMetadataBox"}parse(U){this.parseFullHeader(U),this.primaryRChromaticity_x=U.readUint16(),this.primaryRChromaticity_y=U.readUint16(),this.primaryGChromaticity_x=U.readUint16(),this.primaryGChromaticity_y=U.readUint16(),this.primaryBChromaticity_x=U.readUint16(),this.primaryBChromaticity_y=U.readUint16(),this.whitePointChromaticity_x=U.readUint16(),this.whitePointChromaticity_y=U.readUint16(),this.luminanceMax=U.readUint32(),this.luminanceMin=U.readUint32()}},EQ.fourcc="SmDm",EQ),NQ,Xd=(NQ=class extends o{constructor(){super(...arguments),this.box_name="SamplingRateBox"}parse(U){this.parseFullHeader(U),this.sampling_rate=U.readUint32()}},NQ.fourcc="srat",NQ),ZQ,Ld=(ZQ=class extends o{constructor(){super(...arguments),this.box_name="CompressedSubsegmentIndexBox"}parse(U){this.parseFullHeader(U),this.subsegments=[];const F=U.readUint32();for(let e=0;e<F;e++){const t={};this.subsegments.push(t),t.ranges=[];const Q=U.readUint32();for(let n=0;n<Q;n++){const s={};t.ranges.push(s),s.level=U.readUint8(),s.range_size=U.readUint24()}}}},ZQ.fourcc="ssix",ZQ),kQ,Od=(kQ=class extends o{constructor(){super(...arguments),this.box_name="DegradationPriorityBox"}parse(U){this.parseFullHeader(U);const F=(this.size-this.hdr_size)/2;this.priority=[];for(let e=0;e<F;e++)this.priority[e]=U.readUint16()}},kQ.fourcc="stpd",kQ),uQ,Ad=(uQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackInformationBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint16(),this.alternate_group=U.readUint16(),this.sub_track_id=U.readUint32();const F=(this.size-this.hdr_size-8)/4;this.attribute_list=[];for(let e=0;e<F;e++)this.attribute_list[e]=U.readUint32()}},uQ.fourcc="stri",uQ),fQ,jd=(fQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackSampleGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readUint32();const F=U.readUint16();this.group_description_index=[];for(let e=0;e<F;e++)this.group_description_index[e]=U.readUint32()}},fQ.fourcc="stsg",fQ),mQ,Kd=(mQ=class extends o{constructor(){super(...arguments),this.box_name="ShadowSyncSampleBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],this.version===0)for(let e=0;e<F;e++)this.shadowed_sample_numbers.push(U.readUint32()),this.sync_sample_numbers.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+8*this.shadowed_sample_numbers.length,this.writeHeader(U),U.writeUint32(this.shadowed_sample_numbers.length);for(let F=0;F<this.shadowed_sample_numbers.length;F++)U.writeUint32(this.shadowed_sample_numbers[F]),U.writeUint32(this.sync_sample_numbers[F])}},mQ.fourcc="stsh",mQ),CQ,Pd=(CQ=class extends o{constructor(){super(...arguments),this.box_name="SyncSampleBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();if(this.version===0){this.sample_numbers=[];for(let e=0;e<F;e++)this.sample_numbers.push(U.readUint32())}}write(U){this.version=0,this.flags=0,this.size=4+4*this.sample_numbers.length,this.writeHeader(U),U.writeUint32(this.sample_numbers.length),U.writeUint32Array(this.sample_numbers)}},CQ.fourcc="stss",CQ),TQ,qd=(TQ=class extends o{constructor(){super(...arguments),this.box_name="StereoVideoBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.single_view_allowed=F&3,this.stereo_scheme=U.readUint32();const e=U.readUint32();for(this.stereo_indication_type=U.readString(e),this.boxes=[];U.getPosition()<this.start+this.size;){const t=z(U,!1,this.size-(U.getPosition()-this.start));if(t.code===v){const Q=t.box;this.boxes.push(Q),this[Q.type]=Q}else return}}},TQ.fourcc="stvi",TQ),gQ,$d=(gQ=class extends V{constructor(){super(...arguments),this.box_name="SegmentTypeBox"}parse(U){let F=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),F-=8,this.compatible_brands=[];let e=0;for(;F>=4;)this.compatible_brands[e]=U.readString(4),F-=4,e++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let F=0;F<this.compatible_brands.length;F++)U.writeString(this.compatible_brands[F],void 0,4)}},gQ.fourcc="styp",gQ),DQ,Ur=(DQ=class extends o{constructor(){super(...arguments),this.box_name="CompactSampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.reserved=U.readUint24(),this.field_size=U.readUint8();const F=U.readUint32();if(this.field_size===4)for(let e=0;e<F;e+=2){const t=U.readUint8();this.sample_sizes[e]=t>>4&15,this.sample_sizes[e+1]=t&15}else if(this.field_size===8)for(let e=0;e<F;e++)this.sample_sizes[e]=U.readUint8();else if(this.field_size===16)for(let e=0;e<F;e++)this.sample_sizes[e]=U.readUint16();else R.error("BoxParser","Error in length field in stz2 box",U.isofile)}}},DQ.fourcc="stz2",DQ),xQ,Fr=(xQ=class extends o{constructor(){super(...arguments),this.box_name="SubSampleInformationBox"}parse(U){this.parseFullHeader(U);const F=U.readUint32();this.entries=[];let e;for(let t=0;t<F;t++){const Q={};if(this.entries[t]=Q,Q.sample_delta=U.readUint32(),Q.subsamples=[],e=U.readUint16(),e>0)for(let n=0;n<e;n++){const s={};Q.subsamples.push(s),this.version===1?s.size=U.readUint32():s.size=U.readUint16(),s.priority=U.readUint8(),s.discardable=U.readUint8(),s.codec_specific_parameters=U.readUint32()}}}},xQ.fourcc="subs",xQ),bQ,er=(bQ=class extends o{constructor(){super(...arguments),this.box_name="TAIClockInfoBox"}parse(U){this.time_uncertainty=U.readUint64(),this.clock_resolution=U.readUint32(),this.clock_drift_rate=U.readInt32();const F=U.readUint8();this.clock_type=(F&192)>>6}},bQ.fourcc="taic",bQ),MQ,tr=(MQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncryptionBox"}parse(U){if(this.parseFullHeader(U),U.readUint8(),this.version===0)U.readUint8();else{const F=U.readUint8();this.default_crypt_byte_block=F>>4&15,this.default_skip_byte_block=F&15}this.default_isProtected=U.readUint8(),this.default_Per_Sample_IV_Size=U.readUint8(),this.default_KID=P(U),this.default_isProtected===1&&this.default_Per_Sample_IV_Size===0&&(this.default_constant_IV_size=U.readUint8(),this.default_constant_IV=U.readUint8Array(this.default_constant_IV_size))}},MQ.fourcc="tenc",MQ),yQ,Qr=(yQ=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentRandomAccessBox"}parse(U){this.parseFullHeader(U),this.track_ID=U.readUint32(),U.readUint24();const F=U.readUint8();this.length_size_of_traf_num=F>>4&3,this.length_size_of_trun_num=F>>2&3,this.length_size_of_sample_num=F&3,this.entries=[];const e=U.readUint32();for(let t=0;t<e;t++)this.version===1?(this.time=U.readUint64(),this.moof_offset=U.readUint64()):(this.time=U.readUint32(),this.moof_offset=U.readUint32()),this.traf_number=U["readUint"+8*(this.length_size_of_traf_num+1)](),this.trun_number=U["readUint"+8*(this.length_size_of_trun_num+1)](),this.sample_number=U["readUint"+8*(this.length_size_of_sample_num+1)]()}},yQ.fourcc="tfra",yQ),IQ,ir=(IQ=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrelativetime"}parse(U){this.time=U.readUint32()}},IQ.fourcc="tmax",IQ),wQ,nr=(wQ=class extends V{constructor(){super(...arguments),this.box_name="hintminrelativetime"}parse(U){this.time=U.readUint32()}},wQ.fourcc="tmin",wQ),vQ,sr=(vQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},vQ.fourcc="totl",vQ),_Q,lr=(_Q=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},_Q.fourcc="tpay",_Q),HQ,Br=(HQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},HQ.fourcc="tpyl",HQ),zQ,ar=(zQ=class extends Ul{},zQ.fourcc="msrc",zQ),K,dr=(K=class extends V{constructor(){super(...arguments),this.box_name="TrackReferenceBox",this.references=[]}parse(U){for(;U.getPosition()<this.start+this.size;){const F=z(U,!0,this.size-(U.getPosition()-this.start));if(F.code===v){K.allowed_types.includes(F.type)||R.warn("BoxParser",`Unknown track reference type: '${F.type}'`);const e=new tl(F.type,F.size,F.hdr_size,F.start);e.write===V.prototype.write&&e.type!=="mdat"&&(R.info("BoxParser","TrackReference "+e.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(U)),e.parse(U),this.references.push(e)}else return}}},K.fourcc="tref",K.allowed_types=["hint","cdsc","font","hind","vdep","vplx","subt","thmb","auxl","cdtg","shsc","aest"],K),YQ,rr=(YQ=class extends o{constructor(){super(...arguments),this.box_name="TrackExtensionPropertiesBox"}parse(U){for(this.parseFullHeader(U),this.track_ID=U.readUint32(),this.boxes=[];U.getPosition()<this.start+this.size;){const F=z(U,!1,this.size-(U.getPosition()-this.start));if(F.code===v){const e=F.box;this.boxes.push(e)}else return}}},YQ.fourcc="trep",YQ),GQ,Rr=(GQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},GQ.fourcc="trpy",GQ),XQ,or=(XQ=class extends o{constructor(){super(...arguments),this.box_name="TrackSelectionBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint32();const F=(this.size-this.hdr_size-4)/4;this.attribute_list=[];for(let e=0;e<F;e++)this.attribute_list[e]=U.readUint32()}},XQ.fourcc="tsel",XQ),LQ,hr=(LQ=class extends o{constructor(){super(...arguments),this.box_name="TextConfigBox"}parse(U){this.parseFullHeader(U),this.config=U.readCString()}},LQ.fourcc="txtc",LQ),OQ,Vr=(OQ=class extends V{constructor(){super(...arguments),this.box_name="TypeCombinationBox"}parse(U){const F=(this.size-this.hdr_size)/4;this.compatible_brands=[];for(let e=0;e<F;e++)this.compatible_brands[e]=U.readString(4)}},OQ.fourcc="tyco",OQ),AQ,Jr=(AQ=class extends o{constructor(){super(...arguments),this.box_name="UserDescriptionProperty"}parse(U){this.parseFullHeader(U),this.lang=U.readCString(),this.name=U.readCString(),this.description=U.readCString(),this.tags=U.readCString()}},AQ.fourcc="udes",AQ),jQ,Sr=(jQ=class extends o{constructor(){super(...arguments),this.box_name="UncompressedFrameConfigBox"}parse(U){if(this.parseFullHeader(U),this.profile=U.readString(4),this.version!==1){if(this.version===0){this.component_count=U.readUint32(),this.component_index=[],this.component_bit_depth_minus_one=[],this.component_format=[],this.component_align_size=[];for(let e=0;e<this.component_count;e++)this.component_index.push(U.readUint16()),this.component_bit_depth_minus_one.push(U.readUint8()),this.component_format.push(U.readUint8()),this.component_align_size.push(U.readUint8());this.sampling_type=U.readUint8(),this.interleave_type=U.readUint8(),this.block_size=U.readUint8();const F=U.readUint8();this.component_little_endian=F>>7&1,this.block_pad_lsb=F>>6&1,this.block_little_endian=F>>5&1,this.block_reversed=F>>4&1,this.pad_unknown=F>>3&1,this.pixel_size=U.readUint32(),this.row_align_size=U.readUint32(),this.tile_align_size=U.readUint32(),this.num_tile_cols_minus_one=U.readUint32(),this.num_tile_rows_minus_one=U.readUint32()}}}},jQ.fourcc="uncC",jQ),KQ,cr=(KQ=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrnBox"}parse(U){this.parseFullHeader(U),this.name=U.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.name.length+1+(this.location?this.location.length+1:0),this.writeHeader(U),U.writeCString(this.name),this.location&&U.writeCString(this.location)}},KQ.fourcc="urn ",KQ),PQ,Wr=(PQ=class extends V{constructor(){super(...arguments),this.box_name="WebVTTConfigurationBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},PQ.fourcc="vttC",PQ),qQ,pr=(qQ=class extends o{constructor(){super(...arguments),this.box_name="VvcNALUConfigBox"}parse(U){this.parseFullHeader(U);const F=U.readUint8();this.lengthSizeMinusOne=F&3}},qQ.fourcc="vvnC",qQ),$Q,Er=($Q=class extends C{parse(U){const F=U.readUint16();this.first_output_sample=U.readUint16(),this.sample_offset=[];for(let t=0;t<F;t++)this.sample_offset[t]=U.readUint32();const e=this.description_length-4-4*F;this.num_output_samples=[],this.num_total_samples=[];for(let t=0;t<e/4;t++)this.num_output_samples[t]=U.readUint16(),this.num_total_samples[t]=U.readUint16()}},$Q.grouping_type="alst",$Q),Ui,Nr=(Ui=class extends C{parse(U){this.layerNumber=U.readUint8(),this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()}},Ui.grouping_type="avll",Ui),Fi,Zr=(Fi=class extends C{parse(U){this.subSequenceIdentifier=U.readUint16(),this.layerNumber=U.readUint8();const F=U.readUint8();this.durationFlag=F>>7,this.avgRateFlag=F>>6&1,this.durationFlag&&(this.duration=U.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()),this.dependency=[];const e=U.readUint8();for(let t=0;t<e;t++)this.dependency.push({subSeqDirectionFlag:U.readUint8(),layerNumber:U.readUint8(),subSequenceIdentifier:U.readUint16()})}},Fi.grouping_type="avss",Fi),ei,kr=(ei=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ei.grouping_type="dtrt",ei),ti,ur=(ti=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ti.grouping_type="mvif",ti),Qi,fr=(Qi=class extends C{parse(U){this.roll_distance=U.readInt16()}},Qi.grouping_type="prol",Qi),ii,mr=(ii=class extends C{parse(U){const F=U.readUint8();this.num_leading_samples_known=F>>7,this.num_leading_samples=F&127}},ii.grouping_type="rap ",ii),ni,Cr=(ni=class extends C{parse(U){if(this.operation_point_count=U.readUint16(),this.description_length!==2+(this.operation_point_count===1?2:this.operation_point_count*6)+9)R.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=U.readUint8Array(this.description_length-2);else{if(this.operation_point_count===1)this.target_rate_share=U.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(let F=0;F<this.operation_point_count;F++)this.available_bitrate[F]=U.readUint32(),this.target_rate_share[F]=U.readUint16()}this.maximum_bitrate=U.readUint32(),this.minimum_bitrate=U.readUint32(),this.discard_priority=U.readUint8()}}},ni.grouping_type="rash",ni),si,Tr=(si=class extends C{parse(U){this.roll_distance=U.readInt16()}},si.grouping_type="roll",si),li,gr=(li=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},li.grouping_type="scif",li),Bi,Dr=(Bi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Bi.grouping_type="scnm",Bi),ai,xr=(ai=class extends C{parse(U){this.reserved=U.readUint8();const F=U.readUint8();this.crypt_byte_block=F>>4,this.skip_byte_block=F&15,this.isProtected=U.readUint8(),this.Per_Sample_IV_Size=U.readUint8(),this.KID=P(U),this.constant_IV_size=0,this.constant_IV=0,this.isProtected===1&&this.Per_Sample_IV_Size===0&&(this.constant_IV_size=U.readUint8(),this.constant_IV=U.readUint8Array(this.constant_IV_size))}},ai.grouping_type="seig",ai),di,br=(di=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},di.grouping_type="stsa",di),ri,Mr=(ri=class extends C{parse(U){const F=U.readUint8();this.NAL_unit_type=F&63}},ri.grouping_type="sync",ri),Ri,yr=(Ri=class extends C{parse(U){const F=U.readUint8();this.level_independently_decodable=F>>7}},Ri.grouping_type="tele",Ri),oi,Ir=(oi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},oi.grouping_type="tsas",oi),hi,wr=(hi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},hi.grouping_type="tscl",hi),Vi,vr=(Vi=class extends C{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Vi.grouping_type="vipr",Vi),Ji,_r=(Ji=class extends V{},Ji.fourcc="uuid",Ji),Si,nU=(Si=class extends o{},Si.fourcc="uuid",Si),ci,Hr=(ci=class extends nU{constructor(){super(...arguments),this.box_name="LiveServerManifestBox"}parse(U){this.parseFullHeader(U),this.LiveServerManifest=U.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}},ci.uuid="a5d40b30e81411ddba2f0800200c9a66",ci),Wi,zr=(Wi=class extends nU{constructor(){super(...arguments),this.box_name="PiffProtectionSystemSpecificHeaderBox"}parse(U){this.parseFullHeader(U),this.system_id=P(U);const F=U.readUint32();F>0&&(this.data=U.readUint8Array(F))}},Wi.uuid="d08a4f1810f34a82b6c832d8aba183d3",Wi),pi,Yr=(pi=class extends nU{constructor(){super(...arguments),this.box_name="PiffSampleEncryptionBox"}},pi.uuid="a2394f525a9b4f14a2446c427c648df4",pi),Ei,Gr=(Ei=class extends nU{constructor(){super(...arguments),this.box_name="PiffTrackEncryptionBox"}parse(U){this.parseFullHeader(U),this.default_AlgorithmID=U.readUint24(),this.default_IV_size=U.readUint8(),this.default_KID=P(U)}},Ei.uuid="8974dbce7be74c5184f97148f9882554",Ei),Ni,Xr=(Ni=class extends nU{constructor(){super(...arguments),this.box_name="TfrfBox"}parse(U){this.parseFullHeader(U),this.fragment_count=U.readUint8(),this.entries=[];for(let F=0;F<this.fragment_count;F++){let e=0,t=0;this.version===1?(e=U.readUint64(),t=U.readUint64()):(e=U.readUint32(),t=U.readUint32()),this.entries.push({absolute_time:e,absolute_duration:t})}}},Ni.uuid="d4807ef2ca3946958e5426cb9e46a79f",Ni),Zi,Lr=(Zi=class extends nU{constructor(){super(...arguments),this.box_name="TfxdBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.absolute_time=U.readUint64(),this.duration=U.readUint64()):(this.absolute_time=U.readUint32(),this.duration=U.readUint32())}},Zi.uuid="6d1d9b0542d544e680e2141daff757b2",Zi),ki,Or=(ki=class extends _r{constructor(){super(...arguments),this.box_name="ItemContentIDProperty"}parse(U){this.content_id=U.readCString()}},ki.uuid="261ef3741d975bbaacbd9d2c8ea73522",ki);Bl(gs);al(us);class an{constructor(U={}){d(this,"mp4File",null);d(this,"fileInfo",null);d(this,"videoTrackId",null);d(this,"audioTrackId",null);d(this,"videoTrack",null);d(this,"audioTrack",null);d(this,"nextVideoSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"totalVideoSamples",0);d(this,"totalAudioSamples",0);d(this,"samplesRequested",!1);d(this,"fileSize",0);d(this,"loadedBytes",0);d(this,"videoDescription",null);d(this,"audioDescription",null);d(this,"events",{});this.events=U}getFileInfo(){return this.fileInfo}getVideoDescription(){return this.videoDescription}getAudioDescription(){return this.audioDescription}async loadFromUrl(U){const F=await fetch(U);if(!F.ok)throw new Error(`Failed to fetch file: ${F.status} ${F.statusText}`);const e=await F.arrayBuffer();return this.fileSize=e.byteLength,this.loadFromArrayBuffer(e)}async loadFromFile(U){this.fileSize=U.size;const F=await U.arrayBuffer();return this.loadFromArrayBuffer(F)}async loadFromStream(U){this.initMP4File();let F=0;return new Promise((e,t)=>{const Q=s=>{var B,a,r;const l=new ArrayBuffer(s.byteLength);new Uint8Array(l).set(s),l.fileStart=F,F+=l.byteLength,this.loadedBytes=F,(a=(B=this.events).onProgress)==null||a.call(B,this.loadedBytes,this.fileSize),(r=this.mp4File)==null||r.appendBuffer(l)},n=async()=>{var s;try{const{done:l,value:B}=await U.read();if(l){(s=this.mp4File)==null||s.flush(),this.fileInfo?e(this.fileInfo):t(new Error("File loaded but no video track found"));return}B&&Q(B),n()}catch(l){t(l)}};n()})}async loadFromArrayBuffer(U){return this.initMP4File(),new Promise((F,e)=>{var n,s;const t=this.mp4File.onReady;this.mp4File.onReady=l=>{t==null||t.call(this.mp4File,l),this.fileInfo?(this.requestSamples(),F(this.fileInfo)):e(new Error("No video track found in file"))};const Q=U;Q.fileStart=0,this.loadedBytes=U.byteLength,(n=this.mp4File)==null||n.appendBuffer(Q),(s=this.mp4File)==null||s.flush()})}initMP4File(){this.mp4File=Ua(),this.mp4File.onReady=U=>{this.handleFileReady(U)},this.mp4File.onSamples=(U,F,e)=>{this.handleSamples(U,e)},this.mp4File.onError=(U,F)=>{var t,Q;if(F.includes("Invalid box type")||F.includes("Unknown box")){console.warn(`[MP4FileSource] Ignoring unknown box: ${F}`);return}const e=new Error(`MP4Box error in ${U}: ${F}`);(Q=(t=this.events).onError)==null||Q.call(t,e)}}handleFileReady(U){var F,e,t,Q,n,s,l,B,a,r,h,J,E,S,Z,u,f,k,b,D,c,_,T,I,W,UU,cn,Wn,pn;if(U.videoTracks.length>0){this.videoTrack=U.videoTracks[0],this.videoTrackId=this.videoTrack.id,this.totalVideoSamples=this.videoTrack.nb_samples;const sU=(F=this.mp4File)==null?void 0:F.getTrackById(this.videoTrackId);if(sU){const FU=(s=(n=(Q=(t=(e=sU.mdia)==null?void 0:e.minf)==null?void 0:t.stbl)==null?void 0:Q.stsd)==null?void 0:n.entries)==null?void 0:s[0];if(FU){const H=FU.avcC,Y=FU.hvcC;H?this.videoDescription=this.serializeAvcC(H):Y&&(this.videoDescription=this.serializeHvcC(Y))}}}if(U.audioTracks.length>0){this.audioTrack=U.audioTracks[0],this.audioTrackId=this.audioTrack.id,this.totalAudioSamples=this.audioTrack.nb_samples;const sU=(l=this.mp4File)==null?void 0:l.getTrackById(this.audioTrackId);if(sU){const FU=(J=(h=(r=(a=(B=sU.mdia)==null?void 0:B.minf)==null?void 0:a.stbl)==null?void 0:r.stsd)==null?void 0:h.entries)==null?void 0:J[0];if(FU){const H=FU.esds;if(H){let Y=null;if((f=(u=(Z=(S=(E=H.esd)==null?void 0:E.descs)==null?void 0:S[0])==null?void 0:Z.descs)==null?void 0:u[0])!=null&&f.data)Y=H.esd.descs[0].descs[0].data;else if((D=(b=(k=H.esd)==null?void 0:k.descs)==null?void 0:b[0])!=null&&D.data)Y=H.esd.descs[0].data;else if((c=H.esd)!=null&&c.descs)for(const Li of H.esd.descs){if(Li.tag===4&&Li.descs){for(const Oi of Li.descs)if(Oi.tag===5&&Oi.data){Y=Oi.data;break}}if(Y)break}Y&&(this.audioDescription=Y)}}}}if(!this.videoTrack){(T=(_=this.events).onError)==null||T.call(_,new Error("No video track found in file"));return}this.fileInfo={duration:this.videoTrack.duration/this.videoTrack.timescale,timescale:this.videoTrack.timescale,width:((I=this.videoTrack.video)==null?void 0:I.width)??0,height:((W=this.videoTrack.video)==null?void 0:W.height)??0,videoCodec:this.videoTrack.codec,frameRate:this.videoTrack.nb_samples/(this.videoTrack.duration/this.videoTrack.timescale),bitrate:this.videoTrack.bitrate},this.audioTrack&&(this.fileInfo.audioCodec=this.audioTrack.codec,this.fileInfo.audioChannels=(UU=this.audioTrack.audio)==null?void 0:UU.channel_count,this.fileInfo.audioSampleRate=(cn=this.audioTrack.audio)==null?void 0:cn.sample_rate),this.requestSamples(),(pn=(Wn=this.events).onReady)==null||pn.call(Wn,this.fileInfo)}requestSamples(){var U,F,e;this.samplesRequested||(this.samplesRequested=!0,this.videoTrackId!==null&&((U=this.mp4File)==null||U.setExtractionOptions(this.videoTrackId,null,{nbSamples:this.totalVideoSamples})),this.audioTrackId!==null&&((F=this.mp4File)==null||F.setExtractionOptions(this.audioTrackId,null,{nbSamples:this.totalAudioSamples})),(e=this.mp4File)==null||e.start())}handleSamples(U,F){var n,s,l,B;const e=U===this.videoTrackId;if(!(e?this.videoTrack:this.audioTrack))return;const Q=F.filter(a=>a.data?!0:(console.warn(`[MP4FileSource] Sample ${a.number} has no data`),!1)).map(a=>{const r=a.cts/a.timescale*1e6,h=a.duration/a.timescale*1e6;return{data:a.data,timestamp:r,duration:h,isKeyframe:a.is_sync,type:e?"video":"audio"}});if(e?(this.nextVideoSampleIndex+=F.length,this.nextVideoSampleIndex>=this.totalVideoSamples&&((s=(n=this.events).onEnded)==null||s.call(n))):this.nextAudioSampleIndex+=F.length,this.mp4File){const a=F[F.length-1];this.mp4File.releaseUsedSamples(U,a.number)}(B=(l=this.events).onSamples)==null||B.call(l,Q)}seek(U){if(!this.mp4File||!this.videoTrackId)return 0;const F=this.mp4File.seek(U,!0);return this.nextVideoSampleIndex=0,this.nextAudioSampleIndex=0,this.samplesRequested=!1,this.mp4File.stop(),this.requestSamples(),F.time}getPosition(){return{currentSample:this.nextVideoSampleIndex,totalSamples:this.totalVideoSamples,progress:this.totalVideoSamples>0?this.nextVideoSampleIndex/this.totalVideoSamples:0}}stop(){var U;(U=this.mp4File)==null||U.stop()}start(){var U;(U=this.mp4File)==null||U.start()}dispose(){var U;(U=this.mp4File)==null||U.stop(),this.mp4File=null,this.fileInfo=null,this.videoTrack=null,this.audioTrack=null,this.videoDescription=null}serializeAvcC(U){let F=6;const e=U.SPS||[];for(const s of e)F+=2+s.data.length;F+=1;const t=U.PPS||[];for(const s of t)F+=2+s.data.length;const Q=new Uint8Array(F);let n=0;Q[n++]=U.configurationVersion||1,Q[n++]=U.AVCProfileIndication,Q[n++]=U.profile_compatibility,Q[n++]=U.AVCLevelIndication,Q[n++]=255,Q[n++]=224|e.length;for(const s of e){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}Q[n++]=t.length;for(const s of t){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}return Q}serializeHvcC(U){return U.data&&U.data instanceof Uint8Array?U.data:(console.warn("HEVC serialization not fully implemented"),new Uint8Array(0))}}const Ar=`
|
|
151
|
+
`;class _n{constructor(U,e={}){r(this,"ctx");r(this,"decoder",null);r(this,"workletNode",null);r(this,"gainNode");r(this,"initialized",!1);r(this,"targetSampleRate");r(this,"startTime",0);r(this,"bufferDelayMs");this.ctx=U,this.targetSampleRate=U.sampleRate,this.bufferDelayMs=e.bufferDelayMs??100,this.gainNode=this.ctx.createGain(),this.startTime=performance.now()*1e3}async init(U){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");const e=this.buildDecoderConfig(U);if(!(await AudioDecoder.isConfigSupported(e)).supported)throw new Error(`Audio codec not supported: ${e.codec}`);this.decoder=new AudioDecoder({output:n=>this.handleDecodedFrame(n),error:n=>{console.error("LiveAudioPlayer decoder error:",n)}}),this.decoder.configure(e);const t=new Blob([Os],{type:"application/javascript"}),Q=URL.createObjectURL(t);try{await this.ctx.audioWorklet.addModule(Q)}finally{URL.revokeObjectURL(Q)}this.workletNode=new AudioWorkletNode(this.ctx,"live-audio-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setBufferTarget",targetMs:this.bufferDelayMs}),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}buildDecoderConfig(U){const e=(U==null?void 0:U.codec_type)??aU.AUDIO_OPUS,F=(U==null?void 0:U.sample_rate)||48e3,t=(U==null?void 0:U.channels)||2;switch(e){case aU.AUDIO_OPUS:return{codec:"opus",sampleRate:48e3,numberOfChannels:t};case aU.AUDIO_AAC:return{codec:"mp4a.40.2",sampleRate:F,numberOfChannels:t};case aU.AUDIO_PCM:throw new Error("PCM audio not yet supported");default:return{codec:"opus",sampleRate:48e3,numberOfChannels:2}}}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const e=U.numberOfFrames;let F=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),F=U.numberOfChannels)}catch{F=1}const t=new Float32Array(e),Q=new Float32Array(e);if(F===1){const B=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),a=new ArrayBuffer(B);U.copyTo(a,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const d=new Float32Array(a);if(U.numberOfChannels===1)t.set(d),Q.set(d);else for(let h=0;h<e;h++)t[h]=d[h*2],Q[h]=d[h*2+1]}else{const B=new ArrayBuffer(U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}));if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=new ArrayBuffer(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}));U.copyTo(a,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(a))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate),l=U.timestamp??performance.now()*1e3-this.startTime;this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer},timestamp:l},[n.buffer,s.buffer]),U.close()}catch(e){console.error("Error processing live audio frame:",e),U.close()}}resampleAudio(U,e,F){if(e===F)return U;const t=e/F,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),d=l-B;n[s]=U[B]*(1-d)+U[a]*d}return n}decode(U,e){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured")&&!(U.length<1))try{const F=e!==void 0?Number(e):performance.now()*1e3-this.startTime,t=new EncodedAudioChunk({type:"key",timestamp:Math.max(0,F),data:U});this.decoder.decode(t)}catch(F){console.error("Error decoding live audio:",F)}}setBufferDelay(U){var e;this.bufferDelayMs=U,(e=this.workletNode)==null||e.port.postMessage({type:"setBufferTarget",targetMs:U})}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"}),this.resetTiming()}resetTiming(){this.startTime=performance.now()*1e3}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}if(this.gainNode)try{this.gainNode.disconnect()}catch{}}}function As(i={}){return new zn(i)}class zn extends rn{constructor(e={}){super("idle",e.debugLogging??!1);r(this,"config");r(this,"streamSource",null);r(this,"trackFilter",null);r(this,"boundDataHandler",null);r(this,"decoder",null);r(this,"currentCodecData");r(this,"useWasmDecoder",!1);r(this,"waitingForKeyframe",!0);r(this,"lastWaitingForKeyframeLog",0);r(this,"lastKeyframeRequest",0);r(this,"statusLogCounter",0);r(this,"isConfiguring",!1);r(this,"pendingDuringConfig",[]);r(this,"frameScheduler");r(this,"lastVideoFrame",null);r(this,"consecutiveDrops",0);r(this,"totalDrops",0);r(this,"lastDropLogTime",0);r(this,"streamWidth",0);r(this,"streamHeight",0);r(this,"estimatedFrameRate",0);r(this,"audioContext",null);r(this,"audioPlayer",null);r(this,"ownsAudioContext",!1);r(this,"audioCodecData",null);r(this,"arrivalTimes",new Map);this.config={preferredDecoder:e.preferredDecoder??"webcodecs-sw",bufferDelayMs:e.bufferDelayMs??100,enableAudio:e.enableAudio??!0,videoTrackName:e.videoTrackName===void 0?"video":e.videoTrackName,audioTrackName:e.audioTrackName===void 0?"audio":e.audioTrackName,debugLogging:e.debugLogging??!1},this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.frameScheduler=new vn({bufferDelayMs:this.config.bufferDelayMs,logger:F=>{this.config.debugLogging&&this.logger.info(F)},onFrameDropped:(F,t)=>{if(this.totalDrops++,this.consecutiveDrops++,this.config.debugLogging){const Q=Date.now();(Q-this.lastDropLogTime>500||this.consecutiveDrops===1)&&(this.consecutiveDrops>1?this.logger.warn(`Dropped ${this.consecutiveDrops} frames (${t}), total=${this.totalDrops}`):this.logger.warn(`Frame dropped (${t}), total=${this.totalDrops}`),this.lastDropLogTime=Q,this.consecutiveDrops=0)}F.close()}})}setDebugLogging(e){this.config.debugLogging=e,super.setDebugLogging(e)}setVolume(e){this.audioPlayer&&this.audioPlayer.setVolume(e)}getVolume(){return 1}setStreamSource(e){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=e,this.boundDataHandler=this.handleStreamData.bind(this),this.streamSource.on("data",this.boundDataHandler),this.logger.info("Stream source connected")}setTrackFilter(e){this.trackFilter=e,this.logger.info(`Track filter set: ${e}`)}connectToMoQSession(e,F){this.setStreamSource(e),F&&this.setTrackFilter(F)}async connectToMoQRelay(e,F,t){const{createStandaloneMoQSource:Q}=await Promise.resolve().then(()=>Kr),n=(t==null?void 0:t.videoTrack)??this.config.videoTrackName??"video",s=(t==null?void 0:t.audioTrack)===!1?null:(t==null?void 0:t.audioTrack)??this.config.audioTrackName??"audio",l=[{trackName:n,streamType:"video",priority:0}];s&&this.config.enableAudio&&l.push({trackName:s,streamType:"audio",priority:0}),this.logger.info(`MoQ subscriptions: ${JSON.stringify(l)}`);const B=Q({relayUrl:e,namespace:F,subscriptions:l});this.setStreamSource(B),await B.connect()}play(){this._state!=="error"&&(this.setState("playing"),this.logger.info("Playback started"))}pause(){this._state==="playing"&&(this.setState("paused"),this.logger.info("Playback paused"))}getVideoFrame(e){if(this._state!=="playing")return this.config.debugLogging&&this.logger.debug(`getVideoFrame: state=${this._state}, returning lastFrame=${!!this.lastVideoFrame}`),this.lastVideoFrame;this.config.debugLogging&&(this.statusLogCounter++,this.statusLogCounter>=300&&(this.frameScheduler.logStatus(),this.statusLogCounter=0));const F=this.frameScheduler.dequeue(e);return F&&(this.consecutiveDrops=0,this.lastVideoFrame&&this.lastVideoFrame!==F&&this.lastVideoFrame.close(),this.lastVideoFrame=F),this.lastVideoFrame}setBufferDelay(e){var F;this.config.bufferDelayMs=e,this.frameScheduler.setBufferDelay(e),(F=this.audioPlayer)==null||F.setBufferDelay(e)}getBufferDelay(){return this.frameScheduler.getBufferDelay()}setPreferredDecoder(e){var n,s,l,B;const F=this.config.preferredDecoder;this.config.preferredDecoder=e,F==="wasm"!==(e==="wasm")&&this.decoder?(this.logger.info(`Decoder type changed from ${F} to ${e}, switching decoder...`),this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.waitingForKeyframe=!0,this.currentCodecData=void 0,(s=(n=this.streamSource)==null?void 0:n.requestKeyframe)==null||s.call(n),this.logger.info("Keyframe requested for decoder switch")):F!==e&&this.decoder&&(this.logger.info(`Decoder preference changed from ${F} to ${e}`),this.waitingForKeyframe=!0,this.currentCodecData=void 0,this.decoder.dispose(),this.decoder=null,this.frameScheduler.clear(),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l))}flush(){var e,F,t;this.logger.info("Flushing player pipeline"),this.waitingForKeyframe=!0,(e=this.decoder)==null||e.flushSync(),this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=(F=this.streamSource)==null?void 0:F.requestKeyframe)==null||t.call(F)}getStats(){var F;const e=this.frameScheduler.getStatus();return{bufferSize:e.currentBufferSize,bufferMs:e.currentBufferMs,avgBufferMs:e.avgBufferMs,targetBufferMs:e.targetBufferMs,droppedFrames:e.droppedFrames,totalFrames:e.totalEnqueuedFrames,decoderState:((F=this.decoder)==null?void 0:F.state)??"none",streamWidth:this.streamWidth,streamHeight:this.streamHeight,frameRate:this.estimatedFrameRate,latency:e.latency}}on(e,F){super.on(e,F)}off(e,F){super.off(e,F)}async handleStreamData(e){var s,l,B,a,d;const F=e.data;if(!F.valid||!F.header)return;if(F.header.type===_i.AUDIO_FRAME||e.streamType==="audio"){const h=this.config.audioTrackName;if(h!=null&&e.trackName!==h&&e.streamType!=="audio")return;await this.handleAudioData(F);return}const Q=this.trackFilter??this.config.videoTrackName;if(Q!=null&&e.trackName!==Q||e.streamType!=="video"||!F.codec_data)return;const n=!!(F.header.flags&In);if(n&&this.logger.info(`Keyframe received: ${F.codec_data.width}x${F.codec_data.height}`),fn(this.currentCodecData,F.codec_data)){if(!n){this.logger.debug("Waiting for keyframe (codec change)");return}this.currentCodecData=F.codec_data,this.isConfiguring=!0,this.pendingDuringConfig=[F],await this.configureDecoder(F.codec_data),this.isConfiguring=!1,this.waitingForKeyframe=!0;const h=this.pendingDuringConfig;this.pendingDuringConfig=[],this.logger.info(`Processing ${h.length} frames queued during configuration`);for(const J of h)await this.handleStreamData({trackName:e.trackName,streamType:e.streamType,data:J});return}if(this.isConfiguring){this.logger.debug(`Queueing frame pts=${F.header.pts} during configuration`),this.pendingDuringConfig.push(F);return}if(!this.decoder||this.decoder.state!=="configured"){this.logger.warn(`Dropping frame pts=${F.header.pts}: decoder not ready (state=${((s=this.decoder)==null?void 0:s.state)??"null"})`);return}if(this.waitingForKeyframe){if(!n){this.logger.debug(`Dropping frame pts=${F.header.pts}: waiting for keyframe`);const h=Date.now();(!this.lastWaitingForKeyframeLog||h-this.lastWaitingForKeyframeLog>1e3)&&(this.logger.info("Waiting for keyframe to resume playback..."),this.lastWaitingForKeyframeLog=h,(!this.lastKeyframeRequest||h-this.lastKeyframeRequest>1e3)&&(this.logger.info("Requesting keyframe..."),(B=(l=this.streamSource)==null?void 0:l.requestKeyframe)==null||B.call(l),this.lastKeyframeRequest=h));return}this.logger.info("Keyframe received, resuming decode"),this.waitingForKeyframe=!1,this.lastWaitingForKeyframeLog=0}try{const h=performance.now(),J=(a=F.codec_data)!=null&&a.timebase_den&&((d=F.codec_data)!=null&&d.timebase_num)?{num:F.codec_data.timebase_num,den:F.codec_data.timebase_den}:{num:1,den:1e6},c={num:1,den:1e6},S=on(F.header.pts,J,c);if(this.arrivalTimes.set(S,h),this.arrivalTimes.size>100){const N=[...this.arrivalTimes.entries()];for(let f=0;f<N.length-100;f++)this.arrivalTimes.delete(N[f][0])}this.decoder.decodeBinary(F)}catch(h){this.logger.error(`Decode error: ${h}`)}}async handleAudioData(e){if(!this.config.enableAudio)return;const F=this.audioCodecData??void 0;e.codec_data&&fn(F,e.codec_data)&&(this.audioCodecData=e.codec_data,this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.audioContext||(this.audioContext=new AudioContext,this.ownsAudioContext=!0),this.audioPlayer=new _n(this.audioContext,{bufferDelayMs:this.config.bufferDelayMs??100}),await this.audioPlayer.init(e.codec_data),this.audioPlayer.start(),this.logger.info(`Audio player started: ${e.codec_data.codec_type}, ${e.codec_data.sample_rate}Hz, ${e.codec_data.channels}ch`)),this.audioPlayer&&e.payload&&e.header&&this.audioPlayer.decode(e.payload,e.header.pts)}async configureDecoder(e){this.useWasmDecoder=this.config.preferredDecoder==="wasm",(!this.decoder||this.useWasmDecoder&&this.decoder instanceof zi||!this.useWasmDecoder&&this.decoder instanceof tn)&&(this.decoder&&this.decoder.dispose(),this.useWasmDecoder?(this.logger.info("Using WASM decoder"),this.decoder=new tn({onFrameDecoded:t=>this.handleDecodedYUVFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})):(this.logger.info(`Using WebCodecs decoder (${this.config.preferredDecoder})`),this.decoder=new zi({logger:this.logger,onFrameDecoded:t=>this.handleDecodedFrame(t),onError:t=>this.handleDecoderError(t),onQueueOverflow:t=>this.handleQueueOverflow(t),maxQueueSize:10})));const F=this.config.preferredDecoder==="webcodecs-hw";try{this.useWasmDecoder?await this.decoder.configure(e):await this.decoder.configure(e,F),this.streamWidth=e.width,this.streamHeight=e.height,e.timebase_num&&e.timebase_den&&(this.estimatedFrameRate=e.timebase_den/e.timebase_num),this.emit("metadata",{width:e.width,height:e.height,codec:this.getCodecName(e.codec_type)})}catch(t){this.logger.error(`Failed to configure decoder: ${t}`),this.setState("error"),this.emit("error",t instanceof Error?t:new Error(String(t)))}}getCodecName(e){switch(e){case 3:return"H.264";case 4:return"HEVC";case 5:return"AV1";default:return"Unknown"}}handleDecodedFrame(e){const F=performance.now(),Q={arrivalTime:this.arrivalTimes.get(e.timestamp)??F,decodeTime:F};this.frameScheduler.enqueue(e,e.timestamp,Q),this.emit("frame",e)}handleDecodedYUVFrame(e){const F=performance.now(),t=this.arrivalTimes.get(e.timestamp)??F,Q=this.convertYUVToVideoFrame(e,this.streamWidth,this.streamHeight);if(Q){const n={arrivalTime:t,decodeTime:F};this.frameScheduler.enqueue(Q,e.timestamp,n),this.emit("frame",Q)}}convertYUVToVideoFrame(e,F,t){try{const{y:Q,u:n,v:s,width:l,height:B,chromaStride:a,chromaHeight:d}=e,h=F>0?F:l,J=t>0?t:B,S=l*B,N=a*d,f=S+N*2,C=new Uint8Array(f);C.set(Q.subarray(0,S),0);const k=l/2,b=S;if(a===k)C.set(n.subarray(0,N),b);else for(let W=0;W<d;W++)C.set(n.subarray(W*a,W*a+k),b+W*k);const u=b+k*d;if(a===k)C.set(s.subarray(0,N),u);else for(let W=0;W<d;W++)C.set(s.subarray(W*a,W*a+k),u+W*k);return new VideoFrame(C,{format:"I420",codedWidth:l,codedHeight:B,visibleRect:{x:0,y:0,width:h,height:J},timestamp:e.timestamp,duration:this.estimatedFrameRate>0?1e6/this.estimatedFrameRate:33333})}catch(Q){return this.logger.error(`YUV conversion error: ${Q}`),null}}handleDecoderError(e){this.logger.error(`Decoder error: ${e.message}`),this.emit("error",e)}handleQueueOverflow(e){this.logger.warn(`Decoder queue overflow: ${e} frames, flushing...`),this.flush()}dispose(){this.streamSource&&this.boundDataHandler&&this.streamSource.off("data",this.boundDataHandler),this.streamSource=null,this.boundDataHandler=null,this.decoder&&(this.decoder.dispose(),this.decoder=null),this.audioPlayer&&(this.audioPlayer.dispose(),this.audioPlayer=null),this.ownsAudioContext&&this.audioContext&&this.audioContext.close(),this.audioContext=null,this.audioCodecData=null,this.frameScheduler.clear(),this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),this.arrivalTimes.clear(),this.currentCodecData=void 0,this.waitingForKeyframe=!0,this.totalDrops=0,this.consecutiveDrops=0,this.clearEventHandlers(),this.setState("idle"),this.logger.info("Player disposed")}}var js=Object.defineProperty,Hn=(i,U)=>{for(var e in U)js(i,e,{get:U[e],enumerable:!0})},en=Math.pow(2,32),x=Math.pow(2,32)-1,Ks=1,Ps=2,qs=4,Ci=1,Ti=2,gi=8,Di=16,xi=32,Cn=131072,rU=1,bi=4,RU=256,oU=512,hU=1024,VU=2048,Yn=-1,O=0,_=1,j=class Gn extends ArrayBuffer{constructor(U){super(U),this.fileStart=0,this.usedBytes=0}static fromArrayBuffer(U,e){const F=new Gn(U.byteLength);return new Uint8Array(F).set(new Uint8Array(U)),F.fileStart=e,F}},JU,Qn,E,v=(E=class{constructor(U,e,F){Ki(this,JU);this._byteLength=0,this.failurePosition=0,this._dynamicSize=1,this._byteOffset=e||0,U instanceof ArrayBuffer?this.buffer=j.fromArrayBuffer(U,0):U instanceof DataView?(this.dataView=U,e&&(this._byteOffset+=e)):this.buffer=new j(U||0),this.position=0,this.endianness=F||1}getPosition(){return this.position}_realloc(U){if(!this._dynamicSize)return;const e=this._byteOffset+this.position+U;let F=this._buffer.byteLength;if(e<=F){e>this._byteLength&&(this._byteLength=e);return}for(F<1&&(F=1);e>F;)F*=2;const t=new j(F),Q=new Uint8Array(this._buffer);new Uint8Array(t,0,Q.length).set(Q),this.buffer=t,this._byteLength=e}_trimAlloc(){if(this._byteLength===this._buffer.byteLength)return;const U=new j(this._byteLength),e=new Uint8Array(U),F=new Uint8Array(this._buffer,0,e.length);e.set(F),this.buffer=U}get byteLength(){return this._byteLength-this._byteOffset}get buffer(){return this._trimAlloc(),this._buffer}set buffer(U){this._buffer=U,this._dataView=new DataView(U,this._byteOffset),this._byteLength=U.byteLength}get byteOffset(){return this._byteOffset}set byteOffset(U){this._byteOffset=U,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}get dataView(){return this._dataView}set dataView(U){this._byteOffset=U.byteOffset,this._buffer=j.fromArrayBuffer(U.buffer,0),this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+U.byteLength}seek(U){const e=Math.max(0,Math.min(this.byteLength,U));this.position=isNaN(e)||!isFinite(e)?0:e}isEof(){return this.position>=this._byteLength}mapUint8Array(U){this._realloc(U*1);const e=new Uint8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,e}readInt32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const F=new Int32Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readInt16Array(U,e){U=U===void 0?this.byteLength-this.position/2:U;const F=new Int16Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readInt8Array(U){U=U===void 0?this.byteLength-this.position:U;const e=new Int8Array(U);return E.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e}readUint32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const F=new Uint32Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readUint16Array(U,e){U=U===void 0?this.byteLength-this.position/2:U;const F=new Uint16Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readUint8Array(U){U=U===void 0?this.byteLength-this.position:U;const e=new Uint8Array(U);return E.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,U*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e}readFloat64Array(U,e){U=U===void 0?this.byteLength-this.position/8:U;const F=new Float64Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readFloat32Array(U,e){U=U===void 0?this.byteLength-this.position/4:U;const F=new Float32Array(U);return E.memcpy(F.buffer,0,this.buffer,this.byteOffset+this.position,U*F.BYTES_PER_ELEMENT),E.arrayToNative(F,e??this.endianness),this.position+=F.byteLength,F}readInt32(U){const e=this._dataView.getInt32(this.position,(U??this.endianness)===2);return this.position+=4,e}readInt16(U){const e=this._dataView.getInt16(this.position,(U??this.endianness)===2);return this.position+=2,e}readInt8(){const U=this._dataView.getInt8(this.position);return this.position+=1,U}readUint32(U){const e=this._dataView.getUint32(this.position,(U??this.endianness)===2);return this.position+=4,e}readUint16(U){const e=this._dataView.getUint16(this.position,(U??this.endianness)===2);return this.position+=2,e}readUint8(){const U=this._dataView.getUint8(this.position);return this.position+=1,U}readFloat32(U){const e=this._dataView.getFloat32(this.position,(U??this.endianness)===2);return this.position+=4,e}readFloat64(U){const e=this._dataView.getFloat64(this.position,(U??this.endianness)===2);return this.position+=8,e}static memcpy(U,e,F,t,Q){const n=new Uint8Array(U,e,Q),s=new Uint8Array(F,t,Q);n.set(s)}static arrayToNative(U,e){return e===E.ENDIANNESS?U:this.flipArrayEndianness(U)}static nativeToEndian(U,e){return e&&E.ENDIANNESS===2?U:this.flipArrayEndianness(U)}static flipArrayEndianness(U){const e=new Uint8Array(U.buffer,U.byteOffset,U.byteLength);for(let F=0;F<U.byteLength;F+=U.BYTES_PER_ELEMENT)for(let t=F+U.BYTES_PER_ELEMENT-1,Q=F;t>Q;t--,Q++){const n=e[Q];e[Q]=e[t],e[t]=n}return U}readString(U,e){return e===void 0||e==="ASCII"?Tn(this.mapUint8Array(U===void 0?this.byteLength-this.position:U)):new TextDecoder(e).decode(this.mapUint8Array(U))}readCString(U){let e=0;const F=this.byteLength-this.position,t=new Uint8Array(this._buffer,this._byteOffset+this.position),Q=U!==void 0?Math.min(U,F):F;for(;e<Q&&t[e]!==0;e++);const n=Tn(this.mapUint8Array(e));return U!==void 0?this.position+=Q-e:e!==F&&(this.position+=1),n}readInt64(){return this.readInt32()*en+this.readUint32()}readUint64(){return this.readUint32()*en+this.readUint32()}readUint24(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()}save(U){const e=new Blob([this.buffer]);if(typeof window<"u"&&typeof document<"u")if(window.URL&&URL.createObjectURL){const F=window.URL.createObjectURL(e),t=document.createElement("a");document.body.appendChild(t),t.setAttribute("href",F),t.setAttribute("download",U),t.setAttribute("target","_self"),t.click(),window.URL.revokeObjectURL(F),document.body.removeChild(t)}else throw new Error("DataStream.save: Can't create object URL.");return e}get dynamicSize(){return this._dynamicSize}set dynamicSize(U){U||this._trimAlloc(),this._dynamicSize=U}shift(U){const e=new j(this._byteLength-U),F=new Uint8Array(e),t=new Uint8Array(this._buffer,U,F.length);F.set(t),this.buffer=e,this.position-=U}writeInt32Array(U,e){if(this._realloc(U.length*4),U instanceof Int32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt32Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeInt32(U[F],e)}writeInt16Array(U,e){if(this._realloc(U.length*2),U instanceof Int16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt16Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeInt16(U[F],e)}writeInt8Array(U){if(this._realloc(U.length*1),U instanceof Int8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapInt8Array(U.length);else for(let e=0;e<U.length;e++)this.writeInt8(U[e])}writeUint32Array(U,e){if(this._realloc(U.length*4),U instanceof Uint32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint32Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeUint32(U[F],e)}writeUint16Array(U,e){if(this._realloc(U.length*2),U instanceof Uint16Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint16Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeUint16(U[F],e)}writeUint8Array(U){if(this._realloc(U.length*1),U instanceof Uint8Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapUint8Array(U.length);else for(let e=0;e<U.length;e++)this.writeUint8(U[e])}writeFloat64Array(U,e){if(this._realloc(U.length*8),U instanceof Float64Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat64Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeFloat64(U[F],e)}writeFloat32Array(U,e){if(this._realloc(U.length*4),U instanceof Float32Array&&this.byteOffset+this.position%U.BYTES_PER_ELEMENT===0)E.memcpy(this._buffer,this.byteOffset+this.position,U.buffer,0,U.byteLength),this.mapFloat32Array(U.length,e);else for(let F=0;F<U.length;F++)this.writeFloat32(U[F],e)}writeInt64(U,e){this._realloc(8),this._dataView.setBigInt64(this.position,BigInt(U),(e??this.endianness)===2),this.position+=8}writeInt32(U,e){this._realloc(4),this._dataView.setInt32(this.position,U,(e??this.endianness)===2),this.position+=4}writeInt16(U,e){this._realloc(2),this._dataView.setInt16(this.position,U,(e??this.endianness)===2),this.position+=2}writeInt8(U){this._realloc(1),this._dataView.setInt8(this.position,U),this.position+=1}writeUint32(U,e){this._realloc(4),this._dataView.setUint32(this.position,U,(e??this.endianness)===2),this.position+=4}writeUint16(U,e){this._realloc(2),this._dataView.setUint16(this.position,U,(e??this.endianness)===2),this.position+=2}writeUint8(U){this._realloc(1),this._dataView.setUint8(this.position,U),this.position+=1}writeFloat32(U,e){this._realloc(4),this._dataView.setFloat32(this.position,U,(e??this.endianness)===2),this.position+=4}writeFloat64(U,e){this._realloc(8),this._dataView.setFloat64(this.position,U,(e??this.endianness)===2),this.position+=8}writeUCS2String(U,e,F){F===void 0&&(F=U.length);let t;for(t=0;t<U.length&&t<F;t++)this.writeUint16(U.charCodeAt(t),e);for(;t<F;t++)this.writeUint16(0)}writeString(U,e,F){let t=0;if(e===void 0||e==="ASCII")if(F!==void 0){const Q=Math.min(U.length,F);for(t=0;t<Q;t++)this.writeUint8(U.charCodeAt(t));for(;t<F;t++)this.writeUint8(0)}else for(t=0;t<U.length;t++)this.writeUint8(U.charCodeAt(t));else this.writeUint8Array(new TextEncoder(e).encode(U.substring(0,F)))}writeCString(U,e){let F=0;if(e!==void 0){const t=Math.min(U.length,e);for(F=0;F<t;F++)this.writeUint8(U.charCodeAt(F));for(;F<e;F++)this.writeUint8(0)}else{for(F=0;F<U.length;F++)this.writeUint8(U.charCodeAt(F));this.writeUint8(0)}}writeStruct(U,e){for(let F=0;F<U.length;F++){const[t,Q]=U[F],n=e[t];this.writeType(Q,n,e)}}writeType(U,e,F){if(typeof U=="function")return U(this,e);if(typeof U=="object"&&!(U instanceof Array))return U.set(this,e,F);let t,Q="ASCII";const n=this.position;let s=U;if(typeof U=="string"&&/:/.test(U)){const l=U.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":this.writeUint8(e);break;case"int8":this.writeInt8(e);break;case"uint16":this.writeUint16(e,this.endianness);break;case"int16":this.writeInt16(e,this.endianness);break;case"uint32":this.writeUint32(e,this.endianness);break;case"int32":this.writeInt32(e,this.endianness);break;case"float32":this.writeFloat32(e,this.endianness);break;case"float64":this.writeFloat64(e,this.endianness);break;case"uint16be":this.writeUint16(e,1);break;case"int16be":this.writeInt16(e,1);break;case"uint32be":this.writeUint32(e,1);break;case"int32be":this.writeInt32(e,1);break;case"float32be":this.writeFloat32(e,1);break;case"float64be":this.writeFloat64(e,1);break;case"uint16le":this.writeUint16(e,2);break;case"int16le":this.writeInt16(e,2);break;case"uint32le":this.writeUint32(e,2);break;case"int32le":this.writeInt32(e,2);break;case"float32le":this.writeFloat32(e,2);break;case"float64le":this.writeFloat64(e,2);break;case"cstring":this.writeCString(e,t);break;case"string":this.writeString(e,Q,t);break;case"u16string":this.writeUCS2String(e,this.endianness,t);break;case"u16stringle":this.writeUCS2String(e,2,t);break;case"u16stringbe":this.writeUCS2String(e,1,t);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l]=s;for(let B=0;B<e.length;B++)this.writeType(l,e[B]);break}else{this.writeStruct(s,e);break}}t&&(this.position=n,this._realloc(t),this.position=n+t)}writeUint64(U){const e=Math.floor(U/en);this.writeUint32(e),this.writeUint32(U&4294967295)}writeUint24(U){this.writeUint8((U&16711680)>>16),this.writeUint8((U&65280)>>8),this.writeUint8(U&255)}adjustUint32(U,e){const F=this.position;this.seek(U),this.writeUint32(e),this.seek(F)}readStruct(U){const e={},F=this.position;for(let t=0;t<U.length;t+=1){const Q=U[t][1],n=this.readType(Q,e);if(!n){this.failurePosition===0&&(this.failurePosition=this.position),this.position=F;return}e[U[t][0]]=n}return e}readUCS2String(U,e){return String.fromCharCode.apply(void 0,this.readUint16Array(U,e))}readType(U,e){if(typeof U=="function")return U(this,e);if(typeof U=="object"&&!(U instanceof Array))return U.get(this,e);if(U instanceof Array&&U.length!==3)return this.readStruct(U);let F,t,Q="ASCII";const n=this.position;let s=U;if(typeof s=="string"&&/:/.test(s)){const l=s.split(":");s=l[0],t=parseInt(l[1])}if(typeof s=="string"&&/,/.test(s)){const l=s.split(",");s=l[0],Q=l[1]}switch(s){case"uint8":F=this.readUint8();break;case"int8":F=this.readInt8();break;case"uint16":F=this.readUint16(this.endianness);break;case"int16":F=this.readInt16(this.endianness);break;case"uint32":F=this.readUint32(this.endianness);break;case"int32":F=this.readInt32(this.endianness);break;case"float32":F=this.readFloat32(this.endianness);break;case"float64":F=this.readFloat64(this.endianness);break;case"uint16be":F=this.readUint16(1);break;case"int16be":F=this.readInt16(1);break;case"uint32be":F=this.readUint32(1);break;case"int32be":F=this.readInt32(1);break;case"float32be":F=this.readFloat32(1);break;case"float64be":F=this.readFloat64(1);break;case"uint16le":F=this.readUint16(2);break;case"int16le":F=this.readInt16(2);break;case"uint32le":F=this.readUint32(2);break;case"int32le":F=this.readInt32(2);break;case"float32le":F=this.readFloat32(2);break;case"float64le":F=this.readFloat64(2);break;case"cstring":F=this.readCString(t);break;case"string":F=this.readString(t,Q);break;case"u16string":F=this.readUCS2String(t,this.endianness);break;case"u16stringle":F=this.readUCS2String(t,2);break;case"u16stringbe":F=this.readUCS2String(t,1);break;default:if(Pi(this,JU,Qn).call(this,s)){const[,l,B]=s,a=typeof B=="function"?B(e,this,s):typeof B=="string"&&e[B]!==void 0?parseInt(e[B]):typeof B=="number"?B:B==="*"?void 0:parseInt(B);if(typeof l=="string"){const d=l.replace(/(le|be)$/,"");let h;switch(/le$/.test(l)?h=2:/be$/.test(l)&&(h=1),d){case"uint8":F=this.readUint8Array(a);break;case"uint16":F=this.readUint16Array(a,h);break;case"uint32":F=this.readUint32Array(a,h);break;case"int8":F=this.readInt8Array(a);break;case"int16":F=this.readInt16Array(a,h);break;case"int32":F=this.readInt32Array(a,h);break;case"float32":F=this.readFloat32Array(a,h);break;case"float64":F=this.readFloat64Array(a,h);break;case"cstring":case"utf16string":case"string":if(a){F=new Array(a);for(let J=0;J<a;J++)F[J]=this.readType(l,e)}else for(F=[];!this.isEof();){const J=this.readType(l,e);if(!J)break;F.push(J)}break}}else if(a){F=new Array(a);for(let d=0;d<a;d++){const h=this.readType(l,e);if(!h)return;F[d]=h}}else for(F=[];;){const d=this.position;try{const h=this.readType(l,e);if(!h){this.position=d;break}F.push(h)}catch{this.position=d;break}}break}}return t&&(this.position=n+t),F}mapInt32Array(U,e){this._realloc(U*4);const F=new Int32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*4,F}mapInt16Array(U,e){this._realloc(U*2);const F=new Int16Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*2,F}mapInt8Array(U,e){this._realloc(U*1);const F=new Int8Array(this._buffer,this.byteOffset+this.position,U);return this.position+=U*1,F}mapUint32Array(U,e){this._realloc(U*4);const F=new Uint32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*4,F}mapUint16Array(U,e){this._realloc(U*2);const F=new Uint16Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*2,F}mapFloat64Array(U,e){this._realloc(U*8);const F=new Float64Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*8,F}mapFloat32Array(U,e){this._realloc(U*4);const F=new Float32Array(this._buffer,this.byteOffset+this.position,U);return E.arrayToNative(F,e??this.endianness),this.position+=U*4,F}},JU=new WeakSet,Qn=function(U){return Array.isArray(U)&&U.length===3&&U[0]==="[]"},E.ENDIANNESS=new Int8Array(new Int16Array([1]).buffer)[0]>0?2:1,E);function Tn(i){const U=[];for(let e=0;e<i.length;e++)U[e]=i[e];return String.fromCharCode.apply(void 0,U)}var fi=new Date,Mi=4,gn=3,Dn=2,xn=1,X=Mi,R={setLogLevel(i){i===this.debug?X=xn:i===this.info?X=Dn:i===this.warn?X=gn:(this.error,X=Mi)},debug(i,U){console.debug===void 0&&(console.debug=console.log),xn>=X&&console.debug("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},log(i,U){this.debug(i.msg)},info(i,U){Dn>=X&&console.info("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},warn(i,U){gn>=X&&console.warn("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},error(i,U,e){e!=null&&e.onError?e.onError(i,U):Mi>=X&&console.error("["+R.getDurationString(new Date().getTime()-fi.getTime(),1e3)+"]","["+i+"]",U)},getDurationString(i,U){let e;function F(B,a){const h=(""+B).split(".");for(;h[0].length<a;)h[0]="0"+h[0];return h.join(".")}i<0?(e=!0,i=-i):e=!1;let Q=i/(U||1);const n=Math.floor(Q/3600);Q-=n*3600;const s=Math.floor(Q/60);Q-=s*60;let l=Q*1e3;return Q=Math.floor(Q),l-=Q*1e3,l=Math.floor(l),(e?"-":"")+n+":"+F(s,2)+":"+F(Q,2)+"."+F(l,3)},printRanges(i){const U=i.length;if(U>0){let e="";for(let F=0;F<U;F++)F>0&&(e+=","),e+="["+R.getDurationString(i.start(F))+","+R.getDurationString(i.end(F))+"]";return e}else return"(empty)"}};function $s(i,U){R.debug("ArrayBuffer","Trying to create a new buffer of size: "+(i.byteLength+U.byteLength));const e=new Uint8Array(i.byteLength+U.byteLength);return e.set(new Uint8Array(i),0),e.set(new Uint8Array(U),i.byteLength),e.buffer}var yi=class extends v{constructor(i){super(new ArrayBuffer,0),this.buffers=[],this.bufferIndex=-1,i&&(this.insertBuffer(i),this.bufferIndex=0)}initialized(){if(this.bufferIndex>-1)return!0;if(this.buffers.length>0){const i=this.buffers[0];return i.fileStart===0?(this.buffer=i,this.bufferIndex=0,R.debug("MultiBufferStream","Stream ready for parsing"),!0):(R.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1)}else return R.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1}reduceBuffer(i,U,e){const F=new Uint8Array(e);return F.set(new Uint8Array(i,U,e)),F.buffer.fileStart=i.fileStart+U,F.buffer.usedBytes=0,F.buffer}insertBuffer(i){let U=!0,e=0;for(;e<this.buffers.length;e++){const F=this.buffers[e];if(i.fileStart<=F.fileStart){if(i.fileStart===F.fileStart)if(i.byteLength>F.byteLength){this.buffers.splice(e,1),e--;continue}else R.warn("MultiBufferStream","Buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+") already appended, ignoring");else i.fileStart+i.byteLength<=F.fileStart||(i=this.reduceBuffer(i,0,F.fileStart-i.fileStart)),R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.splice(e,0,i),e===0&&(this.buffer=i);U=!1;break}else if(i.fileStart<F.fileStart+F.byteLength){const t=F.fileStart+F.byteLength-i.fileStart,Q=i.byteLength-t;if(Q>0)i=this.reduceBuffer(i,t,Q);else{U=!1;break}}}U&&(R.debug("MultiBufferStream","Appending new buffer (fileStart: "+i.fileStart+" - Length: "+i.byteLength+")"),this.buffers.push(i),e===0&&(this.buffer=i))}logBufferLevel(i){const U=[];let e="",F,t=0,Q=0;for(let s=0;s<this.buffers.length;s++){const l=this.buffers[s];s===0?(F={start:l.fileStart,end:l.fileStart+l.byteLength},U.push(F),e+="["+F.start+"-"):F.end===l.fileStart?F.end=l.fileStart+l.byteLength:(F={start:l.fileStart,end:l.fileStart+l.byteLength},e+=U[U.length-1].end-1+"], ["+F.start+"-",U.push(F)),t+=l.usedBytes,Q+=l.byteLength}U.length>0&&(e+=F.end-1+"]");const n=i?R.info:R.debug;this.buffers.length===0?n("MultiBufferStream","No more buffer in memory"):n("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+t+"/"+Q+" bytes), continuous ranges: "+e)}cleanBuffers(){for(let i=0;i<this.buffers.length;i++){const U=this.buffers[i];U.usedBytes===U.byteLength&&(R.debug("MultiBufferStream","Removing buffer #"+i),this.buffers.splice(i,1),i--)}}mergeNextBuffer(){if(this.bufferIndex+1<this.buffers.length){const i=this.buffers[this.bufferIndex+1];if(i.fileStart===this.buffer.fileStart+this.buffer.byteLength){const U=this.buffer.byteLength,e=this.buffer.usedBytes,F=this.buffer.fileStart;return this.buffers[this.bufferIndex]=$s(this.buffer,i),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=e,this.buffer.fileStart=F,R.debug("ISOFile","Concatenating buffer for box parsing (length: "+U+"->"+this.buffer.byteLength+")"),!0}else return!1}else return!1}findPosition(i,U,e){let F=-1,t=i===!0?0:this.bufferIndex;for(;t<this.buffers.length;){const n=this.buffers[t];if(n&&n.fileStart<=U)F=t,e&&(n.fileStart+n.byteLength<=U?n.usedBytes=n.byteLength:n.usedBytes=U-n.fileStart,this.logBufferLevel());else break;t++}if(F===-1)return-1;const Q=this.buffers[F];return Q.fileStart+Q.byteLength>=U?(R.debug("MultiBufferStream","Found position in existing buffer #"+F),F):-1}findEndContiguousBuf(i){const U=i!==void 0?i:this.bufferIndex;let e=this.buffers[U];if(this.buffers.length>U+1)for(let F=U+1;F<this.buffers.length;F++){const t=this.buffers[F];if(t.fileStart===e.fileStart+e.byteLength)e=t;else break}return e.fileStart+e.byteLength}getEndFilePositionAfter(i){const U=this.findPosition(!0,i,!1);return U!==-1?this.findEndContiguousBuf(U):i}addUsedBytes(i){this.buffer.usedBytes+=i,this.logBufferLevel()}setAllUsedBytes(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()}seek(i,U,e){const F=this.findPosition(U,i,e);return F!==-1?(this.buffer=this.buffers[F],this.bufferIndex=F,this.position=i-this.buffer.fileStart,R.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(R.debug("MultiBufferStream","Position "+i+" not found in buffered data"),!1)}getPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.position}getLength(){return this.byteLength}getEndPosition(){return this.bufferIndex===-1||this.buffers[this.bufferIndex]===void 0?0:this.buffers[this.bufferIndex].fileStart+this.byteLength}getAbsoluteEndPosition(){if(this.buffers.length===0)return 0;const i=this.buffers[this.buffers.length-1];return i.fileStart+i.byteLength}},SU,cU,V=(cU=class{constructor(U=0){Ki(this,SU,void 0);this.size=U}get type(){return this.constructor.fourcc??En(this,SU)}set type(U){Nn(this,SU,U)}addBox(U){return this.boxes||(this.boxes=[]),this.boxes.push(U),this[U.type+"s"]?this[U.type+"s"].push(U):this[U.type]=U,U}set(U,e){return this[U]=e,this}addEntry(U,e){const F=e||"entries";return this[F]||(this[F]=[]),this[F].push(U),this}writeHeader(U,e){if(this.size+=8,(this.size>x||this.original_size===1)&&(this.size+=8),this.type==="uuid"&&(this.size+=16),R.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+U.getPosition()+(e||"")),this.original_size===0?U.writeUint32(0):this.size>x||this.original_size===1?U.writeUint32(1):(this.sizePosition=U.getPosition(),U.writeUint32(this.size)),U.writeString(this.type,void 0,4),this.type==="uuid"){const F=new Uint8Array(16);for(let t=0;t<16;t++)F[t]=parseInt(this.uuid.substring(t*2,t*2+2),16);U.writeUint8Array(F)}(this.size>x||this.original_size===1)&&(this.sizePosition=U.getPosition(),U.writeUint64(this.size))}write(U){if(this.type==="mdat"){const e=this;if(e.stream){this.size=e.stream.getAbsoluteEndPosition(),this.writeHeader(U);for(const F of e.stream.buffers){const t=new Uint8Array(F);U.writeUint8Array(t)}}else e.data&&(this.size=e.data.length,this.writeHeader(U),U.writeUint8Array(e.data))}else this.size=this.data?this.data.length:0,this.writeHeader(U),this.data&&U.writeUint8Array(this.data)}printHeader(U){this.size+=8,this.size>x&&(this.size+=8),this.type==="uuid"&&(this.size+=16),U.log(U.indent+"size:"+this.size),U.log(U.indent+"type:"+this.type)}print(U){this.printHeader(U)}parse(U){this.type!=="mdat"?this.data=U.readUint8Array(this.size-this.hdr_size):this.size===0?U.seek(U.getEndPosition()):U.seek(this.start+this.size)}parseDataAndRewind(U){this.data=U.readUint8Array(this.size-this.hdr_size),U.seek(this.start+this.hdr_size)}parseLanguage(U){this.language=U.readUint16();const e=[];e[0]=this.language>>10&31,e[1]=this.language>>5&31,e[2]=this.language&31,this.languageString=String.fromCharCode(e[0]+96,e[1]+96,e[2]+96)}computeSize(U){const e=U||new yi;this.write(e)}isEndOfBox(U){const e=U.getPosition(),F=this.start+this.size;return e===F}},SU=new WeakMap,cU.registryId=Symbol.for("BoxIdentifier"),cU),o=class extends V{constructor(){super(...arguments),this.flags=0,this.version=0}writeHeader(i){this.size+=4,super.writeHeader(i," v="+this.version+" f="+this.flags),i.writeUint8(this.version),i.writeUint24(this.flags)}printHeader(i){this.size+=4,super.printHeader(i),i.log(i.indent+"version:"+this.version),i.log(i.indent+"flags:"+this.flags)}parseDataAndRewind(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,i.seek(this.start+this.hdr_size)}parseFullHeader(i){this.version=i.readUint8(),this.flags=i.readUint24(),this.hdr_size+=4}parse(i){this.parseFullHeader(i),this.data=i.readUint8Array(this.size-this.hdr_size)}},WU,D=(WU=class{constructor(U){this.grouping_type=U}write(U){U.writeUint8Array(this.data)}parse(U){R.warn("BoxParser",`Unknown sample group type: '${this.grouping_type}'`),this.data=U.readUint8Array(this.description_length)}},WU.registryId=Symbol.for("SampleGroupEntryIdentifier"),WU),Ul=class extends o{parse(i){this.parseFullHeader(i),this.track_group_id=i.readUint32()}},el=class extends V{constructor(i,U,e,F,t){super(U),this.box_name=e,this.hdr_size=F,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint16();const U=i.readUint16();this.references=[];for(let e=0;e<U;e++)this.references[e]={to_item_ID:i.readUint16()}}},Fl=class extends V{constructor(i,U,e,F,t){super(U),this.box_name=e,this.hdr_size=F,this.start=t,this.type=i}parse(i){this.from_item_ID=i.readUint32();const U=i.readUint16();this.references=[];for(let e=0;e<U;e++)this.references[e]={to_item_ID:i.readUint32()}}},tl=class extends V{constructor(i,U,e,F){super(U),this.hdr_size=e,this.start=F,this.type=i}parse(i){this.track_ids=i.readUint32Array((this.size-this.hdr_size)/4)}write(i){this.size=this.track_ids.length*4,this.writeHeader(i),i.writeUint32Array(this.track_ids)}},nn=["boxes","entries","references","subsamples","items","item_infos","extents","associations","subsegments","ranges","seekLists","seekPoints","esd","levels"],Ql=["compatible_brands","matrix","opcolor","sample_counts","sample_deltas","first_chunk","samples_per_chunk","sample_sizes","chunk_offsets","sample_offsets","sample_description_index","sample_duration"];function il(i,U){if(i&&!U)return!1;let e;for(e in i)if(!nn.find(F=>F===e)){if(i[e]instanceof V||U[e]instanceof V)continue;if(typeof i[e]>"u"||typeof U[e]>"u")continue;if(typeof i[e]=="function"||typeof U[e]=="function")continue;if("subBoxNames"in i&&i.subBoxNames.indexOf(e.slice(0,4))>-1||"subBoxNames"in U&&U.subBoxNames.indexOf(e.slice(0,4))>-1)continue;if(e==="data"||e==="start"||e==="size"||e==="creation_time"||e==="modification_time")continue;if(Ql.find(F=>F===e))continue;if(i[e]!==U[e])return!1}return!0}function Xn(i,U){if(!il(i,U))return!1;for(let e=0;e<nn.length;e++){const F=nn[e];if(i[F]&&U[F]&&!Xn(i[F],U[F]))return!1}return!0}function hn(i){let U=i;for(;U;){if("registryId"in U)return U.registryId;U=Object.getPrototypeOf(U)}}var nl=i=>{const U=Symbol.for("SampleGroupEntryIdentifier");return hn(i)===U},sl=i=>{const U=Symbol.for("SampleEntryIdentifier");return hn(i)===U},ll=i=>{const U=Symbol.for("BoxIdentifier");return hn(i)===U},I={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};function Bl(i){const U={uuid:{},sampleEntry:{},sampleGroupEntry:{},box:{}};for(const[e,F]of Object.entries(i)){if(nl(F)){const t="grouping_type"in F?F.grouping_type:void 0;if(!t)throw new Error(`SampleGroupEntry class ${e} does not have a valid static grouping_type. Please ensure it is defined correctly.`);if(t in U.sampleGroupEntry)throw new Error(`SampleGroupEntry class ${e} has a grouping_type that is already registered. Please ensure it is unique.`);U.sampleGroupEntry[t]=F;continue}if(sl(F)){const t="fourcc"in F?F.fourcc:void 0;if(!t)throw new Error(`SampleEntry class ${e} does not have a valid static fourcc. Please ensure it is defined correctly.`);if(t in U.sampleEntry)throw new Error(`SampleEntry class ${e} has a fourcc that is already registered. Please ensure it is unique.`);U.sampleEntry[t]=F;continue}if(ll(F)){const t="fourcc"in F?F.fourcc:void 0,Q="uuid"in F?F.uuid:void 0;if(t==="uuid"){if(!Q)throw new Error(`Box class ${e} has a fourcc of 'uuid' but does not have a valid uuid. Please ensure it is defined correctly.`);if(Q in U.uuid)throw new Error(`Box class ${e} has a uuid that is already registered. Please ensure it is unique.`);U.uuid[Q]=F;continue}U.box[t]=F;continue}throw new Error(`Box class ${e} does not have a valid static fourcc, uuid, or grouping_type. Please ensure it is defined correctly.`)}return I.uuid={...U.uuid},I.sampleEntry={...U.sampleEntry},I.sampleGroupEntry={...U.sampleGroupEntry},I.box={...U.box},I}var Hi={};function al(i){return Object.entries(i).forEach(([U,e])=>Hi[U]=e),Hi}function dl(i){return q(i)}function q(i){let U="";for(let e=0;e<16;e++){const F=i.readUint8().toString(16);U+=F.length===1?"0"+F:F}return U}function H(i,U,e){let F,t;const Q=i.getPosition();let n=0,s;if(i.getEndPosition()-Q<8)return R.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:O};if(e&&e<8)return R.debug("BoxParser","Not enough bytes left in the parent box to parse a new box"),{code:O};let l=i.readUint32();const B=i.readString(4);if(B.length!==4||!/^[\x20-\x7E]{4}$/.test(B))return R.error("BoxParser",`Invalid box type: '${B}'`),{code:Yn,start:Q,type:B};let a=B;if(R.debug("BoxParser","Found box of type '"+B+"' and size "+l+" at position "+Q),n=8,B==="uuid"){if(i.getEndPosition()-i.getPosition()<16||e-n<16)return i.seek(Q),R.debug("BoxParser","Not enough bytes left in the parent box to parse a UUID box"),{code:O};s=dl(i),n+=16,a=s}if(l===1){if(i.getEndPosition()-i.getPosition()<8||e&&e-n<8)return i.seek(Q),R.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+B+'" box'),{code:O};t=l,l=i.readUint64(),n+=8}else if(l===0){if(e)l=e;else if(B!=="mdat")return R.error("BoxParser","Unlimited box size not supported for type: '"+B+"'"),F=new V(l),F.type=B,{code:_,box:F,size:F.size}}if(l!==0&&l<n)return R.error("BoxParser","Box of type "+B+" has an invalid size "+l+" (too small to be a box)"),{code:O,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&e&&l>e)return R.error("BoxParser","Box of type '"+B+"' has a size "+l+" greater than its container size "+e),{code:O,type:B,size:l,hdr_size:n,start:Q};if(l!==0&&Q+l>i.getEndPosition())return i.seek(Q),R.info("BoxParser","Not enough data in stream to parse the entire '"+B+"' box"),{code:O,type:B,size:l,hdr_size:n,start:Q,original_size:t};if(U)return{code:_,type:B,size:l,hdr_size:n,start:Q};B in I.box?F=new I.box[B](l):B!=="uuid"?(R.warn("BoxParser",`Unknown box type: '${B}'`),F=new V(l),F.type=B,F.has_unparsed_data=!0):s in I.uuid?F=new I.uuid[s](l):(R.warn("BoxParser",`Unknown UUID box type: '${s}'`),F=new V(l),F.type=B,F.uuid=s,F.has_unparsed_data=!0),F.original_size=t,F.hdr_size=n,F.start=Q,F.write===V.prototype.write&&F.type!=="mdat"&&(R.info("BoxParser","'"+a+"' box writing not yet implemented, keeping unparsed data in memory for later write"),F.parseDataAndRewind(i)),F.parse(i);const d=i.getPosition()-(F.start+F.size);return d<0?(R.warn("BoxParser","Parsing of box '"+a+"' did not read the entire indicated box data size (missing "+-d+" bytes), seeking forward"),i.seek(F.start+F.size)):d>0&&F.size!==0&&(R.error("BoxParser","Parsing of box '"+a+"' read "+d+" more bytes than the indicated box data size, seeking backwards"),i.seek(F.start+F.size)),{code:_,box:F,size:F.size}}var Z=class extends V{write(i){if(this.size=0,this.writeHeader(i),this.boxes)for(let U=0;U<this.boxes.length;U++)this.boxes[U]&&(this.boxes[U].write(i),this.size+=this.boxes[U].size);R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),i.adjustUint32(this.sizePosition,this.size)}print(i){this.printHeader(i);for(let U=0;U<this.boxes.length;U++)if(this.boxes[U]){const e=i.indent;i.indent+=" ",this.boxes[U].print(i),i.indent=e}}parse(i){let U;for(;i.getPosition()<this.start+this.size;)if(U=H(i,!1,this.size-(i.getPosition()-this.start)),U.code===_){const e=U.box;if(this.boxes||(this.boxes=[]),this.boxes.push(e),this.subBoxNames&&this.subBoxNames.indexOf(e.type)!==-1){const F=this.subBoxNames[this.subBoxNames.indexOf(e.type)]+"s";this[F]||(this[F]=[]),this[F].push(e)}else{const F=e.type!=="uuid"?e.type:e.uuid;this[F]?R.warn("ContainerBox",`Box of type ${F} already exists in container box ${this.type}.`):this[F]=e}}else return}},pU,L=(pU=class extends Z{constructor(U,e,F){super(U),this.hdr_size=e,this.start=F}isVideo(){return!1}isAudio(){return!1}isSubtitle(){return!1}isMetadata(){return!1}isHint(){return!1}getCodec(){return this.type.replace(".","")}getWidth(){return""}getHeight(){return""}getChannelCount(){return""}getSampleRate(){return""}getSampleSize(){return""}parseHeader(U){U.readUint8Array(6),this.data_reference_index=U.readUint16(),this.hdr_size+=8}parse(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size)}parseDataAndRewind(U){this.parseHeader(U),this.data=U.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,U.seek(this.start+this.hdr_size)}parseFooter(U){super.parse(U)}writeHeader(U){this.size=8,super.writeHeader(U),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint8(0),U.writeUint16(this.data_reference_index)}writeFooter(U){if(this.boxes)for(let e=0;e<this.boxes.length;e++)this.boxes[e].write(U),this.size+=this.boxes[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}write(U){this.writeHeader(U),U.writeUint8Array(this.data),this.size+=this.data.length,R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},pU.registryId=Symbol.for("SampleEntryIdentifier"),pU),bn=class extends L{},QU=class extends L{isMetadata(){return!0}},$=class extends L{isSubtitle(){return!0}},rl=class extends L{},g=class extends L{parse(i){this.parseHeader(i),i.readUint16(),i.readUint16(),i.readUint32Array(3),this.width=i.readUint16(),this.height=i.readUint16(),this.horizresolution=i.readUint32(),this.vertresolution=i.readUint32(),i.readUint32(),this.frame_count=i.readUint16();const U=Math.min(31,i.readUint8());this.compressorname=i.readString(U),U<31&&i.readString(31-U),this.depth=i.readUint16(),i.readUint16(),this.parseFooter(i)}isVideo(){return!0}getWidth(){return this.width}getHeight(){return this.height}write(i){this.writeHeader(i),this.size+=2*7+6*4+32,i.writeUint16(0),i.writeUint16(0),i.writeUint32(0),i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.width),i.writeUint16(this.height),i.writeUint32(this.horizresolution),i.writeUint32(this.vertresolution),i.writeUint32(0),i.writeUint16(this.frame_count),i.writeUint8(Math.min(31,this.compressorname.length)),i.writeString(this.compressorname,void 0,31),i.writeUint16(this.depth),i.writeInt16(-1),this.writeFooter(i)}},w=class extends L{parse(i){var e,F;this.parseHeader(i),this.version=i.readUint16(),i.readUint16(),i.readUint32(),this.channel_count=i.readUint16(),this.samplesize=i.readUint16(),i.readUint16(),i.readUint16(),this.samplerate=i.readUint32()/65536,((F=(e=i.isofile)==null?void 0:e.ftyp)==null?void 0:F.major_brand.includes("qt"))&&(this.version===1?this.extensions=i.readUint8Array(16):this.version===2&&(this.extensions=i.readUint8Array(36))),this.parseFooter(i)}isAudio(){return!0}getChannelCount(){return this.channel_count}getSampleRate(){return this.samplerate}getSampleSize(){return this.samplesize}write(i){this.writeHeader(i),this.size+=2*4+3*4,i.writeUint32(0),i.writeUint32(0),i.writeUint16(this.channel_count),i.writeUint16(this.samplesize),i.writeUint16(0),i.writeUint16(0),i.writeUint32(this.samplerate<<16),this.writeFooter(i)}},Vn=class extends L{parse(i){this.parseHeader(i),this.parseFooter(i)}write(i){this.writeHeader(i),this.writeFooter(i)}},Mn=class extends Array{toString(){let i="<table class='inner-table'>";i+="<thead><tr><th>length</th><th>nalu_data</th></tr></thead>",i+="<tbody>";for(let U=0;U<this.length;U++){const e=this[U];i+="<tr>",i+="<td>"+e.length+"</td>",i+="<td>",i+=e.data.reduce(function(F,t){return F+t.toString(16).padStart(2,"0")},"0x"),i+="</td></tr>"}return i+="</tbody></table>",i}},EU,Ln=(EU=class extends V{constructor(){super(...arguments),this.box_name="AVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.AVCProfileIndication=U.readUint8(),this.profile_compatibility=U.readUint8(),this.AVCLevelIndication=U.readUint8(),this.lengthSizeMinusOne=U.readUint8()&3,this.nb_SPS_nalus=U.readUint8()&31;let e=this.size-this.hdr_size-6;this.SPS=new Mn;for(let F=0;F<this.nb_SPS_nalus;F++){const t=U.readUint16();this.SPS.push({length:t,data:U.readUint8Array(t)}),e-=2+t}this.nb_PPS_nalus=U.readUint8(),e--,this.PPS=new Mn;for(let F=0;F<this.nb_PPS_nalus;F++){const t=U.readUint16();this.PPS.push({length:t,data:U.readUint8Array(t)}),e-=2+t}e>0&&(this.ext=U.readUint8Array(e))}write(U){this.size=7;for(let e=0;e<this.SPS.length;e++)this.size+=2+this.SPS[e].length;for(let e=0;e<this.PPS.length;e++)this.size+=2+this.PPS[e].length;this.ext&&(this.size+=this.ext.length),this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8(this.AVCProfileIndication),U.writeUint8(this.profile_compatibility),U.writeUint8(this.AVCLevelIndication),U.writeUint8(this.lengthSizeMinusOne+252),U.writeUint8(this.SPS.length+224);for(let e=0;e<this.SPS.length;e++)U.writeUint16(this.SPS[e].length),U.writeUint8Array(this.SPS[e].data);U.writeUint8(this.PPS.length);for(let e=0;e<this.PPS.length;e++)U.writeUint16(this.PPS[e].length),U.writeUint8Array(this.PPS[e].data);this.ext&&U.writeUint8Array(this.ext)}},EU.fourcc="avcC",EU),NU,Ii=(NU=class extends V{constructor(){super(...arguments),this.box_name="MediaDataBox"}},NU.fourcc="mdat",NU),ZU,Rl=(ZU=class extends V{constructor(){super(...arguments),this.box_name="ItemDataBox"}},ZU.fourcc="idat",ZU),kU,ol=(kU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},kU.fourcc="free",kU),uU,hl=(uU=class extends V{constructor(){super(...arguments),this.box_name="FreeSpaceBox"}},uU.fourcc="skip",uU),fU,On=(fU=class extends o{constructor(){super(...arguments),this.box_name="HintMediaHeaderBox"}},fU.fourcc="hmhd",fU),mU,wi=(mU=class extends o{constructor(){super(...arguments),this.box_name="NullMediaHeaderBox"}},mU.fourcc="nmhd",mU),CU,Vl=(CU=class extends o{constructor(){super(...arguments),this.box_name="ObjectDescriptorBox"}},CU.fourcc="iods",CU),TU,Jl=(TU=class extends o{constructor(){super(...arguments),this.box_name="XMLBox"}},TU.fourcc="xml ",TU),gU,Sl=(gU=class extends o{constructor(){super(...arguments),this.box_name="BinaryXMLBox"}},gU.fourcc="bxml",gU),DU,cl=(DU=class extends o{constructor(){super(...arguments),this.box_name="ItemProtectionBox",this.sinfs=[]}get protections(){return this.sinfs}},DU.fourcc="ipro",DU),xU,sn=(xU=class extends Z{constructor(){super(...arguments),this.box_name="MovieBox",this.traks=[],this.psshs=[],this.subBoxNames=["trak","pssh"]}},xU.fourcc="moov",xU),bU,An=(bU=class extends Z{constructor(){super(...arguments),this.box_name="TrackBox",this.samples=[]}},bU.fourcc="trak",bU),MU,Wl=(MU=class extends Z{constructor(){super(...arguments),this.box_name="EditBox"}},MU.fourcc="edts",MU),yU,jn=(yU=class extends Z{constructor(){super(...arguments),this.box_name="MediaBox"}},yU.fourcc="mdia",yU),IU,Kn=(IU=class extends Z{constructor(){super(...arguments),this.box_name="MediaInformationBox"}},IU.fourcc="minf",IU),wU,Pn=(wU=class extends Z{constructor(){super(...arguments),this.box_name="DataInformationBox"}},wU.fourcc="dinf",wU),vU,qn=(vU=class extends Z{constructor(){super(...arguments),this.box_name="SampleTableBox",this.sgpds=[],this.sbgps=[],this.subBoxNames=["sgpd","sbgp"]}},vU.fourcc="stbl",vU),_U,ln=(_U=class extends Z{constructor(){super(...arguments),this.box_name="MovieExtendsBox",this.trexs=[],this.subBoxNames=["trex"]}},_U.fourcc="mvex",_U),zU,$n=(zU=class extends Z{constructor(){super(...arguments),this.box_name="MovieFragmentBox",this.trafs=[],this.subBoxNames=["traf"]}},zU.fourcc="moof",zU),HU,Us=(HU=class extends Z{constructor(){super(...arguments),this.box_name="TrackFragmentBox",this.truns=[],this.sgpds=[],this.sbgps=[],this.subBoxNames=["trun","sgpd","sbgp"]}},HU.fourcc="traf",HU),YU,pl=(YU=class extends Z{constructor(){super(...arguments),this.box_name="VTTCueBox"}},YU.fourcc="vttc",YU),GU,El=(GU=class extends Z{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessBox",this.tfras=[],this.subBoxNames=["tfra"]}},GU.fourcc="mfra",GU),XU,Nl=(XU=class extends Z{constructor(){super(...arguments),this.box_name="AdditionalMetadataContainerBox"}},XU.fourcc="meco",XU),LU,Zl=(LU=class extends Z{constructor(){super(...arguments),this.box_name="trackhintinformation",this.subBoxNames=["sdp ","rtp "]}},LU.fourcc="hnti",LU),OU,kl=(OU=class extends Z{constructor(){super(...arguments),this.box_name="hintstatisticsbox",this.maxrs=[],this.subBoxNames=["maxr"]}},OU.fourcc="hinf",OU),AU,ul=(AU=class extends Z{constructor(){super(...arguments),this.box_name="SubTrackBox"}},AU.fourcc="strk",AU),jU,fl=(jU=class extends Z{constructor(){super(...arguments),this.box_name="SubTrackDefinitionBox"}},jU.fourcc="strd",jU),KU,ml=(KU=class extends Z{constructor(){super(...arguments),this.box_name="ProtectionSchemeInfoBox"}},KU.fourcc="sinf",KU),PU,Cl=(PU=class extends Z{constructor(){super(...arguments),this.box_name="RestrictedSchemeInfoBox"}},PU.fourcc="rinf",PU),qU,Tl=(qU=class extends Z{constructor(){super(...arguments),this.box_name="SchemeInformationBox"}},qU.fourcc="schi",qU),$U,gl=($U=class extends Z{constructor(){super(...arguments),this.box_name="TrackGroupBox"}},$U.fourcc="trgr",$U),Ue,Dl=(Ue=class extends Z{constructor(){super(...arguments),this.box_name="UserDataBox",this.kinds=[],this.strks=[],this.subBoxNames=["kind","strk"]}},Ue.fourcc="udta",Ue),ee,xl=(ee=class extends Z{constructor(){super(...arguments),this.box_name="ItemPropertiesBox",this.ipmas=[],this.subBoxNames=["ipma"]}},ee.fourcc="iprp",ee),Fe,bl=(Fe=class extends Z{constructor(){super(...arguments),this.box_name="ItemPropertyContainerBox",this.hvcCs=[],this.ispes=[],this.claps=[],this.irots=[],this.subBoxNames=["hvcC","ispe","clap","irot"]}},Fe.fourcc="ipco",Fe),te,Ml=(te=class extends Z{constructor(){super(...arguments),this.box_name="GroupsListBox"}},te.fourcc="grpl",te),Qe,yl=(Qe=class extends Z{constructor(){super(...arguments),this.box_name="J2KHeaderInfoBox"}},Qe.fourcc="j2kH",Qe),ie,Il=(ie=class extends Z{constructor(){super(...arguments),this.box_name="ExtendedTypeBox",this.tycos=[],this.subBoxNames=["tyco"]}},ie.fourcc="etyp",ie),ne,wl=(ne=class extends Z{constructor(){super(...arguments),this.box_name="ProjectedOmniVideoBox",this.subBoxNames=["prfr"]}},ne.fourcc="povd",ne),se,es=(se=class extends o{constructor(){super(...arguments),this.box_name="DataReferenceBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let F=0;F<e;F++){const t=H(U,!1,this.size-(U.getPosition()-this.start));if(t.code===_){const Q=t.box;this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++)this.entries[e].write(U),this.size+=this.entries[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},se.fourcc="dref",se),le,Fs=(le=class extends o{constructor(){super(...arguments),this.box_name="ExtendedLanguageBox"}parse(U){this.parseFullHeader(U),this.extended_language=U.readString(this.size-this.hdr_size)}write(U){this.version=0,this.flags=0,this.size=this.extended_language.length,this.writeHeader(U),U.writeString(this.extended_language)}},le.fourcc="elng",le),Be,ts=(Be=class extends V{constructor(){super(...arguments),this.box_name="FileTypeBox"}parse(U){let e=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),e-=8,this.compatible_brands=[];let F=0;for(;e>=4;)this.compatible_brands[F]=U.readString(4),e-=4,F++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let e=0;e<this.compatible_brands.length;e++)U.writeString(this.compatible_brands[e],void 0,4)}},Be.fourcc="ftyp",Be),ae,Qs=(ae=class extends o{constructor(){super(...arguments),this.box_name="HandlerBox"}parse(U){if(this.parseFullHeader(U),this.version===0&&(U.readUint32(),this.handler=U.readString(4),U.readUint32Array(3),!this.isEndOfBox(U))){const e=this.start+this.size-U.getPosition();this.name=U.readCString();const F=this.start+this.size-1;U.seek(F),U.readUint8()!==0&&e>1&&(R.info("BoxParser","Warning: hdlr name is not null-terminated, possibly length-prefixed string. Trimming first byte."),this.name=this.name.slice(1))}}write(U){this.size=5*4+this.name.length+1,this.version=0,this.flags=0,this.writeHeader(U),U.writeUint32(0),U.writeString(this.handler,void 0,4),U.writeUint32Array([0,0,0]),U.writeCString(this.name)}},ae.fourcc="hdlr",ae),de,is=(de=class extends V{constructor(){super(...arguments),this.box_name="HEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8();let e=U.readUint8();this.general_profile_space=e>>6,this.general_tier_flag=(e&32)>>5,this.general_profile_idc=e&31,this.general_profile_compatibility=U.readUint32(),this.general_constraint_indicator=U.readUint8Array(6),this.general_level_idc=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3,this.chroma_format_idc=U.readUint8()&3,this.bit_depth_luma_minus8=U.readUint8()&7,this.bit_depth_chroma_minus8=U.readUint8()&7,this.avgFrameRate=U.readUint16(),e=U.readUint8(),this.constantFrameRate=e>>6,this.numTemporalLayers=(e&13)>>3,this.temporalIdNested=(e&4)>>2,this.lengthSizeMinusOne=e&3,this.nalu_arrays=[];const F=U.readUint8();for(let t=0;t<F;t++){const Q=[];this.nalu_arrays.push(Q),e=U.readUint8(),Q.completeness=(e&128)>>7,Q.nalu_type=e&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}write(U){this.size=23;for(let e=0;e<this.nalu_arrays.length;e++){this.size+=3;for(let F=0;F<this.nalu_arrays[e].length;F++)this.size+=2+this.nalu_arrays[e][F].data.length}this.writeHeader(U),U.writeUint8(this.configurationVersion),U.writeUint8((this.general_profile_space<<6)+(this.general_tier_flag<<5)+this.general_profile_idc),U.writeUint32(this.general_profile_compatibility),U.writeUint8Array(this.general_constraint_indicator),U.writeUint8(this.general_level_idc),U.writeUint16(this.min_spatial_segmentation_idc+(15<<24)),U.writeUint8(this.parallelismType+252),U.writeUint8(this.chroma_format_idc+252),U.writeUint8(this.bit_depth_luma_minus8+248),U.writeUint8(this.bit_depth_chroma_minus8+248),U.writeUint16(this.avgFrameRate),U.writeUint8((this.constantFrameRate<<6)+(this.numTemporalLayers<<3)+(this.temporalIdNested<<2)+this.lengthSizeMinusOne),U.writeUint8(this.nalu_arrays.length);for(let e=0;e<this.nalu_arrays.length;e++){U.writeUint8((this.nalu_arrays[e].completeness<<7)+this.nalu_arrays[e].nalu_type),U.writeUint16(this.nalu_arrays[e].length);for(let F=0;F<this.nalu_arrays[e].length;F++)U.writeUint16(this.nalu_arrays[e][F].data.length),U.writeUint8Array(this.nalu_arrays[e][F].data)}}},de.fourcc="hvcC",de),re,ns=(re=class extends o{constructor(){super(...arguments),this.box_name="MediaHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.parseLanguage(U),U.readUint16()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=4*4+2*2,this.size+=e?3*4:0,this.flags=0,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint16(this.language),U.writeUint16(0)}},re.fourcc="mdhd",re),Re,ss=(Re=class extends o{constructor(){super(...arguments),this.box_name="MovieExtendsHeaderBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(R.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),this.version===1?this.fragment_duration=U.readUint64():this.fragment_duration=U.readUint32()}write(U){const e=this.fragment_duration>x||this.version===1;this.version=e?1:0,this.size=4,this.size+=e?4:0,this.flags=0,this.writeHeader(U),e?U.writeUint64(this.fragment_duration):U.writeUint32(this.fragment_duration)}},Re.fourcc="mehd",Re),oe,vl=(oe=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoEntry"}parse(U){if(this.parseFullHeader(U),(this.version===0||this.version===1)&&(this.item_ID=U.readUint16(),this.item_protection_index=U.readUint16(),this.item_name=U.readCString(),this.content_type=U.readCString(),this.isEndOfBox(U)||(this.content_encoding=U.readCString())),this.version===1){this.extension_type=U.readString(4),R.warn("BoxParser","Cannot parse extension type"),U.seek(this.start+this.size);return}this.version>=2&&(this.version===2?this.item_ID=U.readUint16():this.version===3&&(this.item_ID=U.readUint32()),this.item_protection_index=U.readUint16(),this.item_type=U.readString(4),this.item_name=U.readCString(),this.item_type==="mime"?(this.content_type=U.readCString(),this.content_encoding=U.readCString()):this.item_type==="uri "&&(this.item_uri_type=U.readCString()))}},oe.fourcc="infe",oe),he,_l=(he=class extends o{constructor(){super(...arguments),this.box_name="ItemInfoBox"}parse(U){this.parseFullHeader(U),this.version===0?this.entry_count=U.readUint16():this.entry_count=U.readUint32(),this.item_infos=[];for(let e=0;e<this.entry_count;e++){const F=H(U,!1,this.size-(U.getPosition()-this.start));if(F.code===_){const t=F.box;t.type==="infe"?this.item_infos[e]=t:R.error("BoxParser","Expected 'infe' box, got "+F.box.type,U.isofile)}else return}}},he.fourcc="iinf",he),Ve,zl=(Ve=class extends o{constructor(){super(...arguments),this.box_name="ItemLocationBox"}parse(U){this.parseFullHeader(U);let e;e=U.readUint8(),this.offset_size=e>>4&15,this.length_size=e&15,e=U.readUint8(),this.base_offset_size=e>>4&15,this.version===1||this.version===2?this.index_size=e&15:this.index_size=0,this.items=[];let F=0;if(this.version<2)F=U.readUint16();else if(this.version===2)F=U.readUint32();else throw new Error("version of iloc box not supported");for(let t=0;t<F;t++){let Q=0,n=0,s=0;if(this.version<2)Q=U.readUint16();else if(this.version===2)Q=U.readUint32();else throw new Error("version of iloc box not supported");this.version===1||this.version===2?n=U.readUint16()&15:n=0;const l=U.readUint16();switch(this.base_offset_size){case 0:s=0;break;case 4:s=U.readUint32();break;case 8:s=U.readUint64();break;default:throw new Error("Error reading base offset size")}const B=[],a=U.readUint16();for(let d=0;d<a;d++){let h=0,J=0,c=0;if(this.version===1||this.version===2)switch(this.index_size){case 0:h=0;break;case 4:h=U.readUint32();break;case 8:h=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.offset_size){case 0:J=0;break;case 4:J=U.readUint32();break;case 8:J=U.readUint64();break;default:throw new Error("Error reading extent index")}switch(this.length_size){case 0:c=0;break;case 4:c=U.readUint32();break;case 8:c=U.readUint64();break;default:throw new Error("Error reading extent index")}B.push({extent_index:h,extent_length:c,extent_offset:J})}this.items.push({base_offset:s,construction_method:n,item_ID:Q,data_reference_index:l,extents:B})}}},Ve.fourcc="iloc",Ve),Hl={auxl:"Auxiliary image item",base:"Pre-derived image item base",cdsc:"Item describes referenced item",dimg:"Derived image item",dpnd:"Item coding dependency",eroi:"Region",evir:"EVC slice",exbl:"Scalable image item","fdl ":"File delivery",font:"Font item",iloc:"Item data location",mask:"Region mask",mint:"Data integrity",pred:"Predictively coded item",prem:"Pre-multiplied item",tbas:"HEVC tile track base item",text:"Text item",thmb:"Thumbnail image item"},K,Yl=(K=class extends o{constructor(){super(...arguments),this.box_name="ItemReferenceBox",this.references=[]}parse(U){for(this.parseFullHeader(U),this.references=[];U.getPosition()<this.start+this.size;){const e=H(U,!0,this.size-(U.getPosition()-this.start));if(e.code===_){let F="Unknown item reference";K.allowed_types.includes(e.type)?F=Hl[e.type]:R.warn("BoxParser",`Unknown item reference type: '${e.type}'`);const t=this.version===0?new el(e.type,e.size,F,e.hdr_size,e.start):new Fl(e.type,e.size,F,e.hdr_size,e.start);t.write===V.prototype.write&&t.type!=="mdat"&&(R.warn("BoxParser",t.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),t.parseDataAndRewind(U)),t.parse(U),this.references.push(t)}else return}}},K.fourcc="iref",K.allowed_types=["auxl","base","cdsc","dimg","dpnd","eroi","evir","exbl","fdl ","font","iloc","mask","mint","pred","prem","tbas","text","thmb"],K),Je,Gl=(Je=class extends o{constructor(){super(...arguments),this.box_name="PrimaryItemBox"}parse(U){this.parseFullHeader(U),this.version===0?this.item_id=U.readUint16():this.item_id=U.readUint32()}},Je.fourcc="pitm",Je),Se,Xl=(Se=class extends o{constructor(){super(...arguments),this.box_name="MetaBox",this.isQT=!1}parse(U){const e=U.getPosition();if(this.size>8){switch(U.readUint32(),U.readString(4)){case"hdlr":case"mhdr":case"keys":case"ilst":case"ctry":case"lang":this.isQT=!0;break}U.seek(e)}this.isQT||this.parseFullHeader(U),Z.prototype.parse.call(this,U)}},Se.fourcc="meta",Se),ce,ls=(ce=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentHeaderBox"}parse(U){this.parseFullHeader(U),this.sequence_number=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4,this.writeHeader(U),U.writeUint32(this.sequence_number)}},ce.fourcc="mfhd",ce),We,Bs=(We=class extends o{constructor(){super(...arguments),this.box_name="MovieHeaderBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.timescale=U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.timescale=U.readUint32(),this.duration=U.readUint32()),this.rate=U.readUint32(),this.volume=U.readUint16()>>8,U.readUint16(),U.readUint32Array(2),this.matrix=U.readInt32Array(9),U.readUint32Array(6),this.next_track_id=U.readUint32()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=4*4+20*4,this.size+=e?3*4:0,this.flags=0,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.timescale),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.timescale),U.writeUint32(this.duration)),U.writeUint32(this.rate),U.writeUint16(this.volume<<8),U.writeUint16(0),U.writeUint32(0),U.writeUint32(0),U.writeInt32Array(this.matrix),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(0),U.writeUint32(this.next_track_id)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"timescale: "+this.timescale),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"rate: "+this.rate),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"next_track_id: "+this.next_track_id)}},We.fourcc="mvhd",We),pe,Ll=(pe=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},pe.fourcc="mett",pe),Ee,Ol=(Ee=class extends QU{parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.parseFooter(U)}},Ee.fourcc="metx",Ee),Ne,Al=(Ne=class extends V{constructor(){super(...arguments),this.box_name="AV1CodecConfigurationBox"}parse(U){let e=U.readUint8();if((e>>7&1)!==1){R.error("BoxParser","av1C marker problem",U.isofile);return}if(this.version=e&127,this.version!==1){R.error("BoxParser","av1C version "+this.version+" not supported",U.isofile);return}if(e=U.readUint8(),this.seq_profile=e>>5&7,this.seq_level_idx_0=e&31,e=U.readUint8(),this.seq_tier_0=e>>7&1,this.high_bitdepth=e>>6&1,this.twelve_bit=e>>5&1,this.monochrome=e>>4&1,this.chroma_subsampling_x=e>>3&1,this.chroma_subsampling_y=e>>2&1,this.chroma_sample_position=e&3,e=U.readUint8(),this.reserved_1=e>>5&7,this.reserved_1!==0){R.error("BoxParser","av1C reserved_1 parsing problem",U.isofile);return}if(this.initial_presentation_delay_present=e>>4&1,this.initial_presentation_delay_present===1)this.initial_presentation_delay_minus_one=e&15;else if(this.reserved_2=e&15,this.reserved_2!==0){R.error("BoxParser","av1C reserved_2 parsing problem",U.isofile);return}const F=this.size-this.hdr_size-4;this.configOBUs=U.readUint8Array(F)}},Ne.fourcc="av1C",Ne),Ze,jl=(Ze=class extends o{constructor(){super(...arguments),this.box_name="ElementaryStreamDescriptorBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8Array(this.size-this.hdr_size);if("MPEG4DescriptorParser"in Hi){const F=new Hi.MPEG4DescriptorParser;this.esd=F.parseOneDescriptor(new v(e.buffer,0))}}},Ze.fourcc="esds",Ze),ke,Kl=(ke=class extends o{constructor(){super(...arguments),this.box_name="VPCodecConfigurationRecord"}parse(U){if(this.parseFullHeader(U),this.version===1){this.profile=U.readUint8(),this.level=U.readUint8();const e=U.readUint8();this.bitDepth=e>>4,this.chromaSubsampling=e>>1&7,this.videoFullRangeFlag=e&1,this.colourPrimaries=U.readUint8(),this.transferCharacteristics=U.readUint8(),this.matrixCoefficients=U.readUint8(),this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}else{this.profile=U.readUint8(),this.level=U.readUint8();let e=U.readUint8();this.bitDepth=e>>4&15,this.colorSpace=e&15,e=U.readUint8(),this.chromaSubsampling=e>>4&15,this.transferFunction=e>>1&7,this.videoFullRangeFlag=e&1,this.codecIntializationDataSize=U.readUint16(),this.codecIntializationData=U.readUint8Array(this.codecIntializationDataSize)}}},ke.fourcc="vpcC",ke),ue,Pl=(ue=class extends o{constructor(){super(...arguments),this.box_name="VvcConfigurationBox"}parse(U){this.parseFullHeader(U);const e={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(n){this.held_bits=n.readUint8(),this.num_held_bits=1*8},stream_read_2_bytes:function(n){this.held_bits=n.readUint16(),this.num_held_bits=2*8},extract_bits:function(n){const s=this.held_bits>>this.num_held_bits-n&(1<<n)-1;return this.num_held_bits-=n,s}};if(e.stream_read_1_bytes(U),e.extract_bits(5),this.lengthSizeMinusOne=e.extract_bits(2),this.ptl_present_flag=e.extract_bits(1),this.ptl_present_flag){e.stream_read_2_bytes(U),this.ols_idx=e.extract_bits(9),this.num_sublayers=e.extract_bits(3),this.constant_frame_rate=e.extract_bits(2),this.chroma_format_idc=e.extract_bits(2),e.stream_read_1_bytes(U),this.bit_depth_minus8=e.extract_bits(3),e.extract_bits(5);{if(e.stream_read_2_bytes(U),e.extract_bits(2),this.num_bytes_constraint_info=e.extract_bits(6),this.general_profile_idc=e.extract_bits(7),this.general_tier_flag=e.extract_bits(1),this.general_level_idc=U.readUint8(),e.stream_read_1_bytes(U),this.ptl_frame_only_constraint_flag=e.extract_bits(1),this.ptl_multilayer_enabled_flag=e.extract_bits(1),this.general_constraint_info=new Uint8Array(this.num_bytes_constraint_info),this.num_bytes_constraint_info){for(let n=0;n<this.num_bytes_constraint_info-1;n++){const s=e.extract_bits(6);e.stream_read_1_bytes(U);const l=e.extract_bits(2);this.general_constraint_info[n]=s<<2|l}this.general_constraint_info[this.num_bytes_constraint_info-1]=e.extract_bits(6)}else e.extract_bits(6);if(this.num_sublayers>1){e.stream_read_1_bytes(U),this.ptl_sublayer_present_mask=0;for(let n=this.num_sublayers-2;n>=0;--n){const s=e.extract_bits(1);this.ptl_sublayer_present_mask|=s<<n}for(let n=this.num_sublayers;n<=8&&this.num_sublayers>1;++n)e.extract_bits(1);this.sublayer_level_idc=[];for(let n=this.num_sublayers-2;n>=0;--n)this.ptl_sublayer_present_mask&1<<n&&(this.sublayer_level_idc[n]=U.readUint8())}if(this.ptl_num_sub_profiles=U.readUint8(),this.general_sub_profile_idc=[],this.ptl_num_sub_profiles)for(let n=0;n<this.ptl_num_sub_profiles;n++)this.general_sub_profile_idc.push(U.readUint32())}this.max_picture_width=U.readUint16(),this.max_picture_height=U.readUint16(),this.avg_frame_rate=U.readUint16()}const F=12,t=13;this.nalu_arrays=[];const Q=U.readUint8();for(let n=0;n<Q;n++){const s=[];this.nalu_arrays.push(s),e.stream_read_1_bytes(U),s.completeness=e.extract_bits(1),e.extract_bits(2),s.nalu_type=e.extract_bits(5);let l=1;s.nalu_type!==t&&s.nalu_type!==F&&(l=U.readUint16());for(let B=0;B<l;B++){const a=U.readUint16();s.push({data:U.readUint8Array(a),length:a})}}}},ue.fourcc="vvcC",ue),fe,ql=(fe=class extends V{constructor(){super(...arguments),this.box_name="ColourInformationBox"}parse(U){if(this.colour_type=U.readString(4),this.colour_type==="nclx"){this.colour_primaries=U.readUint16(),this.transfer_characteristics=U.readUint16(),this.matrix_coefficients=U.readUint16();const e=U.readUint8();this.full_range_flag=e>>7}else this.colour_type==="rICC"?this.ICC_profile=U.readUint8Array(this.size-4):this.colour_type==="prof"&&(this.ICC_profile=U.readUint8Array(this.size-4))}},fe.fourcc="colr",fe);function tU(i,U){let e=Number(i).toString(16);for(U=typeof U>"u"?2:U;e.length<U;)e="0"+e;return e}var Gi=class extends g{getCodec(){const i=super.getCodec();return this.avcC?`${i}.${tU(this.avcC.AVCProfileIndication)}${tU(this.avcC.profile_compatibility)}${tU(this.avcC.AVCLevelIndication)}`:i}},me,$l=(me=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},me.fourcc="avc1",me),Ce,UB=(Ce=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},Ce.fourcc="avc2",Ce),Te,eB=(Te=class extends Gi{constructor(){super(...arguments),this.box_name="AVCSampleEntry"}},Te.fourcc="avc3",Te),ge,FB=(ge=class extends Gi{constructor(){super(...arguments),this.box_name="AVC2SampleEntry"}},ge.fourcc="avc4",ge),De,tB=(De=class extends g{constructor(){super(...arguments),this.box_name="AV1SampleEntry"}getCodec(){const U=super.getCodec(),e=this.av1C.seq_level_idx_0,F=e<10?"0"+e:e;let t;return this.av1C.seq_profile===2&&this.av1C.high_bitdepth===1?t=this.av1C.twelve_bit===1?"12":"10":this.av1C.seq_profile<=2&&(t=this.av1C.high_bitdepth===1?"10":"08"),U+"."+this.av1C.seq_profile+"."+F+(this.av1C.seq_tier_0?"H":"M")+"."+t}},De.fourcc="av01",De),xe,QB=(xe=class extends g{},xe.fourcc="dav1",xe),Xi=class extends g{getCodec(){let i=super.getCodec();if(this.hvcC){switch(i+=".",this.hvcC.general_profile_space){case 0:i+="";break;case 1:i+="A";break;case 2:i+="B";break;case 3:i+="C";break}i+=this.hvcC.general_profile_idc,i+=".";let U=this.hvcC.general_profile_compatibility,e=0;for(let Q=0;Q<32&&(e|=U&1,Q!==31);Q++)e<<=1,U>>=1;i+=tU(e,0),i+=".",this.hvcC.general_tier_flag===0?i+="L":i+="H",i+=this.hvcC.general_level_idc;let F=!1,t="";for(let Q=5;Q>=0;Q--)(this.hvcC.general_constraint_indicator[Q]||F)&&(t="."+tU(this.hvcC.general_constraint_indicator[Q],0)+t,F=!0);i+=t}return i}},be,iB=(be=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry"}},be.fourcc="hvc1",be),Me,nB=(Me=class extends Xi{},Me.fourcc="hvc2",Me),ye,sB=(ye=class extends Xi{constructor(){super(...arguments),this.box_name="HEVCSampleEntry",this.colrs=[],this.subBoxNames=["colr"]}},ye.fourcc="hev1",ye),Ie,lB=(Ie=class extends Xi{},Ie.fourcc="hev2",Ie),we,BB=(we=class extends g{constructor(){super(...arguments),this.box_name="HEVCTileSampleSampleEntry"}},we.fourcc="hvt1",we),ve,aB=(ve=class extends g{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},ve.fourcc="lhe1",ve),_e,dB=(_e=class extends g{constructor(){super(...arguments),this.box_name="LHEVCSampleEntry"}},_e.fourcc="lhv1",_e),ze,rB=(ze=class extends g{},ze.fourcc="dvh1",ze),He,RB=(He=class extends g{},He.fourcc="dvhe",He),as=class extends g{getCodec(){let i=super.getCodec();if(this.vvcC){i+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?i+=".H":i+=".L",i+=this.vvcC.general_level_idc;let U="";if(this.vvcC.general_constraint_info){const e=[];let F=0;F|=this.vvcC.ptl_frame_only_constraint_flag<<7,F|=this.vvcC.ptl_multilayer_enabled_flag<<6;let t;for(let Q=0;Q<this.vvcC.general_constraint_info.length;++Q)F|=this.vvcC.general_constraint_info[Q]>>2&63,e.push(F),F&&(t=Q),F=this.vvcC.general_constraint_info[Q]>>2&3;if(t===void 0)U=".CA";else{U=".C";const Q="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,s=0;for(let l=0;l<=t;++l)for(n=n<<8|e[l],s+=8;s>=5;){const B=n>>s-5&31;U+=Q[B],s-=5,n&=(1<<s)-1}s&&(n<<=5-s,U+=Q[n&31])}}i+=U}return i}},Ye,oB=(Ye=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Ye.fourcc="vvc1",Ye),Ge,hB=(Ge=class extends as{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Ge.fourcc="vvi1",Ge),Xe,VB=(Xe=class extends g{constructor(){super(...arguments),this.box_name="VvcSampleEntry"}},Xe.fourcc="vvs1",Xe),Le,JB=(Le=class extends g{constructor(){super(...arguments),this.box_name="VvcNonVCLSampleEntry"}},Le.fourcc="vvcN",Le),ds=class extends g{getCodec(){const i=super.getCodec();let U=this.vpcC.level;U===0&&(U="00");let e=this.vpcC.bitDepth;return e===8&&(e="08"),`${i}.0${this.vpcC.profile}.${U}.${e}`}},Oe,SB=(Oe=class extends ds{},Oe.fourcc="vp08",Oe),Ae,cB=(Ae=class extends ds{},Ae.fourcc="vp09",Ae),je,WB=(je=class extends g{},je.fourcc="avs3",je),Ke,pB=(Ke=class extends g{constructor(){super(...arguments),this.box_name="J2KSampleEntry"}},Ke.fourcc="j2ki",Ke),Pe,EB=(Pe=class extends g{},Pe.fourcc="mjp2",Pe),qe,NB=(qe=class extends g{},qe.fourcc="mjpg",qe),$e,ZB=($e=class extends g{constructor(){super(...arguments),this.box_name="UncompressedVideoSampleEntry"}},$e.fourcc="uncv",$e),UF,kB=(UF=class extends g{constructor(){super(...arguments),this.box_name="MP4VisualSampleEntry"}},UF.fourcc="mp4v",UF),eF,uB=(eF=class extends w{constructor(){super(...arguments),this.box_name="MP4AudioSampleEntry"}getCodec(){const U=super.getCodec();if(this.esds&&this.esds.esd){const e=this.esds.esd.getOTI(),F=this.esds.esd.getAudioConfig();return U+"."+tU(e)+(F?"."+F:"")}else return U}},eF.fourcc="mp4a",eF),FF,fB=(FF=class extends w{},FF.fourcc="m4ae",FF),tF,mB=(tF=class extends w{},tF.fourcc="ac-3",tF),QF,CB=(QF=class extends w{},QF.fourcc="ac-4",QF),iF,TB=(iF=class extends w{},iF.fourcc="ec-3",iF),nF,gB=(nF=class extends w{},nF.fourcc="Opus",nF),sF,DB=(sF=class extends w{},sF.fourcc="mha1",sF),lF,xB=(lF=class extends w{},lF.fourcc="mha2",lF),BF,bB=(BF=class extends w{},BF.fourcc="mhm1",BF),aF,MB=(aF=class extends w{},aF.fourcc="mhm2",aF),dF,yB=(dF=class extends w{},dF.fourcc="fLaC",dF),rF,IB=(rF=class extends g{},rF.fourcc="encv",rF),RF,wB=(RF=class extends w{},RF.fourcc="enca",RF),oF,vB=(oF=class extends ${constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},oF.fourcc="encu",oF),hF,_B=(hF=class extends Vn{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},hF.fourcc="encs",hF),VF,zB=(VF=class extends Vn{},VF.fourcc="mp4s",VF),JF,HB=(JF=class extends rl{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},JF.fourcc="enct",JF),SF,YB=(SF=class extends QU{constructor(){super(...arguments),this.subBoxNames=["sinf"],this.sinfs=[]}},SF.fourcc="encm",SF),cF,GB=(cF=class extends g{constructor(){super(...arguments),this.box_name="RestrictedVideoSampleEntry"}},cF.fourcc="resv",cF),WF,XB=(WF=class extends ${parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}},WF.fourcc="sbtt",WF),pF,rs=(pF=class extends ${parse(U){this.parseHeader(U),this.namespace=U.readCString(),this.schema_location=U.readCString(),this.auxiliary_mime_types=U.readCString(),this.parseFooter(U)}write(U){this.writeHeader(U),this.size+=this.namespace.length+1+this.schema_location.length+1+this.auxiliary_mime_types.length+1,U.writeCString(this.namespace),U.writeCString(this.schema_location),U.writeCString(this.auxiliary_mime_types),this.writeFooter(U)}},pF.fourcc="stpp",pF),EF,LB=(EF=class extends ${parse(U){this.parseHeader(U),this.content_encoding=U.readCString(),this.mime_format=U.readCString(),this.parseFooter(U)}getCodec(){const U=super.getCodec();return this.mime_format?U+"."+this.mime_format:U}},EF.fourcc="stxt",EF),NF,OB=(NF=class extends ${parse(U){this.parseHeader(U),this.displayFlags=U.readUint32(),this.horizontal_justification=U.readInt8(),this.vertical_justification=U.readInt8(),this.bg_color_rgba=U.readUint8Array(4),this.box_record=U.readInt16Array(4),this.style_record=U.readUint8Array(12),this.parseFooter(U)}},NF.fourcc="tx3g",NF),ZF,AB=(ZF=class extends QU{parse(U){this.parseHeader(U),this.parseFooter(U)}},ZF.fourcc="wvtt",ZF),kF,jB=(kF=class extends o{constructor(){super(...arguments),this.box_name="SampleToGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),this.version===1?this.grouping_type_parameter=U.readUint32():this.grouping_type_parameter=0,this.entries=[];const e=U.readUint32();for(let F=0;F<e;F++)this.entries.push({sample_count:U.readInt32(),group_description_index:U.readInt32()})}write(U){this.grouping_type_parameter?this.version=1:this.version=0,this.flags=0,this.size=8+8*this.entries.length+(this.version===1?4:0),this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.grouping_type_parameter),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const F=this.entries[e];U.writeInt32(F.sample_count),U.writeInt32(F.group_description_index)}}},kF.fourcc="sbgp",kF),uF,KB=(uF=class extends o{constructor(){super(...arguments),this.box_name="SampleDependencyTypeBox"}parse(U){this.parseFullHeader(U);const e=this.size-this.hdr_size;this.is_leading=[],this.sample_depends_on=[],this.sample_is_depended_on=[],this.sample_has_redundancy=[];for(let F=0;F<e;F++){const t=U.readUint8();this.is_leading[F]=t>>6,this.sample_depends_on[F]=t>>4&3,this.sample_is_depended_on[F]=t>>2&3,this.sample_has_redundancy[F]=t&3}}},uF.fourcc="sdtp",uF),fF,PB=(fF=class extends o{constructor(){super(...arguments),this.box_name="SampleGroupDescriptionBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readString(4),R.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),this.version===1?this.default_length=U.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=U.readUint32()),this.entries=[];const e=U.readUint32();for(let F=0;F<e;F++){let t;this.grouping_type in I.sampleGroupEntry?t=new I.sampleGroupEntry[this.grouping_type](this.grouping_type):t=new D(this.grouping_type),this.entries.push(t),this.version===1?this.default_length===0?t.description_length=U.readUint32():t.description_length=this.default_length:t.description_length=this.default_length,t.write===D.prototype.write&&(R.info("BoxParser","SampleGroup for type "+this.grouping_type+" writing not yet implemented, keeping unparsed data in memory for later write"),t.data=U.readUint8Array(t.description_length),U.seek(U.getPosition()-t.description_length)),t.parse(U)}}write(U){this.flags=0,this.size=12;for(let e=0;e<this.entries.length;e++){const F=this.entries[e];this.version===1&&(this.default_length===0&&(this.size+=4),this.size+=F.data.length)}this.writeHeader(U),U.writeString(this.grouping_type,void 0,4),this.version===1&&U.writeUint32(this.default_length),this.version>=2&&U.writeUint32(this.default_sample_description_index),U.writeUint32(this.entries.length);for(let e=0;e<this.entries.length;e++){const F=this.entries[e];this.version===1&&this.default_length===0&&U.writeUint32(F.description_length),F.write(U)}}},fF.fourcc="sgpd",fF),mF,qB=(mF=class extends o{constructor(){super(...arguments),this.box_name="CompressedSegmentIndexBox"}parse(U){this.parseFullHeader(U),this.reference_ID=U.readUint32(),this.timescale=U.readUint32(),this.version===0?(this.earliest_presentation_time=U.readUint32(),this.first_offset=U.readUint32()):(this.earliest_presentation_time=U.readUint64(),this.first_offset=U.readUint64()),U.readUint16(),this.references=[];const e=U.readUint16();for(let F=0;F<e;F++){const t=U.readUint32(),Q=U.readUint32(),n=U.readUint32();this.references.push({reference_type:t>>31&1,referenced_size:t&2147483647,subsegment_duration:Q,starts_with_SAP:n>>31&1,SAP_type:n>>28&7,SAP_delta_time:n&268435455})}}write(U){const e=this.earliest_presentation_time>x||this.first_offset>x||this.version===1;this.version=e?1:0,this.size=4*2+2+2+12*this.references.length,this.size+=e?16:8,this.flags=0,this.writeHeader(U),U.writeUint32(this.reference_ID),U.writeUint32(this.timescale),e?(U.writeUint64(this.earliest_presentation_time),U.writeUint64(this.first_offset)):(U.writeUint32(this.earliest_presentation_time),U.writeUint32(this.first_offset)),U.writeUint16(0),U.writeUint16(this.references.length);for(let F=0;F<this.references.length;F++){const t=this.references[F];U.writeUint32(t.reference_type<<31|t.referenced_size),U.writeUint32(t.subsegment_duration),U.writeUint32(t.starts_with_SAP<<31|t.SAP_type<<28|t.SAP_delta_time)}}},mF.fourcc="sidx",mF),CF,Rs=(CF=class extends o{constructor(){super(...arguments),this.box_name="SoundMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.balance=U.readUint16(),U.readUint16()}write(U){this.version=0,this.size=4,this.writeHeader(U),U.writeUint16(this.balance),U.writeUint16(0)}},CF.fourcc="smhd",CF),TF,os=(TF=class extends o{constructor(){super(...arguments),this.box_name="ChunkOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let F=0;F<e;F++)this.chunk_offsets.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+4*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length),U.writeUint32Array(this.chunk_offsets)}unpack(U){for(let e=0;e<this.chunk_offsets.length;e++)U[e].offset=this.chunk_offsets[e]}},TF.fourcc="stco",TF),gF,hs=(gF=class extends o{constructor(){super(...arguments),this.box_name="SubtitleMediaHeaderBox"}},gF.fourcc="sthd",gF),DF,Vs=(DF=class extends o{constructor(){super(...arguments),this.box_name="SampleToChunkBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],this.version===0)for(let F=0;F<e;F++)this.first_chunk.push(U.readUint32()),this.samples_per_chunk.push(U.readUint32()),this.sample_description_index.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+12*this.first_chunk.length,this.writeHeader(U),U.writeUint32(this.first_chunk.length);for(let e=0;e<this.first_chunk.length;e++)U.writeUint32(this.first_chunk[e]),U.writeUint32(this.samples_per_chunk[e]),U.writeUint32(this.sample_description_index[e])}unpack(U){let e=0,F=0;for(let t=0;t<this.first_chunk.length;t++)for(let Q=0;Q<(t+1<this.first_chunk.length?this.first_chunk[t+1]:1/0);Q++){F++;for(let n=0;n<this.samples_per_chunk[t];n++){if(U[e])U[e].description_index=this.sample_description_index[t],U[e].chunk_index=F;else return;e++}}}},DF.fourcc="stsc",DF),xF,Js=(xF=class extends o{constructor(){super(...arguments),this.box_name="SampleDescriptionBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let F=1;F<=e;F++){const t=H(U,!0,this.size-(U.getPosition()-this.start));if(t.code===_){let Q;t.type in I.sampleEntry?(Q=new I.sampleEntry[t.type](t.size),Q.hdr_size=t.hdr_size,Q.start=t.start):(R.warn("BoxParser",`Unknown sample entry type: '${t.type}'`),Q=new L(t.size,t.hdr_size,t.start),Q.type=t.type),Q.write===L.prototype.write&&(R.info("BoxParser","SampleEntry "+Q.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),Q.parseDataAndRewind(U)),Q.parse(U),this.entries.push(Q)}else return}}write(U){this.version=0,this.flags=0,this.size=0,this.writeHeader(U),U.writeUint32(this.entries.length),this.size+=4;for(let e=0;e<this.entries.length;e++)this.entries[e].write(U),this.size+=this.entries[e].size;R.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),U.adjustUint32(this.sizePosition,this.size)}},xF.fourcc="stsd",xF),bF,Ss=(bF=class extends o{constructor(){super(...arguments),this.box_name="SampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.sample_size=U.readUint32(),this.sample_count=U.readUint32();for(let e=0;e<this.sample_count;e++)this.sample_size===0?this.sample_sizes.push(U.readUint32()):this.sample_sizes[e]=this.sample_size}}write(U){let e=!0;if(this.version=0,this.flags=0,this.sample_sizes.length>0){let F=0;for(;F+1<this.sample_sizes.length;)if(this.sample_sizes[F+1]!==this.sample_sizes[0]){e=!1;break}else F++}else e=!1;this.size=8,e||(this.size+=4*this.sample_sizes.length),this.writeHeader(U),e?U.writeUint32(this.sample_sizes[0]):U.writeUint32(0),U.writeUint32(this.sample_sizes.length),e||U.writeUint32Array(this.sample_sizes)}unpack(U){for(let e=0;e<this.sample_sizes.length;e++)U[e].size=this.sample_sizes[e]}},bF.fourcc="stsz",bF),MF,cs=(MF=class extends o{constructor(){super(...arguments),this.box_name="TimeToSampleBox",this.sample_counts=[],this.sample_deltas=[]}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.sample_counts.length=0,this.sample_deltas.length=0,this.version===0)for(let F=0;F<e;F++){this.sample_counts.push(U.readUint32());let t=U.readInt32();t<0&&(R.warn("BoxParser","File uses negative stts sample delta, using value 1 instead, sync may be lost!"),t=1),this.sample_deltas.push(t)}}write(U){this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let e=0;e<this.sample_counts.length;e++)U.writeUint32(this.sample_counts[e]),U.writeUint32(this.sample_deltas[e])}unpack(U){let e=0;for(let F=0;F<this.sample_counts.length;F++)for(let t=0;t<this.sample_counts[F];t++)e===0?U[e].dts=0:U[e].dts=U[e-1].dts+this.sample_deltas[F],e++}},MF.fourcc="stts",MF),yF,Ws=(yF=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentBaseMediaDecodeTimeBox"}parse(U){this.parseFullHeader(U),this.version===1?this.baseMediaDecodeTime=U.readUint64():this.baseMediaDecodeTime=U.readUint32()}write(U){const e=this.baseMediaDecodeTime>x||this.version===1;this.version=e?1:0,this.size=4,this.size+=e?4:0,this.flags=0,this.writeHeader(U),e?U.writeUint64(this.baseMediaDecodeTime):U.writeUint32(this.baseMediaDecodeTime)}},yF.fourcc="tfdt",yF),IF,ps=(IF=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentHeaderBox"}parse(U){this.parseFullHeader(U);let e=0;this.track_id=U.readUint32(),this.size-this.hdr_size>e&&this.flags&Ci?(this.base_data_offset=U.readUint64(),e+=8):this.base_data_offset=0,this.size-this.hdr_size>e&&this.flags&Ti?(this.default_sample_description_index=U.readUint32(),e+=4):this.default_sample_description_index=0,this.size-this.hdr_size>e&&this.flags&gi?(this.default_sample_duration=U.readUint32(),e+=4):this.default_sample_duration=0,this.size-this.hdr_size>e&&this.flags&Di?(this.default_sample_size=U.readUint32(),e+=4):this.default_sample_size=0,this.size-this.hdr_size>e&&this.flags&xi?(this.default_sample_flags=U.readUint32(),e+=4):this.default_sample_flags=0}write(U){this.version=0,this.size=4,this.flags&Ci&&(this.size+=8),this.flags&Ti&&(this.size+=4),this.flags&gi&&(this.size+=4),this.flags&Di&&(this.size+=4),this.flags&xi&&(this.size+=4),this.writeHeader(U),U.writeUint32(this.track_id),this.flags&Ci&&U.writeUint64(this.base_data_offset),this.flags&Ti&&U.writeUint32(this.default_sample_description_index),this.flags&gi&&U.writeUint32(this.default_sample_duration),this.flags&Di&&U.writeUint32(this.default_sample_size),this.flags&xi&&U.writeUint32(this.default_sample_flags)}},IF.fourcc="tfhd",IF),wF,Es=(wF=class extends o{constructor(){super(...arguments),this.box_name="TrackHeaderBox",this.layer=0,this.alternate_group=0}parse(U){this.parseFullHeader(U),this.version===1?(this.creation_time=U.readUint64(),this.modification_time=U.readUint64(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint64()):(this.creation_time=U.readUint32(),this.modification_time=U.readUint32(),this.track_id=U.readUint32(),U.readUint32(),this.duration=U.readUint32()),U.readUint32Array(2),this.layer=U.readInt16(),this.alternate_group=U.readInt16(),this.volume=U.readInt16()>>8,U.readUint16(),this.matrix=U.readInt32Array(9),this.width=U.readUint32(),this.height=U.readUint32()}write(U){const e=this.modification_time>x||this.creation_time>x||this.duration>x||this.version===1;this.version=e?1:0,this.size=5*4+15*4,this.size+=e?3*4:0,this.flags=this.flags??3,this.writeHeader(U),e?(U.writeUint64(this.creation_time),U.writeUint64(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint64(this.duration)):(U.writeUint32(this.creation_time),U.writeUint32(this.modification_time),U.writeUint32(this.track_id),U.writeUint32(0),U.writeUint32(this.duration)),U.writeUint32Array([0,0]),U.writeInt16(this.layer),U.writeInt16(this.alternate_group),U.writeInt16(this.volume<<8),U.writeInt16(0),U.writeInt32Array(this.matrix),U.writeUint32(this.width),U.writeUint32(this.height)}print(U){super.printHeader(U),U.log(U.indent+"creation_time: "+this.creation_time),U.log(U.indent+"modification_time: "+this.modification_time),U.log(U.indent+"track_id: "+this.track_id),U.log(U.indent+"duration: "+this.duration),U.log(U.indent+"volume: "+(this.volume>>8)),U.log(U.indent+"matrix: "+this.matrix.join(", ")),U.log(U.indent+"layer: "+this.layer),U.log(U.indent+"alternate_group: "+this.alternate_group),U.log(U.indent+"width: "+this.width),U.log(U.indent+"height: "+this.height)}},wF.fourcc="tkhd",wF),vF,Bn=(vF=class extends o{constructor(){super(...arguments),this.box_name="TrackExtendsBox"}parse(U){this.parseFullHeader(U),this.track_id=U.readUint32(),this.default_sample_description_index=U.readUint32(),this.default_sample_duration=U.readUint32(),this.default_sample_size=U.readUint32(),this.default_sample_flags=U.readUint32()}write(U){this.version=0,this.flags=0,this.size=4*5,this.writeHeader(U),U.writeUint32(this.track_id),U.writeUint32(this.default_sample_description_index),U.writeUint32(this.default_sample_duration),U.writeUint32(this.default_sample_size),U.writeUint32(this.default_sample_flags)}},vF.fourcc="trex",vF),_F,Ns=(_F=class extends o{constructor(){super(...arguments),this.box_name="TrackRunBox",this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[]}parse(U){this.parseFullHeader(U);let e=0;if(this.sample_count=U.readUint32(),e+=4,this.size-this.hdr_size>e&&this.flags&rU?(this.data_offset=U.readInt32(),e+=4):this.data_offset=0,this.size-this.hdr_size>e&&this.flags&bi?(this.first_sample_flags=U.readUint32(),e+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>e)for(let F=0;F<this.sample_count;F++)this.flags&RU&&(this.sample_duration[F]=U.readUint32()),this.flags&oU&&(this.sample_size[F]=U.readUint32()),this.flags&hU&&(this.sample_flags[F]=U.readUint32()),this.flags&VU&&(this.version===0?this.sample_composition_time_offset[F]=U.readUint32():this.sample_composition_time_offset[F]=U.readInt32())}write(U){this.size=4,this.flags&rU&&(this.size+=4),this.flags&bi&&(this.size+=4),this.flags&RU&&(this.size+=4*this.sample_duration.length),this.flags&oU&&(this.size+=4*this.sample_size.length),this.flags&hU&&(this.size+=4*this.sample_flags.length),this.flags&VU&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(U),U.writeUint32(this.sample_count),this.flags&rU&&(this.data_offset_position=U.getPosition(),U.writeInt32(this.data_offset)),this.flags&bi&&U.writeUint32(this.first_sample_flags);for(let e=0;e<this.sample_count;e++)this.flags&RU&&U.writeUint32(this.sample_duration[e]),this.flags&oU&&U.writeUint32(this.sample_size[e]),this.flags&hU&&U.writeUint32(this.sample_flags[e]),this.flags&VU&&(this.version===0?U.writeUint32(this.sample_composition_time_offset[e]):U.writeInt32(this.sample_composition_time_offset[e]))}},_F.fourcc="trun",_F),zF,Zs=(zF=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrlBox"}parse(U){this.parseFullHeader(U),this.flags!==1&&(this.location=U.readCString())}write(U){this.version=0,this.location?(this.flags=0,this.size=this.location.length+1):(this.flags=1,this.size=0),this.writeHeader(U),this.location&&U.writeCString(this.location)}},zF.fourcc="url ",zF),HF,ks=(HF=class extends o{constructor(){super(...arguments),this.box_name="VideoMediaHeaderBox"}parse(U){this.parseFullHeader(U),this.graphicsmode=U.readUint16(),this.opcolor=U.readUint16Array(3)}write(U){this.version=0,this.size=8,this.writeHeader(U),U.writeUint16(this.graphicsmode),U.writeUint16Array(this.opcolor)}},HF.fourcc="vmhd",HF),Fn=class{constructor(i,U,e){this.grouping_type=i,this.grouping_type_parameter=U,this.sbgp=e,this.last_sample_in_run=-1,this.entry_index=-1}},$B=class A{constructor(U,e=!0){this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.moovStartSent=!1,this.readySent=!1,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.sidxSent=!1,this.items=[],this.entity_groups=[],this.itemsDataSize=0,this.lastMoofIndex=0,this.samplesDataSize=0,this.lastBoxStartPosition=0,this.nextParsePosition=0,this.discardMdatData=!0,this.discardMdatData=e,U?(this.stream=U,this.parse()):this.stream=new yi,this.stream.isofile=this}setSegmentOptions(U,e,F){const{sizePerSegment:t=Number.MAX_SAFE_INTEGER,rapAlignement:Q=!0}=F;let n=F.nbSamples??F.nbSamplesPerFragment??1e3;const s=F.nbSamplesPerFragment??n;if(n<=0||s<=0||t<=0){R.error("ISOFile",`Invalid segment options: nbSamples=${n}, nbSamplesPerFragment=${s}, sizePerSegment=${t}`);return}if(n<s&&(R.warn("ISOFile",`nbSamples (${n}) is less than nbSamplesPerFragment (${s}), setting nbSamples to nbSamplesPerFragment`),n=s),this.fragmentedTracks.some(B=>B.nb_samples!==n)){R.error("ISOFile",`Cannot set segment options for track ${U}: nbSamples (${n}) does not match existing tracks`);return}const l=this.getTrackById(U);if(l){const B={id:U,user:e,trak:l,segmentStream:void 0,nb_samples:n,nb_samples_per_fragment:s,size_per_segment:t,rapAlignement:Q,state:{lastFragmentSampleNumber:0,lastSegmentSampleNumber:0,accumulatedSize:0}};this.fragmentedTracks.push(B),l.nextSample=0}this.discardMdatData&&R.warn("ISOFile","Segmentation options set but discardMdatData is true, samples will not be segmented")}unsetSegmentOptions(U){let e=-1;for(let F=0;F<this.fragmentedTracks.length;F++)this.fragmentedTracks[F].id===U&&(e=F);e>-1&&this.fragmentedTracks.splice(e,1)}setExtractionOptions(U,e,{nbSamples:F=1e3}={}){const t=this.getTrackById(U);t&&(this.extractedTracks.push({id:U,user:e,trak:t,nb_samples:F,samples:[]}),t.nextSample=0),this.discardMdatData&&R.warn("ISOFile","Extraction options set but discardMdatData is true, samples will not be extracted")}unsetExtractionOptions(U){let e=-1;for(let F=0;F<this.extractedTracks.length;F++)this.extractedTracks[F].id===U&&(e=F);e>-1&&this.extractedTracks.splice(e,1)}parse(){if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else{this.saveParsePosition&&this.saveParsePosition();const e=H(this.stream,!1);if(e.code===O)if(this.processIncompleteBox){if(this.processIncompleteBox(e))continue;return}else return;else if(e.code===_){const F=e.box;if(this.boxes.push(F),F.type==="uuid")this[F.uuid]!==void 0&&R.warn("ISOFile","Duplicate Box of uuid: "+F.uuid+", overriding previous occurrence"),this[F.uuid]=F;else switch(F.type){case"mdat":this.mdats.push(F),this.transferMdatData(F);break;case"moof":this.moofs.push(F);break;case"free":case"skip":break;case"moov":this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0);default:this[F.type]!==void 0?Array.isArray(this[F.type+"s"])?(R.info("ISOFile",`Found multiple boxes of type ${F.type} in ISOFile, adding to array`),this[F.type+"s"].push(F)):(R.warn("ISOFile",`Found multiple boxes of type ${F.type} but no array exists. Creating array dynamically.`),this[F.type+"s"]=[this[F.type],F]):(this[F.type]=F,Array.isArray(this[F.type+"s"])&&this[F.type+"s"].push(F));break}this.updateUsedBytes&&this.updateUsedBytes(F,e)}else if(e.code===Yn){R.error("ISOFile",`Invalid data found while parsing box of type '${e.type}' at position ${e.start}. Aborting parsing.`,this);break}}}checkBuffer(U){if(!U)throw new Error("Buffer must be defined and non empty");return U.byteLength===0?(R.warn("ISOFile","Ignoring empty buffer (fileStart: "+U.fileStart+")"),this.stream.logBufferLevel(),!1):(R.info("ISOFile","Processing buffer (fileStart: "+U.fileStart+")"),U.usedBytes=0,this.stream.insertBuffer(U),this.stream.logBufferLevel(),this.stream.initialized()?!0:(R.warn("ISOFile","Not ready to start parsing"),!1))}appendBuffer(U,e){let F;if(this.checkBuffer(U))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(e),this.nextSeekPosition?(F=this.nextSeekPosition,this.nextSeekPosition=void 0):F=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(F=this.stream.getEndFilePositionAfter(F))):this.nextParsePosition?F=this.nextParsePosition:F=0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(R.info("ISOFile","Done processing buffer (fileStart: "+U.fileStart+") - next buffer to fetch should have a fileStart position of "+F),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),F}getFragmentDuration(){const U=this.getBox("mvex");if(!U)return;if(U.mehd)return{num:U.mehd.fragment_duration,den:this.moov.mvhd.timescale};const e=this.getBoxes("trak",!1);let F={num:0,den:1};for(const t of e){const Q=t.samples_duration,n=t.mdia.mdhd.timescale;Q&&n&&Q/n>F.num/F.den&&(F={num:Q,den:n})}return F}getInfo(){if(!this.moov)return{hasMoov:!1,mime:""};const U=new Date("1904-01-01T00:00:00Z").getTime(),e=this.getBox("mvex")!==void 0,F={hasMoov:!0,duration:this.moov.mvhd.duration,timescale:this.moov.mvhd.timescale,isFragmented:e,fragment_duration:this.getFragmentDuration(),isProgressive:this.isProgressive,hasIOD:this.moov.iods!==void 0,brands:[this.ftyp.major_brand].concat(this.ftyp.compatible_brands),created:new Date(U+this.moov.mvhd.creation_time*1e3),modified:new Date(U+this.moov.mvhd.modification_time*1e3),tracks:[],audioTracks:[],videoTracks:[],subtitleTracks:[],metadataTracks:[],hintTracks:[],otherTracks:[],mime:""};for(let t=0;t<this.moov.traks.length;t++){const Q=this.moov.traks[t],n=Q.mdia.minf.stbl.stsd.entries[0],s=Q.samples_size,l=Q.mdia.mdhd.timescale,B=Q.samples_duration,a=s*8*l/B,d={samples_duration:B,bitrate:a,size:s,timescale:l,alternate_group:Q.tkhd.alternate_group,codec:n.getCodec(),created:new Date(U+Q.tkhd.creation_time*1e3),cts_shift:Q.mdia.minf.stbl.cslg,duration:Q.mdia.mdhd.duration,id:Q.tkhd.track_id,kind:Q.udta&&Q.udta.kinds.length?Q.udta.kinds[0]:{schemeURI:"",value:""},language:Q.mdia.elng?Q.mdia.elng.extended_language:Q.mdia.mdhd.languageString,layer:Q.tkhd.layer,matrix:Q.tkhd.matrix,modified:new Date(U+Q.tkhd.modification_time*1e3),movie_duration:Q.tkhd.duration,movie_timescale:F.timescale,name:Q.mdia.hdlr.name,nb_samples:Q.samples.length,references:[],track_height:Q.tkhd.height/65536,track_width:Q.tkhd.width/65536,volume:Q.tkhd.volume};if(F.tracks.push(d),Q.tref)for(let h=0;h<Q.tref.references.length;h++)d.references.push({type:Q.tref.references[h].type,track_ids:Q.tref.references[h].track_ids});Q.edts!==void 0&&Q.edts.elst!==void 0&&(d.edits=Q.edts.elst.entries),n instanceof w?(d.type="audio",F.audioTracks.push(d),d.audio={sample_rate:n.getSampleRate(),channel_count:n.getChannelCount(),sample_size:n.getSampleSize()}):n instanceof g?(d.type="video",F.videoTracks.push(d),d.video={width:n.getWidth(),height:n.getHeight()}):n instanceof $?(d.type="subtitles",F.subtitleTracks.push(d)):n instanceof bn?(d.type="metadata",F.hintTracks.push(d)):n instanceof QU?(d.type="metadata",F.metadataTracks.push(d)):(d.type="metadata",F.otherTracks.push(d))}F.videoTracks&&F.videoTracks.length>0?F.mime+='video/mp4; codecs="':F.audioTracks&&F.audioTracks.length>0?F.mime+='audio/mp4; codecs="':F.mime+='application/mp4; codecs="';for(let t=0;t<F.tracks.length;t++)t!==0&&(F.mime+=","),F.mime+=F.tracks[t].codec;return F.mime+='"; profiles="',F.mime+=this.ftyp.compatible_brands.join(),F.mime+='"',F}setNextSeekPositionFromSample(U){U&&(this.nextSeekPosition?this.nextSeekPosition=Math.min(U.offset+U.alreadyRead,this.nextSeekPosition):this.nextSeekPosition=U.offset+U.alreadyRead)}processSamples(U){if(this.sampleProcessingStarted){if(this.isFragmentationInitialized&&this.onSegment!==void 0){const e=new Set;for(;e.size<this.fragmentedTracks.length&&this.fragmentedTracks.some(F=>F.trak.nextSample<F.trak.samples.length)&&this.sampleProcessingStarted;)for(const F of this.fragmentedTracks){const t=F.trak;if(!e.has(F.id)){const Q=t.nextSample<t.samples.length?this.getSample(t,t.nextSample):void 0;if(!Q){this.setNextSeekPositionFromSample(t.samples[t.nextSample]),e.add(F.id);continue}F.state.accumulatedSize+=Q.size;const n=t.nextSample+1,s=n-F.state.lastFragmentSampleNumber>F.nb_samples_per_fragment,l=n-F.state.lastSegmentSampleNumber>F.nb_samples;let B=s||n%F.nb_samples_per_fragment===0,a=l||n%F.nb_samples===0,d=F.state.accumulatedSize>=F.size_per_segment;const h=!F.rapAlignement||Q.is_sync,J=U||t.nextSample+1>=t.samples.length;if(J&&!h&&R.warn("ISOFile","Flushing track #"+F.id+" at sample #"+t.nextSample+" which is not a RAP, this may lead to playback issues"),B=B&&h,a=a&&h,d=d&&h,B||d||J){s?R.warn("ISOFile","Fragment on track #"+F.id+" is overdue, creating it with samples ["+F.state.lastFragmentSampleNumber+", "+t.nextSample+"]"):R.debug("ISOFile","Creating media fragment on track #"+F.id+" for samples ["+F.state.lastFragmentSampleNumber+", "+t.nextSample+"]");const c=this.createFragment(F.id,F.state.lastFragmentSampleNumber,t.nextSample,F.segmentStream);if(c)F.segmentStream=c,F.state.lastFragmentSampleNumber=t.nextSample+1;else{e.add(F.id);continue}}(a||d||J)&&(l?R.warn("ISOFile","Segment on track #"+F.id+" is overdue, sending it with samples ["+Math.max(0,t.nextSample-F.nb_samples)+", "+(t.nextSample-1)+"]"):R.info("ISOFile","Sending fragmented data on track #"+F.id+" for samples ["+Math.max(0,t.nextSample-F.nb_samples)+", "+(t.nextSample-1)+"]"),R.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(F.id,F.user,F.segmentStream.buffer,t.nextSample+1,U||t.nextSample+1>=t.samples.length),F.segmentStream=void 0,F.state.accumulatedSize=0,F.state.lastSegmentSampleNumber=t.nextSample+1),t.nextSample++}}}if(this.onSamples!==void 0)for(let e=0;e<this.extractedTracks.length;e++){const F=this.extractedTracks[e],t=F.trak;for(;t.nextSample<t.samples.length&&this.sampleProcessingStarted;){R.debug("ISOFile","Exporting on track #"+F.id+" sample #"+t.nextSample);const Q=this.getSample(t,t.nextSample);if(Q)t.nextSample++,F.samples.push(Q);else{this.setNextSeekPositionFromSample(t.samples[t.nextSample]);break}if((t.nextSample%F.nb_samples===0||t.nextSample>=t.samples.length)&&(R.debug("ISOFile","Sending samples on track #"+F.id+" for sample "+t.nextSample),this.onSamples&&this.onSamples(F.id,F.user,F.samples),F.samples=[],F!==this.extractedTracks[e]))break}}}}getBox(U){const e=this.getBoxes(U,!0);return e.length?e[0]:void 0}getBoxes(U,e){const F=[],t=Q=>{Q instanceof V&&Q.type&&Q.type===U&&F.push(Q);const n=[];Q.boxes&&n.push(...Q.boxes),Q.entries&&n.push(...Q.entries),Q.item_infos&&n.push(...Q.item_infos),Q.references&&n.push(...Q.references);for(const s of n){if(F.length&&e)return;t(s)}};return t(this),F}getTrackSamplesInfo(U){const e=this.getTrackById(U);if(e)return e.samples}getTrackSample(U,e){const F=this.getTrackById(U);return this.getSample(F,e)}releaseUsedSamples(U,e){let F=0;const t=this.getTrackById(U);t.lastValidSample||(t.lastValidSample=0);for(let Q=t.lastValidSample;Q<e;Q++)F+=this.releaseSample(t,Q);R.info("ISOFile","Track #"+U+" released samples up to "+e+" (released size: "+F+", remaining: "+this.samplesDataSize+")"),t.lastValidSample=e}start(){this.sampleProcessingStarted=!0,this.processSamples(!1)}stop(){this.sampleProcessingStarted=!1}flush(){R.info("ISOFile","Flushing remaining samples"),this.updateSampleLists(),this.processSamples(!0),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0)}seekTrack(U,e,F){let t=0,Q=0,n;if(F.samples.length===0)return R.info("ISOFile","No sample in track, cannot seek! Using time "+R.getDurationString(0,1)+" and offset: 0"),{offset:0,time:0};for(let l=0;l<F.samples.length;l++){const B=F.samples[l];if(l===0)Q=0,n=B.timescale;else if(B.cts>U*B.timescale){Q=l-1;break}e&&B.is_sync&&(t=l)}for(e&&(Q=t),U=F.samples[Q].cts,F.nextSample=Q;F.samples[Q].alreadyRead===F.samples[Q].size&&F.samples[Q+1];)Q++;const s=F.samples[Q].offset+F.samples[Q].alreadyRead;return R.info("ISOFile","Seeking to "+(e?"RAP":"")+" sample #"+F.nextSample+" on track "+F.tkhd.track_id+", time "+R.getDurationString(U,n)+" and offset: "+s),{offset:s,time:U/n}}getTrackDuration(U){if(!U.samples)return 1/0;const e=U.samples[U.samples.length-1];return(e.cts+e.duration)/e.timescale}seek(U,e){const F=this.moov;let t={offset:1/0,time:1/0};if(this.moov){for(let Q=0;Q<F.traks.length;Q++){const n=F.traks[Q];if(U>this.getTrackDuration(n))continue;const s=this.seekTrack(U,e,n);s.offset<t.offset&&(t.offset=s.offset),s.time<t.time&&(t.time=s.time)}return R.info("ISOFile","Seeking at time "+R.getDurationString(t.time,1)+" needs a buffer with a fileStart position of "+t.offset),t.offset===1/0?t={offset:this.nextParsePosition,time:0}:t.offset=this.stream.getEndFilePositionAfter(t.offset),R.info("ISOFile","Adjusted seek position (after checking data already in buffer): "+t.offset),t}else throw new Error("Cannot seek: moov not received!")}equal(U){let e=0;for(;e<this.boxes.length&&e<U.boxes.length;){const F=this.boxes[e],t=U.boxes[e];if(!Xn(F,t))return!1;e++}return!0}write(U){for(let e=0;e<this.boxes.length;e++)this.boxes[e].write(U)}createFragment(U,e,F,t){const Q=[];for(let a=e;a<=F;a++){const d=this.getTrackById(U),h=this.getSample(d,a);if(!h){this.setNextSeekPositionFromSample(d.samples[a]);return}Q.push(h)}const n=t||new v,s=this.createMoof(Q);s.write(n),s.trafs[0].truns[0].data_offset=s.size+8,R.debug("MP4Box","Adjusting data_offset with new value "+s.trafs[0].truns[0].data_offset),n.adjustUint32(s.trafs[0].truns[0].data_offset_position,s.trafs[0].truns[0].data_offset);const l=new Ii;l.stream=new yi;let B=0;for(const a of Q)if(a.data){const d=j.fromArrayBuffer(a.data.buffer,B);l.stream.insertBuffer(d),B+=a.data.byteLength}return l.write(n),n}static writeInitializationSegment(U,e,F){var n;R.debug("ISOFile","Generating initialization segment");const t=new v;U.write(t);const Q=e.addBox(new ln);if(F){const s=Q.addBox(new ss);s.fragment_duration=F}for(let s=0;s<e.traks.length;s++){const l=Q.addBox(new Bn);l.track_id=e.traks[s].tkhd.track_id,l.default_sample_description_index=1,l.default_sample_duration=((n=e.traks[s].samples[0])==null?void 0:n.duration)??0,l.default_sample_size=0,l.default_sample_flags=65536}return e.write(t),t.buffer}save(U){const e=new v;return e.isofile=this,this.write(e),e.save(U)}getBuffer(){const U=new v;return U.isofile=this,this.write(U),U}initializeSegmentation(){var e,F;this.onSegment||R.warn("MP4Box","No segmentation callback set!"),this.isFragmentationInitialized||(this.isFragmentationInitialized=!0,this.resetTables());const U=new sn;U.addBox(this.moov.mvhd);for(let t=0;t<this.fragmentedTracks.length;t++){const Q=this.getTrackById(this.fragmentedTracks[t].id);if(!Q){R.warn("ISOFile",`Track with id ${this.fragmentedTracks[t].id} not found, skipping fragmentation initialization`);continue}U.addBox(Q)}return{tracks:U.traks.map((t,Q)=>({id:t.tkhd.track_id,user:this.fragmentedTracks[Q].user})),buffer:A.writeInitializationSegment(this.ftyp,U,(F=(e=this.moov)==null?void 0:e.mvex)==null?void 0:F.mehd.fragment_duration)}}resetTables(){this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0;for(let U=0;U<this.moov.traks.length;U++){const e=this.moov.traks[U];e.tkhd.duration=0,e.mdia.mdhd.duration=0;const F=e.mdia.minf.stbl.stco||e.mdia.minf.stbl.co64;F.chunk_offsets=[];const t=e.mdia.minf.stbl.stsc;t.first_chunk=[],t.samples_per_chunk=[],t.sample_description_index=[];const Q=e.mdia.minf.stbl.stsz||e.mdia.minf.stbl.stz2;Q.sample_sizes=[];const n=e.mdia.minf.stbl.stts;n.sample_counts=[],n.sample_deltas=[];const s=e.mdia.minf.stbl.ctts;s&&(s.sample_counts=[],s.sample_offsets=[]);const l=e.mdia.minf.stbl.stss,B=e.mdia.minf.stbl.boxes.indexOf(l);B!==-1&&(e.mdia.minf.stbl.boxes[B]=void 0)}}static initSampleGroups(U,e,F,t,Q){e&&(e.sample_groups_info=[]),U.sample_groups_info||(U.sample_groups_info=[]);for(let n=0;n<F.length;n++){const s=F[n].grouping_type+"/"+F[n].grouping_type_parameter,l=new Fn(F[n].grouping_type,F[n].grouping_type_parameter,F[n]);e&&(e.sample_groups_info[s]=l),U.sample_groups_info[s]||(U.sample_groups_info[s]=l);for(let B=0;B<t.length;B++)t[B].grouping_type===F[n].grouping_type&&(l.description=t[B],l.description.used=!0);if(Q)for(let B=0;B<Q.length;B++)Q[B].grouping_type===F[n].grouping_type&&(l.fragment_description=Q[B],l.fragment_description.used=!0,l.is_fragment=!0)}if(e){if(Q){for(let n=0;n<Q.length;n++)if(!Q[n].used&&Q[n].version>=2){const s=Q[n].grouping_type+"/0",l=new Fn(Q[n].grouping_type,0);l.is_fragment=!0,e.sample_groups_info[s]||(e.sample_groups_info[s]=l)}}}else for(let n=0;n<t.length;n++)if(!t[n].used&&t[n].version>=2){const s=t[n].grouping_type+"/0",l=new Fn(t[n].grouping_type,0);U.sample_groups_info[s]||(U.sample_groups_info[s]=l)}}static setSampleGroupProperties(U,e,F,t){e.sample_groups=[];for(const Q in t)if(e.sample_groups[Q]={grouping_type:t[Q].grouping_type,grouping_type_parameter:t[Q].grouping_type_parameter},F>=t[Q].last_sample_in_run&&(t[Q].last_sample_in_run<0&&(t[Q].last_sample_in_run=0),t[Q].entry_index++,t[Q].entry_index<=t[Q].sbgp.entries.length-1&&(t[Q].last_sample_in_run+=t[Q].sbgp.entries[t[Q].entry_index].sample_count)),t[Q].entry_index<=t[Q].sbgp.entries.length-1?e.sample_groups[Q].group_description_index=t[Q].sbgp.entries[t[Q].entry_index].group_description_index:e.sample_groups[Q].group_description_index=-1,e.sample_groups[Q].group_description_index!==0){let n;if(t[Q].fragment_description?n=t[Q].fragment_description:n=t[Q].description,e.sample_groups[Q].group_description_index>0){let s;e.sample_groups[Q].group_description_index>65535?s=(e.sample_groups[Q].group_description_index>>16)-1:s=e.sample_groups[Q].group_description_index-1,n&&s>=0&&(e.sample_groups[Q].description=n.entries[s])}else n&&n.version>=2&&n.default_group_description_index>0&&(e.sample_groups[Q].description=n.entries[n.default_group_description_index-1])}}static process_sdtp(U,e,F){e&&(U?(e.is_leading=U.is_leading[F],e.depends_on=U.sample_depends_on[F],e.is_depended_on=U.sample_is_depended_on[F],e.has_redundancy=U.sample_has_redundancy[F]):(e.is_leading=0,e.depends_on=0,e.is_depended_on=0,e.has_redundancy=0))}buildSampleLists(){for(let U=0;U<this.moov.traks.length;U++)this.buildTrakSampleLists(this.moov.traks[U])}buildTrakSampleLists(U){let e,F,t,Q,n,s;U.samples=[],U.samples_duration=0,U.samples_size=0;const l=U.mdia.minf.stbl.stco||U.mdia.minf.stbl.co64,B=U.mdia.minf.stbl.stsc,a=U.mdia.minf.stbl.stsz||U.mdia.minf.stbl.stz2,d=U.mdia.minf.stbl.stts,h=U.mdia.minf.stbl.ctts,J=U.mdia.minf.stbl.stss,c=U.mdia.minf.stbl.stsd,S=U.mdia.minf.stbl.subs,N=U.mdia.minf.stbl.stdp,f=U.mdia.minf.stbl.sbgps,C=U.mdia.minf.stbl.sgpds;let k=-1,b=-1,u=-1,W=-1,y=0,m=0,T=0;if(A.initSampleGroups(U,void 0,f,C),!(typeof a>"u")){for(e=0;e<a.sample_sizes.length;e++){const p={number:e,track_id:U.tkhd.track_id,timescale:U.mdia.mdhd.timescale,alreadyRead:0,size:a.sample_sizes[e]};U.samples[e]=p,U.samples_size+=p.size,e===0?(t=1,F=0,p.chunk_index=t,p.chunk_run_index=F,s=B.samples_per_chunk[F],n=0,F+1<B.first_chunk.length?Q=B.first_chunk[F+1]-1:Q=1/0):e<s?(p.chunk_index=t,p.chunk_run_index=F):(t++,p.chunk_index=t,n=0,t<=Q||(F++,F+1<B.first_chunk.length?Q=B.first_chunk[F+1]-1:Q=1/0),p.chunk_run_index=F,s+=B.samples_per_chunk[F]),p.description_index=B.sample_description_index[p.chunk_run_index]-1,p.description=c.entries[p.description_index],p.offset=l.chunk_offsets[p.chunk_index-1]+n,n+=p.size,e>k&&(b++,k<0&&(k=0),k+=d.sample_counts[b]),e>0?(U.samples[e-1].duration=d.sample_deltas[b],U.samples_duration+=U.samples[e-1].duration,p.dts=U.samples[e-1].dts+U.samples[e-1].duration):p.dts=0,h?(e>=u&&(W++,u<0&&(u=0),u+=h.sample_counts[W]),p.cts=U.samples[e].dts+h.sample_offsets[W]):p.cts=p.dts,J?(e===J.sample_numbers[y]-1?(p.is_sync=!0,y++):(p.is_sync=!1,p.degradation_priority=0),S&&S.entries[m].sample_delta+T===e+1&&(p.subsamples=S.entries[m].subsamples,T+=S.entries[m].sample_delta,m++)):p.is_sync=!0,A.process_sdtp(U.mdia.minf.stbl.sdtp,p,p.number),N?p.degradation_priority=N.priority[e]:p.degradation_priority=0,S&&S.entries[m].sample_delta+T===e&&(p.subsamples=S.entries[m].subsamples,T+=S.entries[m].sample_delta),(f.length>0||C.length>0)&&A.setSampleGroupProperties(U,p,e,U.sample_groups_info)}e>0&&(U.samples[e-1].duration=Math.max(U.mdia.mdhd.duration-U.samples[e-1].dts,0),U.samples_duration+=U.samples[e-1].duration)}}updateSampleLists(){let U,e,F,t,Q;if(this.moov!==void 0)for(;this.lastMoofIndex<this.moofs.length;){const n=this.moofs[this.lastMoofIndex];if(this.lastMoofIndex++,n.type==="moof"){const s=n;for(let l=0;l<s.trafs.length;l++){const B=s.trafs[l],a=this.getTrackById(B.tfhd.track_id),d=this.getTrexById(B.tfhd.track_id);B.tfhd.flags&Ti?U=B.tfhd.default_sample_description_index:U=d?d.default_sample_description_index:1,B.tfhd.flags&gi?e=B.tfhd.default_sample_duration:e=d?d.default_sample_duration:0,B.tfhd.flags&Di?F=B.tfhd.default_sample_size:F=d?d.default_sample_size:0,B.tfhd.flags&xi?t=B.tfhd.default_sample_flags:t=d?d.default_sample_flags:0,B.sample_number=0,B.sbgps.length>0&&A.initSampleGroups(a,B,B.sbgps,a.mdia.minf.stbl.sgpds,B.sgpds);for(let h=0;h<B.truns.length;h++){const J=B.truns[h];for(let c=0;c<J.sample_count;c++){const S=U-1;let N=t;J.flags&hU?N=J.sample_flags[c]:c===0&&J.flags&bi&&(N=J.first_sample_flags);let f=F;J.flags&oU&&(f=J.sample_size[c]),a.samples_size+=f;let C=e;J.flags&RU&&(C=J.sample_duration[c]),a.samples_duration+=C;let k;a.first_traf_merged||c>0?k=a.samples[a.samples.length-1].dts+a.samples[a.samples.length-1].duration:(B.tfdt?k=B.tfdt.baseMediaDecodeTime:k=0,a.first_traf_merged=!0);let b=k;J.flags&VU&&(b=k+J.sample_composition_time_offset[c]);const u=!!(B.tfhd.flags&Ci),W=!!(B.tfhd.flags&Cn),y=!!(J.flags&rU);let m=0;u?m=B.tfhd.base_data_offset:W||h===0?m=s.start:m=Q;let T;h===0&&c===0?y?T=m+J.data_offset:T=m:T=Q,Q=T+f;const p=B.sample_number;B.sample_number++;const Y={cts:b,description_index:S,description:a.mdia.minf.stbl.stsd.entries[S],dts:k,duration:C,moof_number:this.lastMoofIndex,number_in_traf:p,number:a.samples.length,offset:T,size:f,timescale:a.mdia.mdhd.timescale,track_id:a.tkhd.track_id,is_sync:!(N>>16&1),is_leading:N>>26&3,depends_on:N>>24&3,is_depended_on:N>>22&3,has_redundancy:N>>20&3,degradation_priority:N&65535};B.first_sample_index=a.samples.length,a.samples.push(Y),(B.sbgps.length>0||B.sgpds.length>0||a.mdia.minf.stbl.sbgps.length>0||a.mdia.minf.stbl.sgpds.length>0)&&A.setSampleGroupProperties(a,Y,Y.number_in_traf,B.sample_groups_info)}}if(B.subs){a.has_fragment_subsamples=!0;let h=B.first_sample_index;for(let J=0;J<B.subs.entries.length;J++){h+=B.subs.entries[J].sample_delta;const c=a.samples[h-1];c.subsamples=B.subs.entries[J].subsamples}}}}}}getSample(U,e){const F=U.samples[e];if(this.moov){if(!F.data)F.data=new Uint8Array(F.size),F.alreadyRead=0,this.samplesDataSize+=F.size,R.debug("ISOFile","Allocating sample #"+e+" on track #"+U.tkhd.track_id+" of size "+F.size+" (total: "+this.samplesDataSize+")");else if(F.alreadyRead===F.size)return F;for(;;){let t=this.stream,Q=t.findPosition(!0,F.offset+F.alreadyRead,!1),n,s;if(Q>-1)n=t.buffers[Q],s=n.fileStart;else for(const l of this.mdats){if(!l.stream){R.debug("ISOFile","mdat stream not yet fully read for #"+this.mdats.indexOf(l)+" mdat");continue}if(Q=l.stream.findPosition(!0,F.offset+F.alreadyRead-l.start-l.hdr_size,!1),Q>-1){t=l.stream,n=l.stream.buffers[Q],s=l.start+l.hdr_size+n.fileStart;break}}if(n){const l=n.byteLength-(F.offset+F.alreadyRead-s);if(F.size-F.alreadyRead<=l)return R.debug("ISOFile","Getting sample #"+e+" data (alreadyRead: "+F.alreadyRead+" offset: "+(F.offset+F.alreadyRead-s)+" read size: "+(F.size-F.alreadyRead)+" full size: "+F.size+")"),v.memcpy(F.data.buffer,F.alreadyRead,n,F.offset+F.alreadyRead-s,F.size-F.alreadyRead),n.usedBytes+=F.size-F.alreadyRead,t.logBufferLevel(),F.alreadyRead=F.size,F;if(l===0)return;R.debug("ISOFile","Getting sample #"+e+" partial data (alreadyRead: "+F.alreadyRead+" offset: "+(F.offset+F.alreadyRead-s)+" read size: "+l+" full size: "+F.size+")"),v.memcpy(F.data.buffer,F.alreadyRead,n,F.offset+F.alreadyRead-s,l),F.alreadyRead+=l,n.usedBytes+=l,t.logBufferLevel()}else return}}}releaseSample(U,e){const F=U.samples[e];return F.data?(this.samplesDataSize-=F.size,F.data=void 0,F.alreadyRead=0,F.size):0}getAllocatedSampleDataSize(){return this.samplesDataSize}getCodecs(){let U="";for(let e=0;e<this.moov.traks.length;e++){const F=this.moov.traks[e];e>0&&(U+=","),U+=F.mdia.minf.stbl.stsd.entries[0].getCodec()}return U}getTrexById(U){if(!(!this.moov||!this.moov.mvex))for(let e=0;e<this.moov.mvex.trexs.length;e++){const F=this.moov.mvex.trexs[e];if(F.track_id===U)return F}}getTrackById(U){if(this.moov)for(let e=0;e<this.moov.traks.length;e++){const F=this.moov.traks[e];if(F.tkhd.track_id===U)return F}}flattenItemInfo(){const U=this.items,e=this.entity_groups,F=this.meta;if(!(!F||!F.hdlr||!F.iinf)){for(let t=0;t<F.iinf.item_infos.length;t++){const Q=F.iinf.item_infos[t].item_ID;U[Q]={id:Q,name:F.iinf.item_infos[t].item_name,ref_to:[],content_type:F.iinf.item_infos[t].content_type,content_encoding:F.iinf.item_infos[t].content_encoding,item_uri_type:F.iinf.item_infos[t].item_uri_type,type:F.iinf.item_infos[t].item_type?F.iinf.item_infos[t].item_type:"mime",protection:F.iinf.item_infos[t].item_protection_index>0?F.ipro.protections[F.iinf.item_infos[t].item_protection_index-1]:void 0}}if(F.grpl)for(let t=0;t<F.grpl.boxes.length;t++){const Q=F.grpl.boxes[t];e[Q.group_id]={id:Q.group_id,entity_ids:Q.entity_ids,type:Q.type}}if(F.iloc)for(let t=0;t<F.iloc.items.length;t++){const Q=F.iloc.items[t],n=U[Q.item_ID];Q.data_reference_index!==0&&(R.warn("Item storage with reference to other files: not supported"),n.source=F.dinf.boxes[Q.data_reference_index-1]),n.extents=[],n.size=0;for(let s=0;s<Q.extents.length;s++)n.extents[s]={offset:Q.extents[s].extent_offset+Q.base_offset,length:Q.extents[s].extent_length,alreadyRead:0},Q.construction_method===1&&(n.extents[s].offset+=F.idat.start+F.idat.hdr_size),n.size+=n.extents[s].length}if(F.pitm&&(U[F.pitm.item_id].primary=!0),F.iref)for(let t=0;t<F.iref.references.length;t++){const Q=F.iref.references[t];for(let n=0;n<Q.references.length;n++)U[Q.from_item_ID].ref_to.push({type:Q.type,id:Q.references[n]})}if(F.iprp)for(let t=0;t<F.iprp.ipmas.length;t++){const Q=F.iprp.ipmas[t];for(let n=0;n<Q.associations.length;n++){const s=Q.associations[n],l=U[s.id]??e[s.id];if(l){l.properties===void 0&&(l.properties={boxes:[]});for(let B=0;B<s.props.length;B++){const a=s.props[B];if(a.property_index>0&&a.property_index-1<F.iprp.ipco.boxes.length){const d=F.iprp.ipco.boxes[a.property_index-1];l.properties[d.type]=d,l.properties.boxes.push(d)}}}}}}}getItem(U){if(!this.meta)return;const e=this.items[U];if(!e.data&&e.size)e.data=new Uint8Array(e.size),e.alreadyRead=0,this.itemsDataSize+=e.size,R.debug("ISOFile","Allocating item #"+U+" of size "+e.size+" (total: "+this.itemsDataSize+")");else if(e.alreadyRead===e.size)return e;for(let F=0;F<e.extents.length;F++){const t=e.extents[F];if(t.alreadyRead!==t.length){const Q=this.stream.findPosition(!0,t.offset+t.alreadyRead,!1);if(Q>-1){const n=this.stream.buffers[Q],s=n.byteLength-(t.offset+t.alreadyRead-n.fileStart);if(t.length-t.alreadyRead<=s)R.debug("ISOFile","Getting item #"+U+" extent #"+F+" data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+(t.length-t.alreadyRead)+" full extent size: "+t.length+" full item size: "+e.size+")"),v.memcpy(e.data.buffer,e.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,t.length-t.alreadyRead),(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=t.length-t.alreadyRead),this.stream.logBufferLevel(),e.alreadyRead+=t.length-t.alreadyRead,t.alreadyRead=t.length;else{R.debug("ISOFile","Getting item #"+U+" extent #"+F+" partial data (alreadyRead: "+t.alreadyRead+" offset: "+(t.offset+t.alreadyRead-n.fileStart)+" read size: "+s+" full extent size: "+t.length+" full item size: "+e.size+")"),v.memcpy(e.data.buffer,e.alreadyRead,n,t.offset+t.alreadyRead-n.fileStart,s),t.alreadyRead+=s,e.alreadyRead+=s,(!this.parsingMdat||this.discardMdatData)&&(n.usedBytes+=s),this.stream.logBufferLevel();return}}else return}}if(e.alreadyRead===e.size)return e}releaseItem(U){const e=this.items[U];if(e.data){this.itemsDataSize-=e.size,e.data=void 0,e.alreadyRead=0;for(let F=0;F<e.extents.length;F++){const t=e.extents[F];t.alreadyRead=0}return e.size}else return 0}processItems(U){for(const e in this.items){const F=this.items[e];this.getItem(F.id),U&&!F.sent&&(U(F),F.sent=!0,F.data=void 0)}}hasItem(U){for(const e in this.items){const F=this.items[e];if(F.name===U)return F.id}return-1}getMetaHandler(){if(this.meta)return this.meta.hdlr.handler}getPrimaryItem(){if(this.meta&&this.meta.pitm)return this.getItem(this.meta.pitm.item_id)}itemToFragmentedTrackFile({itemId:U}={}){let e;if(U?e=this.getItem(U):e=this.getPrimaryItem(),!e)return;const F=new A;F.discardMdatData=!1;const t={type:e.type,description_boxes:e.properties.boxes};e.properties.ispe&&(t.width=e.properties.ispe.image_width,t.height=e.properties.ispe.image_height);const Q=F.addTrack(t);if(Q)return F.addSample(Q,e.data),F}processIncompleteBox(U){if(U.type==="mdat"){const e=new Ii(U.size);return this.parsingMdat=e,this.boxes.push(e),this.mdats.push(e),e.start=U.start,e.hdr_size=U.hdr_size,e.original_size=U.original_size,this.stream.addUsedBytes(e.hdr_size),this.lastBoxStartPosition=e.start+e.size,this.stream.seek(e.start+e.size,!1,this.discardMdatData)?(this.transferMdatData(),this.parsingMdat=void 0,!0):(this.moovStartFound?this.nextParsePosition=this.stream.findEndContiguousBuf():this.nextParsePosition=e.start+e.size,!1)}else return U.type==="moov"&&(this.moovStartFound=!0,this.mdats.length===0&&(this.isProgressive=!0)),(this.stream.mergeNextBuffer?this.stream.mergeNextBuffer():!1)?(this.nextParsePosition=this.stream.getEndPosition(),!0):(U.type?this.moovStartFound?this.nextParsePosition=this.stream.getEndPosition():this.nextParsePosition=this.stream.getPosition()+U.size:this.nextParsePosition=this.stream.getEndPosition(),!1)}hasIncompleteMdat(){return this.parsingMdat!==void 0}transferMdatData(U){const e=U??this.parsingMdat;if(this.discardMdatData){R.debug("ISOFile","Discarding 'mdat' data, not transferring it to the mdat box stream");return}if(!e){R.warn("ISOFile","Cannot transfer 'mdat' data, no mdat box is being parsed");return}const F=this.stream.findPosition(!0,e.start+e.hdr_size,!1),t=this.stream.findPosition(!0,e.start+e.size,!1);if(F===-1||t===-1){R.warn("ISOFile","Cannot transfer 'mdat' data, start or end buffer not found");return}e.stream=new yi;for(let Q=F;Q<=t;Q++){const n=this.stream.buffers[Q],s=Q===F?e.start+e.hdr_size-n.fileStart:0,l=Q===t?e.start+e.size-n.fileStart:n.byteLength;if(l>s){R.debug("ISOFile","Transferring 'mdat' data from buffer #"+Q+" ("+s+" to "+l+")");const B=l-s,a=new j(B),d=e.stream.getAbsoluteEndPosition();v.memcpy(a,0,n,s,B),a.fileStart=d,e.stream.insertBuffer(a),n.usedBytes+=B}}}processIncompleteMdat(){const U=this.parsingMdat;return this.stream.seek(U.start+U.size,!1,this.discardMdatData)?(R.debug("ISOFile","Found 'mdat' end in buffered data"),this.transferMdatData(),this.parsingMdat=void 0,!0):(this.nextParsePosition=this.stream.findEndContiguousBuf(),!1)}restoreParsePosition(){return this.stream.seek(this.lastBoxStartPosition,!0,this.discardMdatData)}saveParsePosition(){this.lastBoxStartPosition=this.stream.getPosition()}updateUsedBytes(U,e){this.stream.addUsedBytes&&(U.type==="mdat"?(this.stream.addUsedBytes(U.hdr_size),this.discardMdatData&&this.stream.addUsedBytes(U.size-U.hdr_size)):this.stream.addUsedBytes(U.size))}addBox(U){return V.prototype.addBox.call(this,U)}init(U={}){const e=this.addBox(new ts);e.major_brand=U.brands&&U.brands[0]||"iso4",e.minor_version=0,e.compatible_brands=U.brands||["iso4"];const F=this.addBox(new sn);F.addBox(new ln);const t=F.addBox(new Bs);return t.timescale=U.timescale||600,t.rate=U.rate||65536,t.creation_time=0,t.modification_time=0,t.duration=U.duration||0,t.volume=U.width?0:256,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.next_track_id=1,this}addTrack(U={}){this.moov||this.init(U);const e=U||{};e.width=e.width||320,e.height=e.height||320,e.id=e.id||this.moov.mvhd.next_track_id,e.type=e.type||"avc1";const F=this.moov.addBox(new An);this.moov.mvhd.next_track_id=e.id+1;const t=F.addBox(new Es);t.flags=Ks|Ps|qs,t.creation_time=0,t.modification_time=0,t.track_id=e.id,t.duration=e.duration||0,t.layer=e.layer||0,t.alternate_group=0,t.volume=1,t.matrix=[65536,0,0,0,65536,0,0,0,1073741824],t.width=e.width<<16,t.height=e.height<<16;const Q=F.addBox(new jn),n=Q.addBox(new ns);n.creation_time=0,n.modification_time=0,n.timescale=e.timescale||1,n.duration=e.media_duration||0,n.language=e.language||"und";const s=Q.addBox(new Qs);s.handler=e.hdlr||"vide",s.name=e.name||"Track created with MP4Box.js";const l=Q.addBox(new Fs);l.extended_language=e.language||"fr-FR";const B=Q.addBox(new Kn),a=I.sampleEntry[e.type];if(!a)return;const d=new a;if(d.data_reference_index=1,d instanceof g){const W=d,y=B.addBox(new ks);y.graphicsmode=0,y.opcolor=[0,0,0],W.width=e.width,W.height=e.height,W.horizresolution=72<<16,W.vertresolution=72<<16,W.frame_count=1,W.compressorname=e.type+" Compressor",W.depth=24,e.avcDecoderConfigRecord?W.addBox(new Ln(e.avcDecoderConfigRecord.byteLength)).parse(new v(e.avcDecoderConfigRecord)):e.hevcDecoderConfigRecord&&W.addBox(new is(e.hevcDecoderConfigRecord.byteLength)).parse(new v(e.hevcDecoderConfigRecord))}else if(d instanceof w){const W=d,y=B.addBox(new Rs);y.balance=e.balance||0,W.channel_count=e.channel_count||2,W.samplesize=e.samplesize||16,W.samplerate=e.samplerate||65536}else d instanceof bn?B.addBox(new On):d instanceof $?(B.addBox(new hs),d instanceof rs&&(d.namespace=e.namespace||"nonamespace",d.schema_location=e.schema_location||"",d.auxiliary_mime_types=e.auxiliary_mime_types||"")):d instanceof QU?B.addBox(new wi):d instanceof Vn?B.addBox(new wi):B.addBox(new wi);e.description&&d.addBox.call(d,e.description),e.description_boxes&&e.description_boxes.forEach(function(W){d.addBox.call(d,W)});const J=B.addBox(new Pn).addBox(new es),c=new Zs;c.flags=1,J.addEntry(c);const S=B.addBox(new qn);S.addBox(new Js).addEntry(d);const f=S.addBox(new cs);f.sample_counts=[],f.sample_deltas=[];const C=S.addBox(new Vs);C.first_chunk=[],C.samples_per_chunk=[],C.sample_description_index=[];const k=S.addBox(new os);k.chunk_offsets=[];const b=S.addBox(new Ss);b.sample_sizes=[];const u=this.moov.mvex.addBox(new Bn);return u.track_id=e.id,u.default_sample_description_index=e.default_sample_description_index||1,u.default_sample_duration=e.default_sample_duration||0,u.default_sample_size=e.default_sample_size||0,u.default_sample_flags=e.default_sample_flags||0,this.buildTrakSampleLists(F),e.id}addSample(U,e,{sample_description_index:F,duration:t=1,cts:Q=0,dts:n=0,is_sync:s=!1,is_leading:l=0,depends_on:B=0,is_depended_on:a=0,has_redundancy:d=0,degradation_priority:h=0,subsamples:J,offset:c=0}={}){const S=this.getTrackById(U);if(S===void 0)return;const N=F?F-1:0,f={number:S.samples.length,track_id:S.tkhd.track_id,timescale:S.mdia.mdhd.timescale,description_index:N,description:S.mdia.minf.stbl.stsd.entries[N],data:e,size:e.byteLength,alreadyRead:e.byteLength,duration:t,cts:Q,dts:n,is_sync:s,is_leading:l,depends_on:B,is_depended_on:a,has_redundancy:d,degradation_priority:h,offset:c,subsamples:J};S.samples.push(f),S.samples_size+=f.size,S.samples_duration+=f.duration,S.first_dts===void 0&&(S.first_dts=n),this.processSamples();const C=this.addBox(this.createMoof([f]));C.computeSize(),C.trafs[0].truns[0].data_offset=C.size+8;const k=this.addBox(new Ii);return k.data=new Uint8Array(e),f}createMoof(U){if(U.length===0)return;if(U.some(a=>a.track_id!==U[0].track_id))throw new Error("Cannot create moof for samples from different tracks: "+U.map(a=>a.track_id).join(", "));const e=U[0].track_id,F=this.getTrackById(e);if(!F)throw new Error("Cannot create moof for non-existing track: "+e);const t=new $n,Q=t.addBox(new ls);Q.sequence_number=++this.nextMoofNumber;const n=t.addBox(new Us),s=n.addBox(new ps);s.track_id=e,s.flags=Cn;const l=n.addBox(new Ws);l.baseMediaDecodeTime=U[0].dts-(F.first_dts||0);const B=n.addBox(new Ns);B.flags=rU|RU|oU|hU|VU,B.data_offset=0,B.first_sample_flags=0,B.sample_count=U.length;for(const a of U){let d=0;a.is_sync?d=1<<25:d=65536,B.sample_duration.push(a.duration),B.sample_size.push(a.size),B.sample_flags.push(d),B.sample_composition_time_offset.push(a.cts-a.dts)}return t}print(U){U.indent="";for(let e=0;e<this.boxes.length;e++)this.boxes[e]&&this.boxes[e].print(U)}};function Ua(i=!1,U){return new $B(U,!i)}var us={};Hn(us,{Descriptor:()=>UU,ES_Descriptor:()=>Ts,MPEG4DescriptorParser:()=>ia});var fs=3,Yi=4,Jn=5,ms=6,UU=class Cs{constructor(U,e){this.tag=U,this.size=e,this.descs=[]}parse(U){this.data=U.readUint8Array(this.size)}findDescriptor(U){for(let e=0;e<this.descs.length;e++)if(this.descs[e].tag===U)return this.descs[e]}parseOneDescriptor(U){let e=0;const F=U.readUint8();let t=U.readUint8();for(;t&128;)e=(e<<7)+(t&127),t=U.readUint8();e=(e<<7)+(t&127),R.debug("Descriptor","Found "+(vi[F]||"Descriptor "+F)+", size "+e+" at position "+U.getPosition());const Q=vi[F]?new Qa[vi[F]](e):new Cs(e);return Q.parse(U),Q}parseRemainingDescriptors(U){var F;const e=U.getPosition();for(;U.getPosition()<e+this.size;){const t=(F=this.parseOneDescriptor)==null?void 0:F.call(this,U);this.descs.push(t)}}},Ts=class extends UU{constructor(i){super(fs,i)}parse(i){if(this.ES_ID=i.readUint16(),this.flags=i.readUint8(),this.size-=3,this.flags&128?(this.dependsOn_ES_ID=i.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,this.flags&64){const U=i.readUint8();this.URL=i.readString(U),this.size-=U+1}else this.URL="";this.flags&32?(this.OCR_ES_ID=i.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(i)}getOTI(){const i=this.findDescriptor(Yi);return i?i.oti:0}getAudioConfig(){const i=this.findDescriptor(Yi);if(!i)return;const U=i.findDescriptor(Jn);if(U&&U.data){let e=(U.data[0]&248)>>3;return e===31&&U.data.length>=2&&(e=32+((U.data[0]&7)<<3)+((U.data[1]&224)>>5)),e}}},ea=class extends UU{constructor(i){super(Yi,i)}parse(i){this.oti=i.readUint8(),this.streamType=i.readUint8(),this.upStream=(this.streamType>>1&1)!==0,this.streamType=this.streamType>>>2,this.bufferSize=i.readUint24(),this.maxBitrate=i.readUint32(),this.avgBitrate=i.readUint32(),this.size-=13,this.parseRemainingDescriptors(i)}},Fa=class extends UU{constructor(i){super(Jn,i)}},ta=class extends UU{constructor(i){super(ms,i)}},Qa={Descriptor:UU,ES_Descriptor:Ts,DecoderConfigDescriptor:ea,DecoderSpecificInfo:Fa,SLConfigDescriptor:ta},vi={[fs]:"ES_Descriptor",[Yi]:"DecoderConfigDescriptor",[Jn]:"DecoderSpecificInfo",[ms]:"SLConfigDescriptor"},ia=class{constructor(){this.parseOneDescriptor=UU.prototype.parseOneDescriptor}getDescriptorName(i){return vi[i]}},gs={};Hn(gs,{CoLLBox:()=>Sa,ItemContentIDPropertyBox:()=>Or,OpusSampleEntry:()=>gB,SmDmBox:()=>Gd,a1lxBox:()=>na,a1opBox:()=>sa,ac_3SampleEntry:()=>mB,ac_4SampleEntry:()=>CB,aebrBox:()=>ya,afbrBox:()=>Ia,albcBox:()=>wa,alstSampleGroupEntry:()=>Er,altrBox:()=>va,auxCBox:()=>la,av01SampleEntry:()=>tB,av1CBox:()=>Al,avc1SampleEntry:()=>$l,avc2SampleEntry:()=>UB,avc3SampleEntry:()=>eB,avc4SampleEntry:()=>FB,avcCBox:()=>Ln,avllSampleGroupEntry:()=>Nr,avs3SampleEntry:()=>WB,avssSampleGroupEntry:()=>Zr,brstBox:()=>_a,btrtBox:()=>Ba,bxmlBox:()=>Sl,ccstBox:()=>aa,cdefBox:()=>da,clapBox:()=>ra,clefBox:()=>md,clliBox:()=>Ra,cmexBox:()=>oa,cminBox:()=>ha,cmpdBox:()=>Va,co64Box:()=>Ja,colrBox:()=>ql,coviBox:()=>pa,cprtBox:()=>Ea,cschBox:()=>Na,cslgBox:()=>Za,cttsBox:()=>ka,dOpsBox:()=>Da,dac3Box:()=>ua,dataBox:()=>dU,dav1SampleEntry:()=>QB,dec3Box:()=>fa,dfLaBox:()=>ma,dimmBox:()=>Ca,dinfBox:()=>Pn,dmax:()=>Ta,dmedBox:()=>ga,dobrBox:()=>za,drefBox:()=>es,drepBox:()=>xa,dtrtSampleGroupEntry:()=>kr,dvh1SampleEntry:()=>rB,dvheSampleEntry:()=>RB,ec_3SampleEntry:()=>TB,edtsBox:()=>Wl,elngBox:()=>Fs,elstBox:()=>ba,emsgBox:()=>Ma,encaSampleEntry:()=>wB,encmSampleEntry:()=>YB,encsSampleEntry:()=>_B,enctSampleEntry:()=>HB,encuSampleEntry:()=>vB,encvSampleEntry:()=>IB,enofBox:()=>Td,eqivBox:()=>Ha,esdsBox:()=>jl,etypBox:()=>Il,fLaCSampleEntry:()=>yB,favcBox:()=>Ya,fielBox:()=>$a,fobrBox:()=>Ga,freeBox:()=>ol,frmaBox:()=>Ud,ftypBox:()=>ts,grplBox:()=>Ml,hdlrBox:()=>Qs,hev1SampleEntry:()=>sB,hev2SampleEntry:()=>lB,hinfBox:()=>kl,hmhdBox:()=>On,hntiBox:()=>Zl,hvc1SampleEntry:()=>iB,hvc2SampleEntry:()=>nB,hvcCBox:()=>is,hvt1SampleEntry:()=>BB,iaugBox:()=>Xa,idatBox:()=>Rl,iinfBox:()=>_l,ilocBox:()=>zl,ilstBox:()=>gd,imirBox:()=>ed,infeBox:()=>vl,iodsBox:()=>Vl,ipcoBox:()=>bl,ipmaBox:()=>Fd,iproBox:()=>cl,iprpBox:()=>xl,irefBox:()=>Yl,irotBox:()=>td,ispeBox:()=>Qd,itaiBox:()=>id,j2kHBox:()=>yl,j2kiSampleEntry:()=>pB,keysBox:()=>Dd,kindBox:()=>nd,levaBox:()=>sd,lhe1SampleEntry:()=>aB,lhv1SampleEntry:()=>dB,lhvCBox:()=>ld,lselBox:()=>Bd,m4aeSampleEntry:()=>fB,maxrBox:()=>ad,mdatBox:()=>Ii,mdcvBox:()=>dd,mdhdBox:()=>ns,mdiaBox:()=>jn,mecoBox:()=>Nl,mehdBox:()=>ss,metaBox:()=>Xl,mettSampleEntry:()=>Ll,metxSampleEntry:()=>Ol,mfhdBox:()=>ls,mfraBox:()=>El,mfroBox:()=>rd,mha1SampleEntry:()=>DB,mha2SampleEntry:()=>xB,mhm1SampleEntry:()=>bB,mhm2SampleEntry:()=>MB,minfBox:()=>Kn,mjp2SampleEntry:()=>EB,mjpgSampleEntry:()=>NB,moofBox:()=>$n,moovBox:()=>sn,mp4aSampleEntry:()=>uB,mp4sSampleEntry:()=>zB,mp4vSampleEntry:()=>kB,mskCBox:()=>Rd,msrcTrackGroupTypeBox:()=>ar,mvexBox:()=>ln,mvhdBox:()=>Bs,mvifSampleGroupEntry:()=>ur,nmhdBox:()=>wi,npckBox:()=>od,numpBox:()=>hd,padbBox:()=>Jd,panoBox:()=>La,paspBox:()=>Sd,paylBox:()=>cd,paytBox:()=>Wd,pdinBox:()=>pd,piffLsmBox:()=>zr,piffPsshBox:()=>Hr,piffSencBox:()=>Yr,piffTencBox:()=>Gr,piffTfrfBox:()=>Xr,piffTfxdBox:()=>Lr,pitmBox:()=>Gl,pixiBox:()=>Ed,pmaxBox:()=>Nd,povdBox:()=>wl,prdiBox:()=>Zd,prfrBox:()=>kd,prftBox:()=>ud,prgrBox:()=>Pa,profBox:()=>xd,prolSampleGroupEntry:()=>fr,psshBox:()=>fd,pymdBox:()=>qa,rapSampleGroupEntry:()=>mr,rashSampleGroupEntry:()=>Cr,resvSampleEntry:()=>GB,rinfBox:()=>Cl,rollSampleGroupEntry:()=>Tr,rtp_Box:()=>yd,saioBox:()=>Id,saizBox:()=>wd,sbgpBox:()=>jB,sbpmBox:()=>_d,sbttSampleEntry:()=>XB,schiBox:()=>Tl,schmBox:()=>zd,scifSampleGroupEntry:()=>gr,scnmSampleGroupEntry:()=>Dr,sdp_Box:()=>Hd,sdtpBox:()=>KB,seigSampleGroupEntry:()=>xr,sencBox:()=>Yd,sgpdBox:()=>PB,sidxBox:()=>qB,sinfBox:()=>ml,skipBox:()=>hl,slidBox:()=>Oa,smhdBox:()=>Rs,sratBox:()=>Xd,ssixBox:()=>Ld,stblBox:()=>qn,stcoBox:()=>os,stdpBox:()=>Od,sterBox:()=>Aa,sthdBox:()=>hs,stppSampleEntry:()=>rs,strdBox:()=>fl,striBox:()=>Ad,strkBox:()=>ul,stsaSampleGroupEntry:()=>br,stscBox:()=>Vs,stsdBox:()=>Js,stsgBox:()=>jd,stshBox:()=>Kd,stssBox:()=>Pd,stszBox:()=>Ss,sttsBox:()=>cs,stviBox:()=>qd,stxtSampleEntry:()=>LB,stypBox:()=>$d,stz2Box:()=>Ur,subsBox:()=>er,syncSampleGroupEntry:()=>Mr,taicBox:()=>Fr,taptBox:()=>bd,teleSampleGroupEntry:()=>yr,tencBox:()=>tr,tfdtBox:()=>Ws,tfhdBox:()=>ps,tfraBox:()=>Qr,tkhdBox:()=>Es,tmaxBox:()=>ir,tminBox:()=>nr,totlBox:()=>sr,tpayBox:()=>lr,tpylBox:()=>Br,trafBox:()=>Us,trakBox:()=>An,trefBox:()=>dr,trepBox:()=>rr,trexBox:()=>Bn,trgrBox:()=>gl,trpyBox:()=>Rr,trunBox:()=>Ns,tsasSampleGroupEntry:()=>Ir,tsclSampleGroupEntry:()=>wr,tselBox:()=>or,tsynBox:()=>ja,tx3gSampleEntry:()=>OB,txtcBox:()=>hr,tycoBox:()=>Vr,udesBox:()=>Jr,udtaBox:()=>Dl,uncCBox:()=>Sr,uncvSampleEntry:()=>ZB,urlBox:()=>Zs,urnBox:()=>cr,viprSampleGroupEntry:()=>vr,vmhdBox:()=>ks,vp08SampleEntry:()=>SB,vp09SampleEntry:()=>cB,vpcCBox:()=>Kl,vttCBox:()=>Wr,vttcBox:()=>pl,vvc1SampleEntry:()=>oB,vvcCBox:()=>Pl,vvcNSampleEntry:()=>JB,vvi1SampleEntry:()=>hB,vvnCBox:()=>pr,vvs1SampleEntry:()=>VB,waveBox:()=>Md,wbbrBox:()=>Ka,wvttSampleEntry:()=>AB,xmlBox:()=>Jl});var YF,na=(YF=class extends V{constructor(){super(...arguments),this.box_name="AV1LayeredImageIndexingProperty"}parse(U){const F=((U.readUint8()&1&1)+1)*16;this.layer_size=[];for(let t=0;t<3;t++)F===16?this.layer_size[t]=U.readUint16():this.layer_size[t]=U.readUint32()}},YF.fourcc="a1lx",YF),GF,sa=(GF=class extends V{constructor(){super(...arguments),this.box_name="OperatingPointSelectorProperty"}parse(U){this.op_index=U.readUint8()}},GF.fourcc="a1op",GF),XF,la=(XF=class extends o{constructor(){super(...arguments),this.box_name="AuxiliaryTypeProperty"}parse(U){this.parseFullHeader(U),this.aux_type=U.readCString();const e=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=U.readUint8Array(e)}},XF.fourcc="auxC",XF),LF,Ba=(LF=class extends V{constructor(){super(...arguments),this.box_name="BitRateBox"}parse(U){this.bufferSizeDB=U.readUint32(),this.maxBitrate=U.readUint32(),this.avgBitrate=U.readUint32()}},LF.fourcc="btrt",LF),OF,aa=(OF=class extends o{constructor(){super(...arguments),this.box_name="CodingConstraintsBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.all_ref_pics_intra=(e&128)===128,this.intra_pred_used=(e&64)===64,this.max_ref_per_pic=(e&63)>>2,U.readUint24()}},OF.fourcc="ccst",OF),AF,da=(AF=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.channel_count=U.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[];for(let e=0;e<this.channel_count;e++)this.channel_indexes.push(U.readUint16()),this.channel_types.push(U.readUint16()),this.channel_associations.push(U.readUint16())}},AF.fourcc="cdef",AF),jF,ra=(jF=class extends V{constructor(){super(...arguments),this.box_name="CleanApertureBox"}parse(U){this.cleanApertureWidthN=U.readUint32(),this.cleanApertureWidthD=U.readUint32(),this.cleanApertureHeightN=U.readUint32(),this.cleanApertureHeightD=U.readUint32(),this.horizOffN=U.readUint32(),this.horizOffD=U.readUint32(),this.vertOffN=U.readUint32(),this.vertOffD=U.readUint32()}},jF.fourcc="clap",jF),KF,Ra=(KF=class extends V{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.max_content_light_level=U.readUint16(),this.max_pic_average_light_level=U.readUint16()}},KF.fourcc="clli",KF),PF,oa=(PF=class extends V{constructor(){super(...arguments),this.box_name="CameraExtrinsicMatrixProperty"}parse(U){this.flags&1&&(this.pos_x=U.readInt32()),this.flags&2&&(this.pos_y=U.readInt32()),this.flags&4&&(this.pos_z=U.readInt32()),this.flags&8&&(this.version===0?this.flags&16?(this.quat_x=U.readInt32(),this.quat_y=U.readInt32(),this.quat_z=U.readInt32()):(this.quat_x=U.readInt16(),this.quat_y=U.readInt16(),this.quat_z=U.readInt16()):this.version),this.flags&32&&(this.id=U.readUint32())}},PF.fourcc="cmex",PF),qF,ha=(qF=class extends V{constructor(){super(...arguments),this.box_name="CameraIntrinsicMatrixProperty"}parse(U){this.focal_length_x=U.readInt32(),this.principal_point_x=U.readInt32(),this.principal_point_y=U.readInt32(),this.flags&1&&(this.focal_length_y=U.readInt32(),this.skew_factor=U.readInt32())}},qF.fourcc="cmin",qF),$F,Va=($F=class extends V{constructor(){super(...arguments),this.box_name="ComponentDefinitionBox"}parse(U){this.component_count=U.readUint32(),this.component_types=[],this.component_type_urls=[];for(let e=0;e<this.component_count;e++){const F=U.readUint16();this.component_types.push(F),F>=32768&&this.component_type_urls.push(U.readCString())}}},$F.fourcc="cmpd",$F),Ut,Ja=(Ut=class extends o{constructor(){super(...arguments),this.box_name="ChunkLargeOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.chunk_offsets=[],this.version===0)for(let F=0;F<e;F++)this.chunk_offsets.push(U.readUint64())}write(U){this.version=0,this.flags=0,this.size=4+8*this.chunk_offsets.length,this.writeHeader(U),U.writeUint32(this.chunk_offsets.length);for(let e=0;e<this.chunk_offsets.length;e++)U.writeUint64(this.chunk_offsets[e])}},Ut.fourcc="co64",Ut),et,Sa=(et=class extends o{constructor(){super(...arguments),this.box_name="ContentLightLevelBox"}parse(U){this.parseFullHeader(U),this.maxCLL=U.readUint16(),this.maxFALL=U.readUint16()}},et.fourcc="CoLL",et),ca=class{toString(){let i="centre_azimuth: ";return i+=this.centre_azimuth,i+=" (",i+=this.centre_azimuth*2**-16,i+="°), centre_elevation: ",i+=this.centre_elevation,i+=" (",i+=this.centre_elevation*2**-16,i+="°), centre_tilt: ",i+=this.centre_tilt,i+=" (",i+=this.centre_tilt*2**-16,i+="°)",this.range_included_flag&&(i+=", azimuth_range: ",i+=this.azimuth_range,i+=" (",i+=this.azimuth_range*2**-16,i+="°), elevation_range: ",i+=this.elevation_range,i+=" (",i+=this.elevation_range*2**-16,i+="°)"),this.interpolate_included_flag&&(i+=", interpolate: ",i+=this.interpolate),i}},Wa=class{toString(){let i="";return this.view_idc&&(i+="view_idc: ",i+=this.view_idc,i+=", "),i+="sphere_region: {",i+=this.sphere_region,i+="}",i}},Ft,pa=(Ft=class extends o{constructor(){super(...arguments),this.box_name="CoverageInformationBox"}parse(U){this.parseFullHeader(U),this.coverage_shape_type=U.readUint8();const e=U.readUint8(),F=U.readInt8(),t=F&128;t&&(this.default_view_idc=(F&96)>>5),this.coverage_regions=new Array;for(let Q=0;Q<e;Q++){const n=new Wa;t&&(n.view_idc=U.readUint8()>>6),n.sphere_region=this.parseSphereRegion(U,!0,!0),this.coverage_regions.push(n)}}parseSphereRegion(U,e,F){const t=new ca;return t.centre_azimuth=U.readInt32(),t.centre_elevation=U.readInt32(),t.centre_tilt=U.readInt32(),t.range_included_flag=e,e&&(t.azimuth_range=U.readUint32(),t.elevation_range=U.readUint32()),t.interpolate_included_flag=F,F&&(t.interpolate=(U.readUint8()&128)===128),t}},Ft.fourcc="covi",Ft),tt,Ea=(tt=class extends o{constructor(){super(...arguments),this.box_name="CopyrightBox"}parse(U){this.parseFullHeader(U),this.parseLanguage(U),this.notice=U.readCString()}},tt.fourcc="cprt",tt),Qt,Na=(Qt=class extends o{constructor(){super(...arguments),this.box_name="CompatibleSchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readCString())}},Qt.fourcc="csch",Qt),BU=2147483647,it,Za=(it=class extends o{constructor(){super(...arguments),this.box_name="CompositionToDecodeBox"}parse(U){this.parseFullHeader(U),this.version===0?(this.compositionToDTSShift=U.readInt32(),this.leastDecodeToDisplayDelta=U.readInt32(),this.greatestDecodeToDisplayDelta=U.readInt32(),this.compositionStartTime=U.readInt32(),this.compositionEndTime=U.readInt32()):this.version===1&&(this.compositionToDTSShift=U.readInt64(),this.leastDecodeToDisplayDelta=U.readInt64(),this.greatestDecodeToDisplayDelta=U.readInt64(),this.compositionStartTime=U.readInt64(),this.compositionEndTime=U.readInt64())}write(U){this.version=0,(this.compositionToDTSShift>BU||this.leastDecodeToDisplayDelta>BU||this.greatestDecodeToDisplayDelta>BU||this.compositionStartTime>BU||this.compositionEndTime>BU)&&(this.version=1),this.flags=0,this.version===0?(this.size=4*5,this.writeHeader(U),U.writeInt32(this.compositionToDTSShift),U.writeInt32(this.leastDecodeToDisplayDelta),U.writeInt32(this.greatestDecodeToDisplayDelta),U.writeInt32(this.compositionStartTime),U.writeInt32(this.compositionEndTime)):this.version===1&&(this.size=8*5,this.writeHeader(U),U.writeInt64(this.compositionToDTSShift),U.writeInt64(this.leastDecodeToDisplayDelta),U.writeInt64(this.greatestDecodeToDisplayDelta),U.writeInt64(this.compositionStartTime),U.writeInt64(this.compositionEndTime))}},it.fourcc="cslg",it),nt,ka=(nt=class extends o{constructor(){super(...arguments),this.box_name="CompositionOffsetBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.sample_counts=[],this.sample_offsets=[],this.version===0)for(let F=0;F<e;F++){this.sample_counts.push(U.readUint32());const t=U.readInt32();t<0&&R.warn("BoxParser","ctts box uses negative values without using version 1"),this.sample_offsets.push(t)}else if(this.version===1)for(let F=0;F<e;F++)this.sample_counts.push(U.readUint32()),this.sample_offsets.push(U.readInt32())}write(U){this.version=this.sample_offsets.some(e=>e<0)?1:0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(U),U.writeUint32(this.sample_counts.length);for(let e=0;e<this.sample_counts.length;e++)U.writeUint32(this.sample_counts[e]),this.version===1?U.writeInt32(this.sample_offsets[e]):U.writeUint32(this.sample_offsets[e])}unpack(U){let e=0;for(let F=0;F<this.sample_counts.length;F++)for(let t=0;t<this.sample_counts[F];t++)U[e].pts=U[e].dts+this.sample_offsets[F],e++}},nt.fourcc="ctts",nt),st,ua=(st=class extends V{constructor(){super(...arguments),this.box_name="AC3SpecificBox"}parse(U){const e=U.readUint8(),F=U.readUint8(),t=U.readUint8();this.fscod=e>>6,this.bsid=e>>1&31,this.bsmod=(e&1)<<2|F>>6&3,this.acmod=F>>3&7,this.lfeon=F>>2&1,this.bit_rate_code=F&3|t>>5&7}},st.fourcc="dac3",st),lt,fa=(lt=class extends V{constructor(){super(...arguments),this.box_name="EC3SpecificBox"}parse(U){const e=U.readUint16();this.data_rate=e>>3,this.num_ind_sub=e&7,this.ind_subs=[];for(let F=0;F<this.num_ind_sub+1;F++){const t=U.readUint8(),Q=U.readUint8(),n=U.readUint8(),s={fscod:t>>6,bsid:t>>1&31,bsmod:(t&1)<<4|Q>>4&15,acmod:Q>>1&7,lfeon:Q&1,num_dep_sub:n>>1&15};this.ind_subs.push(s),s.num_dep_sub>0&&(s.chan_loc=(n&1)<<8|U.readUint8())}}},lt.fourcc="dec3",lt),Bt,ma=(Bt=class extends o{constructor(){super(...arguments),this.box_name="FLACSpecificBox"}parse(U){this.parseFullHeader(U);const e=127,F=128,t=[],Q=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];let n;do{n=U.readUint8();const s=Math.min(n&e,Q.length-1);s?U.readUint8Array(U.readUint24()):(U.readUint8Array(13),this.samplerate=U.readUint32()>>12,U.readUint8Array(20)),t.push(Q[s])}while(n&F);this.numMetadataBlocks=t.length+" ("+t.join(", ")+")"}},Bt.fourcc="dfLa",Bt),at,Ca=(at=class extends V{constructor(){super(...arguments),this.box_name="hintimmediateBytesSent"}parse(U){this.bytessent=U.readUint64()}},at.fourcc="dimm",at),dt,Ta=(dt=class extends V{constructor(){super(...arguments),this.box_name="hintlongestpacket"}parse(U){this.time=U.readUint32()}},dt.fourcc="dmax",dt),rt,ga=(rt=class extends V{constructor(){super(...arguments),this.box_name="hintmediaBytesSent"}parse(U){this.bytessent=U.readUint64()}},rt.fourcc="dmed",rt),Rt,Da=(Rt=class extends V{constructor(){super(...arguments),this.box_name="OpusSpecificBox"}parse(U){if(this.Version=U.readUint8(),this.OutputChannelCount=U.readUint8(),this.PreSkip=U.readUint16(),this.InputSampleRate=U.readUint32(),this.OutputGain=U.readInt16(),this.ChannelMappingFamily=U.readUint8(),this.ChannelMappingFamily!==0){this.StreamCount=U.readUint8(),this.CoupledCount=U.readUint8(),this.ChannelMapping=[];for(let e=0;e<this.OutputChannelCount;e++)this.ChannelMapping[e]=U.readUint8()}}write(U){if(this.size=11,this.ChannelMappingFamily!==0&&(this.size+=2+this.OutputChannelCount),this.writeHeader(U),U.writeUint8(this.Version),U.writeUint8(this.OutputChannelCount),U.writeUint16(this.PreSkip),U.writeUint32(this.InputSampleRate),U.writeInt16(this.OutputGain),U.writeUint8(this.ChannelMappingFamily),this.ChannelMappingFamily!==0){U.writeUint8(this.StreamCount),U.writeUint8(this.CoupledCount);for(let e=0;e<this.OutputChannelCount;e++)U.writeUint8(this.ChannelMapping[e])}}},Rt.fourcc="dOps",Rt),ot,xa=(ot=class extends V{constructor(){super(...arguments),this.box_name="hintrepeatedBytesSent"}parse(U){this.bytessent=U.readUint64()}},ot.fourcc="drep",ot),ht,ba=(ht=class extends o{constructor(){super(...arguments),this.box_name="EditListBox"}parse(U){this.parseFullHeader(U),this.entries=[];const e=U.readUint32();for(let F=0;F<e;F++){const t={segment_duration:this.version===1?U.readUint64():U.readUint32(),media_time:this.version===1?U.readInt64():U.readInt32(),media_rate_integer:U.readInt16(),media_rate_fraction:U.readInt16()};this.entries.push(t)}}write(U){const e=this.entries.some(F=>F.segment_duration>x||F.media_time>x)||this.version===1;this.version=e?1:0,this.size=4+12*this.entries.length,this.size+=e?2*4*this.entries.length:0,this.writeHeader(U),U.writeUint32(this.entries.length);for(let F=0;F<this.entries.length;F++){const t=this.entries[F];e?(U.writeUint64(t.segment_duration),U.writeInt64(t.media_time)):(U.writeUint32(t.segment_duration),U.writeInt32(t.media_time)),U.writeInt16(t.media_rate_integer),U.writeInt16(t.media_rate_fraction)}}},ht.fourcc="elst",ht),Vt,Ma=(Vt=class extends o{constructor(){super(...arguments),this.box_name="EventMessageBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.timescale=U.readUint32(),this.presentation_time=U.readUint64(),this.event_duration=U.readUint32(),this.id=U.readUint32(),this.scheme_id_uri=U.readCString(),this.value=U.readCString()):(this.scheme_id_uri=U.readCString(),this.value=U.readCString(),this.timescale=U.readUint32(),this.presentation_time_delta=U.readUint32(),this.event_duration=U.readUint32(),this.id=U.readUint32());let e=this.size-this.hdr_size-(4*4+(this.scheme_id_uri.length+1)+(this.value.length+1));this.version===1&&(e-=4),this.message_data=U.readUint8Array(e)}write(U){this.version=0,this.flags=0,this.size=4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1),this.writeHeader(U),U.writeCString(this.scheme_id_uri),U.writeCString(this.value),U.writeUint32(this.timescale),U.writeUint32(this.presentation_time_delta),U.writeUint32(this.event_duration),U.writeUint32(this.id),U.writeUint8Array(this.message_data)}},Vt.fourcc="emsg",Vt),M=class extends o{parse(i){this.parseFullHeader(i),this.group_id=i.readUint32(),this.num_entities_in_group=i.readUint32(),this.entity_ids=[];for(let U=0;U<this.num_entities_in_group;U++){const e=i.readUint32();this.entity_ids.push(e)}}},Jt,ya=(Jt=class extends M{constructor(){super(...arguments),this.box_name="Auto exposure bracketing"}},Jt.fourcc="aebr",Jt),St,Ia=(St=class extends M{constructor(){super(...arguments),this.box_name="Flash exposure information"}},St.fourcc="afbr",St),ct,wa=(ct=class extends M{constructor(){super(...arguments),this.box_name="Album collection"}},ct.fourcc="albc",ct),Wt,va=(Wt=class extends M{constructor(){super(...arguments),this.box_name="Alternative entity"}},Wt.fourcc="altr",Wt),pt,_a=(pt=class extends M{constructor(){super(...arguments),this.box_name="Burst image"}},pt.fourcc="brst",pt),Et,za=(Et=class extends M{constructor(){super(...arguments),this.box_name="Depth of field bracketing"}},Et.fourcc="dobr",Et),Nt,Ha=(Nt=class extends M{constructor(){super(...arguments),this.box_name="Equivalent entity"}},Nt.fourcc="eqiv",Nt),Zt,Ya=(Zt=class extends M{constructor(){super(...arguments),this.box_name="Favorites collection"}},Zt.fourcc="favc",Zt),kt,Ga=(kt=class extends M{constructor(){super(...arguments),this.box_name="Focus bracketing"}},kt.fourcc="fobr",kt),ut,Xa=(ut=class extends M{constructor(){super(...arguments),this.box_name="Image item with an audio track"}},ut.fourcc="iaug",ut),ft,La=(ft=class extends M{constructor(){super(...arguments),this.box_name="Panorama"}},ft.fourcc="pano",ft),mt,Oa=(mt=class extends M{constructor(){super(...arguments),this.box_name="Slideshow"}},mt.fourcc="slid",mt),Ct,Aa=(Ct=class extends M{constructor(){super(...arguments),this.box_name="Stereo"}},Ct.fourcc="ster",Ct),Tt,ja=(Tt=class extends M{constructor(){super(...arguments),this.box_name="Time-synchronized capture"}},Tt.fourcc="tsyn",Tt),gt,Ka=(gt=class extends M{constructor(){super(...arguments),this.box_name="White balance bracketing"}},gt.fourcc="wbbr",gt),Dt,Pa=(Dt=class extends M{constructor(){super(...arguments),this.box_name="Progressive rendering"}},Dt.fourcc="prgr",Dt),xt,qa=(xt=class extends M{constructor(){super(...arguments),this.box_name="Image pyramid"}parse(U){this.parseFullHeader(U),this.group_id=U.readUint32(),this.num_entities_in_group=U.readUint32(),this.entity_ids=[];for(let e=0;e<this.num_entities_in_group;e++){const F=U.readUint32();this.entity_ids.push(F)}this.tile_size_x=U.readUint16(),this.tile_size_y=U.readUint16(),this.layer_binning=[],this.tiles_in_layer_column_minus1=[],this.tiles_in_layer_row_minus1=[];for(let e=0;e<this.num_entities_in_group;e++)this.layer_binning[e]=U.readUint16(),this.tiles_in_layer_row_minus1[e]=U.readUint16(),this.tiles_in_layer_column_minus1[e]=U.readUint16()}},xt.fourcc="pymd",xt),bt,$a=(bt=class extends V{constructor(){super(...arguments),this.box_name="FieldHandlingBox"}parse(U){this.fieldCount=U.readUint8(),this.fieldOrdering=U.readUint8()}},bt.fourcc="fiel",bt),Mt,Ud=(Mt=class extends V{constructor(){super(...arguments),this.box_name="OriginalFormatBox"}parse(U){this.data_format=U.readString(4)}},Mt.fourcc="frma",Mt),yt,ed=(yt=class extends V{constructor(){super(...arguments),this.box_name="ImageMirror"}parse(U){const e=U.readUint8();this.reserved=e>>7,this.axis=e&1}},yt.fourcc="imir",yt),It,Fd=(It=class extends o{constructor(){super(...arguments),this.box_name="ItemPropertyAssociationBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.associations=[];for(let F=0;F<e;F++){const t=this.version<1?U.readUint16():U.readUint32(),Q=[],n=U.readUint8();for(let s=0;s<n;s++){const l=U.readUint8();Q.push({essential:(l&128)>>7===1,property_index:this.flags&1?(l&127)<<8|U.readUint8():l&127})}this.associations.push({id:t,props:Q})}}},It.fourcc="ipma",It),wt,td=(wt=class extends V{constructor(){super(...arguments),this.box_name="ImageRotation"}parse(U){this.angle=U.readUint8()&3}},wt.fourcc="irot",wt),vt,Qd=(vt=class extends o{constructor(){super(...arguments),this.box_name="ImageSpatialExtentsProperty"}parse(U){this.parseFullHeader(U),this.image_width=U.readUint32(),this.image_height=U.readUint32()}},vt.fourcc="ispe",vt),_t,id=(_t=class extends o{constructor(){super(...arguments),this.box_name="TAITimestampBox"}parse(U){this.TAI_timestamp=U.readUint64();const e=U.readUint8();this.sychronization_state=e>>7&1,this.timestamp_generation_failure=e>>6&1,this.timestamp_is_modified=e>>5&1}},_t.fourcc="itai",_t),zt,nd=(zt=class extends o{constructor(){super(...arguments),this.box_name="KindBox"}parse(U){this.parseFullHeader(U),this.schemeURI=U.readCString(),this.isEndOfBox(U)||(this.value=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.schemeURI.length+1+(this.value?this.value.length+1:0),this.writeHeader(U),U.writeCString(this.schemeURI),this.value&&U.writeCString(this.value)}},zt.fourcc="kind",zt),Ht,sd=(Ht=class extends o{constructor(){super(...arguments),this.box_name="LevelAssignmentBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.levels=[];for(let F=0;F<e;F++){const t={};this.levels[F]=t,t.track_ID=U.readUint32();const Q=U.readUint8();switch(t.padding_flag=Q>>7,t.assignment_type=Q&127,t.assignment_type){case 0:t.grouping_type=U.readString(4);break;case 1:t.grouping_type=U.readString(4),t.grouping_type_parameter=U.readUint32();break;case 2:break;case 3:break;case 4:t.sub_track_id=U.readUint32();break;default:R.warn("BoxParser",`Unknown level assignment type: ${t.assignment_type}`)}}}},Ht.fourcc="leva",Ht),Yt,ld=(Yt=class extends V{constructor(){super(...arguments),this.box_name="LHEVCConfigurationBox"}parse(U){this.configurationVersion=U.readUint8(),this.min_spatial_segmentation_idc=U.readUint16()&4095,this.parallelismType=U.readUint8()&3;let e=U.readUint8();this.numTemporalLayers=(e&13)>>3,this.temporalIdNested=(e&4)>>2,this.lengthSizeMinusOne=e&3,this.nalu_arrays=[];const F=U.readUint8();for(let t=0;t<F;t++){const Q=[];this.nalu_arrays.push(Q),e=U.readUint8(),Q.completeness=(e&128)>>7,Q.nalu_type=e&63;const n=U.readUint16();for(let s=0;s<n;s++){const l=U.readUint16();Q.push({data:U.readUint8Array(l)})}}}},Yt.fourcc="lhvC",Yt),Gt,Bd=(Gt=class extends V{constructor(){super(...arguments),this.box_name="LayerSelectorProperty"}parse(U){this.layer_id=U.readUint16()}},Gt.fourcc="lsel",Gt),Xt,ad=(Xt=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrate"}parse(U){this.period=U.readUint32(),this.bytes=U.readUint32()}},Xt.fourcc="maxr",Xt),mi=class{constructor(i,U){this.x=i,this.y=U}toString(){return"("+this.x+","+this.y+")"}},Lt,dd=(Lt=class extends V{constructor(){super(...arguments),this.box_name="MasteringDisplayColourVolumeBox"}parse(U){this.display_primaries=[],this.display_primaries[0]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[1]=new mi(U.readUint16(),U.readUint16()),this.display_primaries[2]=new mi(U.readUint16(),U.readUint16()),this.white_point=new mi(U.readUint16(),U.readUint16()),this.max_display_mastering_luminance=U.readUint32(),this.min_display_mastering_luminance=U.readUint32()}},Lt.fourcc="mdcv",Lt),Ot,rd=(Ot=class extends o{constructor(){super(...arguments),this.box_name="MovieFragmentRandomAccessOffsetBox"}parse(U){this.parseFullHeader(U),this._size=U.readUint32()}},Ot.fourcc="mfro",Ot),At,Rd=(At=class extends o{constructor(){super(...arguments),this.box_name="MaskConfigurationProperty"}parse(U){this.parseFullHeader(U),this.bits_per_pixel=U.readUint8()}},At.fourcc="mskC",At),jt,od=(jt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint32()}},jt.fourcc="npck",jt),Kt,hd=(Kt=class extends V{constructor(){super(...arguments),this.box_name="hintPacketsSent"}parse(U){this.packetssent=U.readUint64()}},Kt.fourcc="nump",Kt),Vd=class{constructor(i,U){this.pad1=i,this.pad2=U}},Pt,Jd=(Pt=class extends o{constructor(){super(...arguments),this.box_name="PaddingBitsBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.padbits=[];for(let F=0;F<Math.floor((e+1)/2);F++){const t=U.readUint8(),Q=(t&112)>>4,n=t&7;this.padbits.push(new Vd(Q,n))}}},Pt.fourcc="padb",Pt),qt,Sd=(qt=class extends V{constructor(){super(...arguments),this.box_name="PixelAspectRatioBox"}parse(U){this.hSpacing=U.readUint32(),this.vSpacing=U.readUint32()}},qt.fourcc="pasp",qt),$t,cd=($t=class extends V{constructor(){super(...arguments),this.box_name="CuePayloadBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},$t.fourcc="payl",$t),UQ,Wd=(UQ=class extends V{constructor(){super(...arguments),this.box_name="hintpayloadID"}parse(U){this.payloadID=U.readUint32();const e=U.readUint8();this.rtpmap_string=U.readString(e)}},UQ.fourcc="payt",UQ),eQ,pd=(eQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDownloadInfoBox",this.rate=[],this.initial_delay=[]}parse(U){this.parseFullHeader(U);const e=(this.size-this.hdr_size)/8;for(let F=0;F<e;F++)this.rate[F]=U.readUint32(),this.initial_delay[F]=U.readUint32()}},eQ.fourcc="pdin",eQ),FQ,Ed=(FQ=class extends o{constructor(){super(...arguments),this.box_name="PixelInformationProperty"}parse(U){this.parseFullHeader(U),this.num_channels=U.readUint8(),this.bits_per_channels=[];for(let e=0;e<this.num_channels;e++)this.bits_per_channels[e]=U.readUint8()}},FQ.fourcc="pixi",FQ),tQ,Nd=(tQ=class extends V{constructor(){super(...arguments),this.box_name="hintlargestpacket"}parse(U){this.bytes=U.readUint32()}},tQ.fourcc="pmax",tQ),QQ,Zd=(QQ=class extends o{constructor(){super(...arguments),this.box_name="ProgressiveDerivedImageItemInformationProperty"}parse(U){if(this.parseFullHeader(U),this.step_count=U.readUint16(),this.item_count=[],this.flags&2)for(let e=0;e<this.step_count;e++)this.item_count[e]=U.readUint16()}},QQ.fourcc="prdi",QQ),iQ,kd=(iQ=class extends o{constructor(){super(...arguments),this.box_name="ProjectionFormatBox"}parse(U){this.parseFullHeader(U),this.projection_type=U.readUint8()&31}},iQ.fourcc="prfr",iQ),nQ,ud=(nQ=class extends o{constructor(){super(...arguments),this.box_name="ProducerReferenceTimeBox"}parse(U){this.parseFullHeader(U),this.ref_track_id=U.readUint32(),this.ntp_timestamp=U.readUint64(),this.version===0?this.media_time=U.readUint32():this.media_time=U.readUint64()}},nQ.fourcc="prft",nQ),sQ,fd=(sQ=class extends o{constructor(){super(...arguments),this.box_name="ProtectionSystemSpecificHeaderBox"}parse(U){if(this.parseFullHeader(U),this.system_id=q(U),this.kid=[],this.version>0){const F=U.readUint32();for(let t=0;t<F;t++)this.kid[t]=q(U)}const e=U.readUint32();e>0&&(this.protection_data=U.readUint8Array(e))}},sQ.fourcc="pssh",sQ),lQ,md=(lQ=class extends o{constructor(){super(...arguments),this.box_name="TrackCleanApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},lQ.fourcc="clef",lQ);function Cd(i,U){if(i===dU.Types.UTF8)return new TextDecoder("utf-8").decode(U);const e=new DataView(U.buffer);if(i===dU.Types.BE_UNSIGNED_INT){if(U.length===1)return e.getUint8(0);if(U.length===2)return e.getUint16(0,!1);if(U.length===4)return e.getUint32(0,!1);if(U.length===8)return e.getBigUint64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_UNSIGNED_INT length "+U.length)}else if(i===dU.Types.BE_SIGNED_INT){if(U.length===1)return e.getInt8(0);if(U.length===2)return e.getInt16(0,!1);if(U.length===4)return e.getInt32(0,!1);if(U.length===8)return e.getBigInt64(0,!1);throw new Error("Unsupported ITIF_TYPE_BE_SIGNED_INT length "+U.length)}else if(i===dU.Types.BE_FLOAT32)return e.getFloat32(0,!1);R.warn("DataBox","Unsupported or unimplemented itif data type: "+i)}var iU,dU=(iU=class extends V{constructor(){super(...arguments),this.box_name="DataBox"}parse(U){this.valueType=U.readUint32(),this.country=U.readUint16(),this.country>255&&(U.seek(U.getPosition()-2),this.countryString=U.readString(2)),this.language=U.readUint16(),this.language>255&&(U.seek(U.getPosition()-2),this.parseLanguage(U)),this.raw=U.readUint8Array(this.size-this.hdr_size-8),this.value=Cd(this.valueType,this.raw)}},iU.fourcc="data",iU.Types={RESERVED:0,UTF8:1,UTF16:2,SJIS:3,UTF8_SORT:4,UTF16_SORT:5,JPEG:13,PNG:14,BE_SIGNED_INT:21,BE_UNSIGNED_INT:22,BE_FLOAT32:23,BE_FLOAT64:24,BMP:27,QT_ATOM:28,BE_SIGNED_INT8:65,BE_SIGNED_INT16:66,BE_SIGNED_INT32:67,BE_FLOAT32_POINT:70,BE_FLOAT32_DIMENSIONS:71,BE_FLOAT32_RECT:72,BE_SIGNED_INT64:74,BE_UNSIGNED_INT8:75,BE_UNSIGNED_INT16:76,BE_UNSIGNED_INT32:77,BE_UNSIGNED_INT64:78,BE_FLOAT64_AFFINE_TRANSFORM:79},iU),BQ,Td=(BQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncodedPixelsDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},BQ.fourcc="enof",BQ),aQ,gd=(aQ=class extends V{constructor(){super(...arguments),this.box_name="IlstBox"}parse(U){this.list={};let e=this.size-this.hdr_size;for(;e>0;){const F=U.readUint32(),t=U.readUint32(),Q=H(U,!1,F-8);Q.code===_&&(this.list[t]=Q.box),e-=F}}},aQ.fourcc="ilst",aQ),dQ,Dd=(dQ=class extends o{constructor(){super(...arguments),this.box_name="KeysBox"}parse(U){this.parseFullHeader(U),this.count=U.readUint32(),this.keys={};for(let e=0;e<this.count;e++){const F=U.readUint32();this.keys[e+1]=U.readString(F-4)}}},dQ.fourcc="keys",dQ),rQ,xd=(rQ=class extends o{constructor(){super(...arguments),this.box_name="TrackProductionApertureDimensionsBox"}parse(U){this.parseFullHeader(U),this.width=U.readUint32(),this.height=U.readUint32()}},rQ.fourcc="prof",rQ),RQ,bd=(RQ=class extends Z{constructor(){super(...arguments),this.box_name="TrackApertureModeDimensionsBox",this.clefs=[],this.profs=[],this.enofs=[],this.subBoxNames=["clef","prof","enof"]}},RQ.fourcc="tapt",RQ),oQ,Md=(oQ=class extends Z{constructor(){super(...arguments),this.box_name="siDecompressionParamBox"}},oQ.fourcc="wave",oQ),hQ,yd=(hQ=class extends V{constructor(){super(...arguments),this.box_name="rtpmoviehintinformation"}parse(U){this.descriptionformat=U.readString(4),this.sdptext=U.readString(this.size-this.hdr_size-4)}},hQ.fourcc="rtp ",hQ),VQ,Id=(VQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationOffsetsBox"}parse(U){this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32());const e=U.readUint32();this.offset=[];for(let F=0;F<e;F++)this.version===0?this.offset[F]=U.readUint32():this.offset[F]=U.readUint64()}},VQ.fourcc="saio",VQ),JQ,wd=(JQ=class extends o{constructor(){super(...arguments),this.box_name="SampleAuxiliaryInformationSizesBox"}parse(U){if(this.parseFullHeader(U),this.flags&1&&(this.aux_info_type=U.readString(4),this.aux_info_type_parameter=U.readUint32()),this.default_sample_info_size=U.readUint8(),this.sample_count=U.readUint32(),this.sample_info_size=[],this.default_sample_info_size===0)for(let e=0;e<this.sample_count;e++)this.sample_info_size[e]=U.readUint8()}},JQ.fourcc="saiz",JQ),vd=class{constructor(i,U){this.bad_pixel_row=i,this.bad_pixel_column=U}toString(){return"[row: "+this.bad_pixel_row+", column: "+this.bad_pixel_column+"]"}},SQ,_d=(SQ=class extends o{constructor(){super(...arguments),this.box_name="SensorBadPixelsMapBox"}parse(U){this.parseFullHeader(U),this.component_count=U.readUint16(),this.component_index=[];for(let F=0;F<this.component_count;F++)this.component_index.push(U.readUint16());const e=U.readUint8();this.correction_applied=(e&128)===128,this.num_bad_rows=U.readUint32(),this.num_bad_cols=U.readUint32(),this.num_bad_pixels=U.readUint32(),this.bad_rows=[],this.bad_columns=[],this.bad_pixels=[];for(let F=0;F<this.num_bad_rows;F++)this.bad_rows.push(U.readUint32());for(let F=0;F<this.num_bad_cols;F++)this.bad_columns.push(U.readUint32());for(let F=0;F<this.num_bad_pixels;F++){const t=U.readUint32(),Q=U.readUint32();this.bad_pixels.push(new vd(t,Q))}}},SQ.fourcc="sbpm",SQ),cQ,zd=(cQ=class extends o{constructor(){super(...arguments),this.box_name="SchemeTypeBox"}parse(U){this.parseFullHeader(U),this.scheme_type=U.readString(4),this.scheme_version=U.readUint32(),this.flags&1&&(this.scheme_uri=U.readString(this.size-this.hdr_size-8))}},cQ.fourcc="schm",cQ),WQ,Hd=(WQ=class extends V{constructor(){super(...arguments),this.box_name="rtptracksdphintinformation"}parse(U){this.sdptext=U.readString(this.size-this.hdr_size)}},WQ.fourcc="sdp ",WQ),pQ,Yd=(pQ=class extends o{constructor(){super(...arguments),this.box_name="SampleEncryptionBox"}},pQ.fourcc="senc",pQ),EQ,Gd=(EQ=class extends o{constructor(){super(...arguments),this.box_name="SMPTE2086MasteringDisplayMetadataBox"}parse(U){this.parseFullHeader(U),this.primaryRChromaticity_x=U.readUint16(),this.primaryRChromaticity_y=U.readUint16(),this.primaryGChromaticity_x=U.readUint16(),this.primaryGChromaticity_y=U.readUint16(),this.primaryBChromaticity_x=U.readUint16(),this.primaryBChromaticity_y=U.readUint16(),this.whitePointChromaticity_x=U.readUint16(),this.whitePointChromaticity_y=U.readUint16(),this.luminanceMax=U.readUint32(),this.luminanceMin=U.readUint32()}},EQ.fourcc="SmDm",EQ),NQ,Xd=(NQ=class extends o{constructor(){super(...arguments),this.box_name="SamplingRateBox"}parse(U){this.parseFullHeader(U),this.sampling_rate=U.readUint32()}},NQ.fourcc="srat",NQ),ZQ,Ld=(ZQ=class extends o{constructor(){super(...arguments),this.box_name="CompressedSubsegmentIndexBox"}parse(U){this.parseFullHeader(U),this.subsegments=[];const e=U.readUint32();for(let F=0;F<e;F++){const t={};this.subsegments.push(t),t.ranges=[];const Q=U.readUint32();for(let n=0;n<Q;n++){const s={};t.ranges.push(s),s.level=U.readUint8(),s.range_size=U.readUint24()}}}},ZQ.fourcc="ssix",ZQ),kQ,Od=(kQ=class extends o{constructor(){super(...arguments),this.box_name="DegradationPriorityBox"}parse(U){this.parseFullHeader(U);const e=(this.size-this.hdr_size)/2;this.priority=[];for(let F=0;F<e;F++)this.priority[F]=U.readUint16()}},kQ.fourcc="stpd",kQ),uQ,Ad=(uQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackInformationBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint16(),this.alternate_group=U.readUint16(),this.sub_track_id=U.readUint32();const e=(this.size-this.hdr_size-8)/4;this.attribute_list=[];for(let F=0;F<e;F++)this.attribute_list[F]=U.readUint32()}},uQ.fourcc="stri",uQ),fQ,jd=(fQ=class extends o{constructor(){super(...arguments),this.box_name="SubTrackSampleGroupBox"}parse(U){this.parseFullHeader(U),this.grouping_type=U.readUint32();const e=U.readUint16();this.group_description_index=[];for(let F=0;F<e;F++)this.group_description_index[F]=U.readUint32()}},fQ.fourcc="stsg",fQ),mQ,Kd=(mQ=class extends o{constructor(){super(...arguments),this.box_name="ShadowSyncSampleBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],this.version===0)for(let F=0;F<e;F++)this.shadowed_sample_numbers.push(U.readUint32()),this.sync_sample_numbers.push(U.readUint32())}write(U){this.version=0,this.flags=0,this.size=4+8*this.shadowed_sample_numbers.length,this.writeHeader(U),U.writeUint32(this.shadowed_sample_numbers.length);for(let e=0;e<this.shadowed_sample_numbers.length;e++)U.writeUint32(this.shadowed_sample_numbers[e]),U.writeUint32(this.sync_sample_numbers[e])}},mQ.fourcc="stsh",mQ),CQ,Pd=(CQ=class extends o{constructor(){super(...arguments),this.box_name="SyncSampleBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();if(this.version===0){this.sample_numbers=[];for(let F=0;F<e;F++)this.sample_numbers.push(U.readUint32())}}write(U){this.version=0,this.flags=0,this.size=4+4*this.sample_numbers.length,this.writeHeader(U),U.writeUint32(this.sample_numbers.length),U.writeUint32Array(this.sample_numbers)}},CQ.fourcc="stss",CQ),TQ,qd=(TQ=class extends o{constructor(){super(...arguments),this.box_name="StereoVideoBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.single_view_allowed=e&3,this.stereo_scheme=U.readUint32();const F=U.readUint32();for(this.stereo_indication_type=U.readString(F),this.boxes=[];U.getPosition()<this.start+this.size;){const t=H(U,!1,this.size-(U.getPosition()-this.start));if(t.code===_){const Q=t.box;this.boxes.push(Q),this[Q.type]=Q}else return}}},TQ.fourcc="stvi",TQ),gQ,$d=(gQ=class extends V{constructor(){super(...arguments),this.box_name="SegmentTypeBox"}parse(U){let e=this.size-this.hdr_size;this.major_brand=U.readString(4),this.minor_version=U.readUint32(),e-=8,this.compatible_brands=[];let F=0;for(;e>=4;)this.compatible_brands[F]=U.readString(4),e-=4,F++}write(U){this.size=8+4*this.compatible_brands.length,this.writeHeader(U),U.writeString(this.major_brand,void 0,4),U.writeUint32(this.minor_version);for(let e=0;e<this.compatible_brands.length;e++)U.writeString(this.compatible_brands[e],void 0,4)}},gQ.fourcc="styp",gQ),DQ,Ur=(DQ=class extends o{constructor(){super(...arguments),this.box_name="CompactSampleSizeBox"}parse(U){if(this.parseFullHeader(U),this.sample_sizes=[],this.version===0){this.reserved=U.readUint24(),this.field_size=U.readUint8();const e=U.readUint32();if(this.field_size===4)for(let F=0;F<e;F+=2){const t=U.readUint8();this.sample_sizes[F]=t>>4&15,this.sample_sizes[F+1]=t&15}else if(this.field_size===8)for(let F=0;F<e;F++)this.sample_sizes[F]=U.readUint8();else if(this.field_size===16)for(let F=0;F<e;F++)this.sample_sizes[F]=U.readUint16();else R.error("BoxParser","Error in length field in stz2 box",U.isofile)}}},DQ.fourcc="stz2",DQ),xQ,er=(xQ=class extends o{constructor(){super(...arguments),this.box_name="SubSampleInformationBox"}parse(U){this.parseFullHeader(U);const e=U.readUint32();this.entries=[];let F;for(let t=0;t<e;t++){const Q={};if(this.entries[t]=Q,Q.sample_delta=U.readUint32(),Q.subsamples=[],F=U.readUint16(),F>0)for(let n=0;n<F;n++){const s={};Q.subsamples.push(s),this.version===1?s.size=U.readUint32():s.size=U.readUint16(),s.priority=U.readUint8(),s.discardable=U.readUint8(),s.codec_specific_parameters=U.readUint32()}}}},xQ.fourcc="subs",xQ),bQ,Fr=(bQ=class extends o{constructor(){super(...arguments),this.box_name="TAIClockInfoBox"}parse(U){this.time_uncertainty=U.readUint64(),this.clock_resolution=U.readUint32(),this.clock_drift_rate=U.readInt32();const e=U.readUint8();this.clock_type=(e&192)>>6}},bQ.fourcc="taic",bQ),MQ,tr=(MQ=class extends o{constructor(){super(...arguments),this.box_name="TrackEncryptionBox"}parse(U){if(this.parseFullHeader(U),U.readUint8(),this.version===0)U.readUint8();else{const e=U.readUint8();this.default_crypt_byte_block=e>>4&15,this.default_skip_byte_block=e&15}this.default_isProtected=U.readUint8(),this.default_Per_Sample_IV_Size=U.readUint8(),this.default_KID=q(U),this.default_isProtected===1&&this.default_Per_Sample_IV_Size===0&&(this.default_constant_IV_size=U.readUint8(),this.default_constant_IV=U.readUint8Array(this.default_constant_IV_size))}},MQ.fourcc="tenc",MQ),yQ,Qr=(yQ=class extends o{constructor(){super(...arguments),this.box_name="TrackFragmentRandomAccessBox"}parse(U){this.parseFullHeader(U),this.track_ID=U.readUint32(),U.readUint24();const e=U.readUint8();this.length_size_of_traf_num=e>>4&3,this.length_size_of_trun_num=e>>2&3,this.length_size_of_sample_num=e&3,this.entries=[];const F=U.readUint32();for(let t=0;t<F;t++)this.version===1?(this.time=U.readUint64(),this.moof_offset=U.readUint64()):(this.time=U.readUint32(),this.moof_offset=U.readUint32()),this.traf_number=U["readUint"+8*(this.length_size_of_traf_num+1)](),this.trun_number=U["readUint"+8*(this.length_size_of_trun_num+1)](),this.sample_number=U["readUint"+8*(this.length_size_of_sample_num+1)]()}},yQ.fourcc="tfra",yQ),IQ,ir=(IQ=class extends V{constructor(){super(...arguments),this.box_name="hintmaxrelativetime"}parse(U){this.time=U.readUint32()}},IQ.fourcc="tmax",IQ),wQ,nr=(wQ=class extends V{constructor(){super(...arguments),this.box_name="hintminrelativetime"}parse(U){this.time=U.readUint32()}},wQ.fourcc="tmin",wQ),vQ,sr=(vQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},vQ.fourcc="totl",vQ),_Q,lr=(_Q=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint32()}},_Q.fourcc="tpay",_Q),zQ,Br=(zQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},zQ.fourcc="tpyl",zQ),HQ,ar=(HQ=class extends Ul{},HQ.fourcc="msrc",HQ),P,dr=(P=class extends V{constructor(){super(...arguments),this.box_name="TrackReferenceBox",this.references=[]}parse(U){for(;U.getPosition()<this.start+this.size;){const e=H(U,!0,this.size-(U.getPosition()-this.start));if(e.code===_){P.allowed_types.includes(e.type)||R.warn("BoxParser",`Unknown track reference type: '${e.type}'`);const F=new tl(e.type,e.size,e.hdr_size,e.start);F.write===V.prototype.write&&F.type!=="mdat"&&(R.info("BoxParser","TrackReference "+F.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),F.parseDataAndRewind(U)),F.parse(U),this.references.push(F)}else return}}},P.fourcc="tref",P.allowed_types=["hint","cdsc","font","hind","vdep","vplx","subt","thmb","auxl","cdtg","shsc","aest"],P),YQ,rr=(YQ=class extends o{constructor(){super(...arguments),this.box_name="TrackExtensionPropertiesBox"}parse(U){for(this.parseFullHeader(U),this.track_ID=U.readUint32(),this.boxes=[];U.getPosition()<this.start+this.size;){const e=H(U,!1,this.size-(U.getPosition()-this.start));if(e.code===_){const F=e.box;this.boxes.push(F)}else return}}},YQ.fourcc="trep",YQ),GQ,Rr=(GQ=class extends V{constructor(){super(...arguments),this.box_name="hintBytesSent"}parse(U){this.bytessent=U.readUint64()}},GQ.fourcc="trpy",GQ),XQ,or=(XQ=class extends o{constructor(){super(...arguments),this.box_name="TrackSelectionBox"}parse(U){this.parseFullHeader(U),this.switch_group=U.readUint32();const e=(this.size-this.hdr_size-4)/4;this.attribute_list=[];for(let F=0;F<e;F++)this.attribute_list[F]=U.readUint32()}},XQ.fourcc="tsel",XQ),LQ,hr=(LQ=class extends o{constructor(){super(...arguments),this.box_name="TextConfigBox"}parse(U){this.parseFullHeader(U),this.config=U.readCString()}},LQ.fourcc="txtc",LQ),OQ,Vr=(OQ=class extends V{constructor(){super(...arguments),this.box_name="TypeCombinationBox"}parse(U){const e=(this.size-this.hdr_size)/4;this.compatible_brands=[];for(let F=0;F<e;F++)this.compatible_brands[F]=U.readString(4)}},OQ.fourcc="tyco",OQ),AQ,Jr=(AQ=class extends o{constructor(){super(...arguments),this.box_name="UserDescriptionProperty"}parse(U){this.parseFullHeader(U),this.lang=U.readCString(),this.name=U.readCString(),this.description=U.readCString(),this.tags=U.readCString()}},AQ.fourcc="udes",AQ),jQ,Sr=(jQ=class extends o{constructor(){super(...arguments),this.box_name="UncompressedFrameConfigBox"}parse(U){if(this.parseFullHeader(U),this.profile=U.readString(4),this.version!==1){if(this.version===0){this.component_count=U.readUint32(),this.component_index=[],this.component_bit_depth_minus_one=[],this.component_format=[],this.component_align_size=[];for(let F=0;F<this.component_count;F++)this.component_index.push(U.readUint16()),this.component_bit_depth_minus_one.push(U.readUint8()),this.component_format.push(U.readUint8()),this.component_align_size.push(U.readUint8());this.sampling_type=U.readUint8(),this.interleave_type=U.readUint8(),this.block_size=U.readUint8();const e=U.readUint8();this.component_little_endian=e>>7&1,this.block_pad_lsb=e>>6&1,this.block_little_endian=e>>5&1,this.block_reversed=e>>4&1,this.pad_unknown=e>>3&1,this.pixel_size=U.readUint32(),this.row_align_size=U.readUint32(),this.tile_align_size=U.readUint32(),this.num_tile_cols_minus_one=U.readUint32(),this.num_tile_rows_minus_one=U.readUint32()}}}},jQ.fourcc="uncC",jQ),KQ,cr=(KQ=class extends o{constructor(){super(...arguments),this.box_name="DataEntryUrnBox"}parse(U){this.parseFullHeader(U),this.name=U.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=U.readCString())}write(U){this.version=0,this.flags=0,this.size=this.name.length+1+(this.location?this.location.length+1:0),this.writeHeader(U),U.writeCString(this.name),this.location&&U.writeCString(this.location)}},KQ.fourcc="urn ",KQ),PQ,Wr=(PQ=class extends V{constructor(){super(...arguments),this.box_name="WebVTTConfigurationBox"}parse(U){this.text=U.readString(this.size-this.hdr_size)}},PQ.fourcc="vttC",PQ),qQ,pr=(qQ=class extends o{constructor(){super(...arguments),this.box_name="VvcNALUConfigBox"}parse(U){this.parseFullHeader(U);const e=U.readUint8();this.lengthSizeMinusOne=e&3}},qQ.fourcc="vvnC",qQ),$Q,Er=($Q=class extends D{parse(U){const e=U.readUint16();this.first_output_sample=U.readUint16(),this.sample_offset=[];for(let t=0;t<e;t++)this.sample_offset[t]=U.readUint32();const F=this.description_length-4-4*e;this.num_output_samples=[],this.num_total_samples=[];for(let t=0;t<F/4;t++)this.num_output_samples[t]=U.readUint16(),this.num_total_samples[t]=U.readUint16()}},$Q.grouping_type="alst",$Q),Ui,Nr=(Ui=class extends D{parse(U){this.layerNumber=U.readUint8(),this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()}},Ui.grouping_type="avll",Ui),ei,Zr=(ei=class extends D{parse(U){this.subSequenceIdentifier=U.readUint16(),this.layerNumber=U.readUint8();const e=U.readUint8();this.durationFlag=e>>7,this.avgRateFlag=e>>6&1,this.durationFlag&&(this.duration=U.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=U.readUint8(),this.avgBitRate=U.readUint16(),this.avgFrameRate=U.readUint16()),this.dependency=[];const F=U.readUint8();for(let t=0;t<F;t++)this.dependency.push({subSeqDirectionFlag:U.readUint8(),layerNumber:U.readUint8(),subSequenceIdentifier:U.readUint16()})}},ei.grouping_type="avss",ei),Fi,kr=(Fi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Fi.grouping_type="dtrt",Fi),ti,ur=(ti=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},ti.grouping_type="mvif",ti),Qi,fr=(Qi=class extends D{parse(U){this.roll_distance=U.readInt16()}},Qi.grouping_type="prol",Qi),ii,mr=(ii=class extends D{parse(U){const e=U.readUint8();this.num_leading_samples_known=e>>7,this.num_leading_samples=e&127}},ii.grouping_type="rap ",ii),ni,Cr=(ni=class extends D{parse(U){if(this.operation_point_count=U.readUint16(),this.description_length!==2+(this.operation_point_count===1?2:this.operation_point_count*6)+9)R.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=U.readUint8Array(this.description_length-2);else{if(this.operation_point_count===1)this.target_rate_share=U.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(let e=0;e<this.operation_point_count;e++)this.available_bitrate[e]=U.readUint32(),this.target_rate_share[e]=U.readUint16()}this.maximum_bitrate=U.readUint32(),this.minimum_bitrate=U.readUint32(),this.discard_priority=U.readUint8()}}},ni.grouping_type="rash",ni),si,Tr=(si=class extends D{parse(U){this.roll_distance=U.readInt16()}},si.grouping_type="roll",si),li,gr=(li=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},li.grouping_type="scif",li),Bi,Dr=(Bi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Bi.grouping_type="scnm",Bi),ai,xr=(ai=class extends D{parse(U){this.reserved=U.readUint8();const e=U.readUint8();this.crypt_byte_block=e>>4,this.skip_byte_block=e&15,this.isProtected=U.readUint8(),this.Per_Sample_IV_Size=U.readUint8(),this.KID=q(U),this.constant_IV_size=0,this.constant_IV=0,this.isProtected===1&&this.Per_Sample_IV_Size===0&&(this.constant_IV_size=U.readUint8(),this.constant_IV=U.readUint8Array(this.constant_IV_size))}},ai.grouping_type="seig",ai),di,br=(di=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},di.grouping_type="stsa",di),ri,Mr=(ri=class extends D{parse(U){const e=U.readUint8();this.NAL_unit_type=e&63}},ri.grouping_type="sync",ri),Ri,yr=(Ri=class extends D{parse(U){const e=U.readUint8();this.level_independently_decodable=e>>7}},Ri.grouping_type="tele",Ri),oi,Ir=(oi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},oi.grouping_type="tsas",oi),hi,wr=(hi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},hi.grouping_type="tscl",hi),Vi,vr=(Vi=class extends D{parse(U){R.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}},Vi.grouping_type="vipr",Vi),Ji,_r=(Ji=class extends V{},Ji.fourcc="uuid",Ji),Si,nU=(Si=class extends o{},Si.fourcc="uuid",Si),ci,zr=(ci=class extends nU{constructor(){super(...arguments),this.box_name="LiveServerManifestBox"}parse(U){this.parseFullHeader(U),this.LiveServerManifest=U.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}},ci.uuid="a5d40b30e81411ddba2f0800200c9a66",ci),Wi,Hr=(Wi=class extends nU{constructor(){super(...arguments),this.box_name="PiffProtectionSystemSpecificHeaderBox"}parse(U){this.parseFullHeader(U),this.system_id=q(U);const e=U.readUint32();e>0&&(this.data=U.readUint8Array(e))}},Wi.uuid="d08a4f1810f34a82b6c832d8aba183d3",Wi),pi,Yr=(pi=class extends nU{constructor(){super(...arguments),this.box_name="PiffSampleEncryptionBox"}},pi.uuid="a2394f525a9b4f14a2446c427c648df4",pi),Ei,Gr=(Ei=class extends nU{constructor(){super(...arguments),this.box_name="PiffTrackEncryptionBox"}parse(U){this.parseFullHeader(U),this.default_AlgorithmID=U.readUint24(),this.default_IV_size=U.readUint8(),this.default_KID=q(U)}},Ei.uuid="8974dbce7be74c5184f97148f9882554",Ei),Ni,Xr=(Ni=class extends nU{constructor(){super(...arguments),this.box_name="TfrfBox"}parse(U){this.parseFullHeader(U),this.fragment_count=U.readUint8(),this.entries=[];for(let e=0;e<this.fragment_count;e++){let F=0,t=0;this.version===1?(F=U.readUint64(),t=U.readUint64()):(F=U.readUint32(),t=U.readUint32()),this.entries.push({absolute_time:F,absolute_duration:t})}}},Ni.uuid="d4807ef2ca3946958e5426cb9e46a79f",Ni),Zi,Lr=(Zi=class extends nU{constructor(){super(...arguments),this.box_name="TfxdBox"}parse(U){this.parseFullHeader(U),this.version===1?(this.absolute_time=U.readUint64(),this.duration=U.readUint64()):(this.absolute_time=U.readUint32(),this.duration=U.readUint32())}},Zi.uuid="6d1d9b0542d544e680e2141daff757b2",Zi),ki,Or=(ki=class extends _r{constructor(){super(...arguments),this.box_name="ItemContentIDProperty"}parse(U){this.content_id=U.readCString()}},ki.uuid="261ef3741d975bbaacbd9d2c8ea73522",ki);Bl(gs);al(us);class an{constructor(U={}){r(this,"mp4File",null);r(this,"fileInfo",null);r(this,"videoTrackId",null);r(this,"audioTrackId",null);r(this,"videoTrack",null);r(this,"audioTrack",null);r(this,"nextVideoSampleIndex",0);r(this,"nextAudioSampleIndex",0);r(this,"totalVideoSamples",0);r(this,"totalAudioSamples",0);r(this,"samplesRequested",!1);r(this,"isProgressiveLoading",!1);r(this,"fileSize",0);r(this,"loadedBytes",0);r(this,"videoDescription",null);r(this,"audioDescription",null);r(this,"events",{});this.events=U}getFileInfo(){return this.fileInfo}getVideoDescription(){return this.videoDescription}getAudioDescription(){return this.audioDescription}async loadFromUrl(U){this.initMP4File();const e=4*1024*1024;let F=0,t=!1;try{const Q=await fetch(U,{method:"HEAD"});if(Q.ok){const n=Q.headers.get("Content-Length");n&&(this.fileSize=parseInt(n,10))}}catch{}return new Promise((Q,n)=>{let s=!1;const l=this.mp4File.onSamples;this.mp4File.onSamples=(d,h,J)=>{!s&&d===this.videoTrackId&&J.length>0&&(s=!0),l==null||l.call(this.mp4File,d,h,J)};const B=this.mp4File.onReady;this.mp4File.onReady=d=>{B==null||B.call(this.mp4File,d),this.fileInfo&&!t&&(t=!0)},(async()=>{var d,h,J,c,S,N,f,C,k,b;try{const u=await fetch(U,{headers:{Range:`bytes=0-${e-1}`}});if(!u.ok&&u.status!==206)throw new Error(`Failed to fetch: ${u.status} ${u.statusText}`);if(u.status===200){this.isProgressiveLoading=!1;const m=await u.arrayBuffer();this.fileSize=m.byteLength,this.loadedBytes=m.byteLength;const T=m;T.fileStart=0,(d=this.mp4File)==null||d.appendBuffer(T),(h=this.mp4File)==null||h.flush(),this.fileInfo?Q(this.fileInfo):n(new Error("File loaded but no video track found"));return}if(this.isProgressiveLoading=!0,!this.fileSize){const m=u.headers.get("Content-Range");if(m){const T=m.match(/bytes \d+-\d+\/(\d+)/);T&&(this.fileSize=parseInt(T[1],10))}}const W=await u.arrayBuffer(),y=W;if(y.fileStart=0,F=W.byteLength,this.loadedBytes=F,(c=(J=this.events).onProgress)==null||c.call(J,this.loadedBytes,this.fileSize),(S=this.mp4File)==null||S.appendBuffer(y),t&&s){F<this.fileSize?this.continueLoadingInBackground(U,F,e):(N=this.mp4File)==null||N.flush(),Q(this.fileInfo);return}for(;F<this.fileSize&&(!t||!s);){const m=Math.min(F+e-1,this.fileSize-1),T=await fetch(U,{headers:{Range:`bytes=${F}-${m}`}});if(!T.ok&&T.status!==206)throw new Error(`Failed to fetch chunk: ${T.status} ${T.statusText}`);const p=await T.arrayBuffer(),Y=p;if(Y.fileStart=F,F+=p.byteLength,this.loadedBytes=F,(C=(f=this.events).onProgress)==null||C.call(f,this.loadedBytes,this.fileSize),(k=this.mp4File)==null||k.appendBuffer(Y),t&&s){this.continueLoadingInBackground(U,F,e),Q(this.fileInfo);return}}F>=this.fileSize&&((b=this.mp4File)==null||b.flush(),this.fileInfo?Q(this.fileInfo):n(new Error("File loaded but no video track found")))}catch(u){n(u)}})()})}continueLoadingInBackground(U,e,F){(async()=>{var Q,n,s,l,B,a,d,h;let t=e;try{for(;t<this.fileSize;){const J=Math.min(t+F-1,this.fileSize-1),c=await fetch(U,{headers:{Range:`bytes=${t}-${J}`}});if(!c.ok&&c.status!==206){(n=(Q=this.events).onError)==null||n.call(Q,new Error(`Failed to fetch chunk: ${c.status}`));break}const S=await c.arrayBuffer(),N=S;N.fileStart=t,t+=S.byteLength,this.loadedBytes=t,(l=(s=this.events).onProgress)==null||l.call(s,this.loadedBytes,this.fileSize),(B=this.mp4File)==null||B.appendBuffer(N)}(a=this.mp4File)==null||a.flush()}catch(J){(h=(d=this.events).onError)==null||h.call(d,J)}})()}async loadFromFile(U){this.fileSize=U.size;const e=await U.arrayBuffer();return this.isProgressiveLoading=!1,this.loadFromArrayBuffer(e)}async loadFromStream(U){this.initMP4File(),this.isProgressiveLoading=!0;let e=0;return new Promise((F,t)=>{const Q=s=>{var B,a,d;const l=new ArrayBuffer(s.byteLength);new Uint8Array(l).set(s),l.fileStart=e,e+=l.byteLength,this.loadedBytes=e,(a=(B=this.events).onProgress)==null||a.call(B,this.loadedBytes,this.fileSize),(d=this.mp4File)==null||d.appendBuffer(l)},n=async()=>{var s;try{const{done:l,value:B}=await U.read();if(l){(s=this.mp4File)==null||s.flush(),this.fileInfo?F(this.fileInfo):t(new Error("File loaded but no video track found"));return}B&&Q(B),n()}catch(l){t(l)}};n()})}async loadFromArrayBuffer(U){return this.initMP4File(),new Promise((e,F)=>{var n,s;const t=this.mp4File.onReady;this.mp4File.onReady=l=>{t==null||t.call(this.mp4File,l),this.fileInfo?(this.requestSamples(),e(this.fileInfo)):F(new Error("No video track found in file"))};const Q=U;Q.fileStart=0,this.loadedBytes=U.byteLength,(n=this.mp4File)==null||n.appendBuffer(Q),(s=this.mp4File)==null||s.flush()})}initMP4File(){this.mp4File=Ua(),this.mp4File.onReady=U=>{this.handleFileReady(U)},this.mp4File.onSamples=(U,e,F)=>{this.handleSamples(U,F)},this.mp4File.onError=(U,e)=>{var t,Q;if(e.includes("Invalid box type")||e.includes("Unknown box")){console.warn(`[MP4FileSource] Ignoring unknown box: ${e}`);return}const F=new Error(`MP4Box error in ${U}: ${e}`);(Q=(t=this.events).onError)==null||Q.call(t,F)}}handleFileReady(U){var e,F,t,Q,n,s,l,B,a,d,h,J,c,S,N,f,C,k,b,u,W,y,m,T,p,Y,cn,Wn,pn;if(U.videoTracks.length>0){this.videoTrack=U.videoTracks[0],this.videoTrackId=this.videoTrack.id,this.totalVideoSamples=this.videoTrack.nb_samples;const sU=(e=this.mp4File)==null?void 0:e.getTrackById(this.videoTrackId);if(sU){const eU=(s=(n=(Q=(t=(F=sU.mdia)==null?void 0:F.minf)==null?void 0:t.stbl)==null?void 0:Q.stsd)==null?void 0:n.entries)==null?void 0:s[0];if(eU){const z=eU.avcC,G=eU.hvcC;z?this.videoDescription=this.serializeAvcC(z):G&&(this.videoDescription=this.serializeHvcC(G))}}}if(U.audioTracks.length>0){this.audioTrack=U.audioTracks[0],this.audioTrackId=this.audioTrack.id,this.totalAudioSamples=this.audioTrack.nb_samples;const sU=(l=this.mp4File)==null?void 0:l.getTrackById(this.audioTrackId);if(sU){const eU=(J=(h=(d=(a=(B=sU.mdia)==null?void 0:B.minf)==null?void 0:a.stbl)==null?void 0:d.stsd)==null?void 0:h.entries)==null?void 0:J[0];if(eU){const z=eU.esds;if(z){let G=null;if((C=(f=(N=(S=(c=z.esd)==null?void 0:c.descs)==null?void 0:S[0])==null?void 0:N.descs)==null?void 0:f[0])!=null&&C.data)G=z.esd.descs[0].descs[0].data;else if((u=(b=(k=z.esd)==null?void 0:k.descs)==null?void 0:b[0])!=null&&u.data)G=z.esd.descs[0].data;else if((W=z.esd)!=null&&W.descs)for(const Li of z.esd.descs){if(Li.tag===4&&Li.descs){for(const Oi of Li.descs)if(Oi.tag===5&&Oi.data){G=Oi.data;break}}if(G)break}G&&(this.audioDescription=G)}}}}if(!this.videoTrack){(m=(y=this.events).onError)==null||m.call(y,new Error("No video track found in file"));return}this.fileInfo={duration:this.videoTrack.duration/this.videoTrack.timescale,timescale:this.videoTrack.timescale,width:((T=this.videoTrack.video)==null?void 0:T.width)??0,height:((p=this.videoTrack.video)==null?void 0:p.height)??0,videoCodec:this.videoTrack.codec,frameRate:this.videoTrack.nb_samples/(this.videoTrack.duration/this.videoTrack.timescale),bitrate:this.videoTrack.bitrate},this.audioTrack&&(this.fileInfo.audioCodec=this.audioTrack.codec,this.fileInfo.audioChannels=(Y=this.audioTrack.audio)==null?void 0:Y.channel_count,this.fileInfo.audioSampleRate=(cn=this.audioTrack.audio)==null?void 0:cn.sample_rate),this.requestSamples(),(pn=(Wn=this.events).onReady)==null||pn.call(Wn,this.fileInfo)}requestSamples(){var U,e,F,t,Q;this.samplesRequested||(this.samplesRequested=!0,this.videoTrackId!==null&&(this.isProgressiveLoading?(U=this.mp4File)==null||U.setExtractionOptions(this.videoTrackId,null,{nbSamples:100}):(e=this.mp4File)==null||e.setExtractionOptions(this.videoTrackId,null,{nbSamples:this.totalVideoSamples})),this.audioTrackId!==null&&(this.isProgressiveLoading?(F=this.mp4File)==null||F.setExtractionOptions(this.audioTrackId,null,{nbSamples:100}):(t=this.mp4File)==null||t.setExtractionOptions(this.audioTrackId,null,{nbSamples:this.totalAudioSamples})),(Q=this.mp4File)==null||Q.start())}handleSamples(U,e){var n,s,l,B;const F=U===this.videoTrackId;if(!(F?this.videoTrack:this.audioTrack))return;const Q=e.filter(a=>a.data!=null).map(a=>{const d=a.cts/a.timescale*1e6,h=a.duration/a.timescale*1e6;return{data:a.data,timestamp:d,duration:h,isKeyframe:a.is_sync,type:F?"video":"audio"}});if(F?(this.nextVideoSampleIndex+=e.length,this.nextVideoSampleIndex>=this.totalVideoSamples&&((s=(n=this.events).onEnded)==null||s.call(n))):this.nextAudioSampleIndex+=e.length,this.mp4File){const a=e[e.length-1];this.mp4File.releaseUsedSamples(U,a.number)}(B=(l=this.events).onSamples)==null||B.call(l,Q)}seek(U){if(!this.mp4File||!this.videoTrackId)return 0;const e=this.mp4File.seek(U,!0);return this.nextVideoSampleIndex=0,this.nextAudioSampleIndex=0,this.samplesRequested=!1,this.mp4File.stop(),this.requestSamples(),e.time}getPosition(){return{currentSample:this.nextVideoSampleIndex,totalSamples:this.totalVideoSamples,progress:this.totalVideoSamples>0?this.nextVideoSampleIndex/this.totalVideoSamples:0}}stop(){var U;(U=this.mp4File)==null||U.stop()}start(){var U;(U=this.mp4File)==null||U.start()}dispose(){var U;(U=this.mp4File)==null||U.stop(),this.mp4File=null,this.fileInfo=null,this.videoTrack=null,this.audioTrack=null,this.videoDescription=null,this.audioDescription=null,this.isProgressiveLoading=!1}serializeAvcC(U){let e=6;const F=U.SPS||[];for(const s of F)e+=2+s.data.length;e+=1;const t=U.PPS||[];for(const s of t)e+=2+s.data.length;const Q=new Uint8Array(e);let n=0;Q[n++]=U.configurationVersion||1,Q[n++]=U.AVCProfileIndication,Q[n++]=U.profile_compatibility,Q[n++]=U.AVCLevelIndication,Q[n++]=255,Q[n++]=224|F.length;for(const s of F){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}Q[n++]=t.length;for(const s of t){const l=s.data.length;Q[n++]=l>>8&255,Q[n++]=l&255,Q.set(new Uint8Array(s.data),n),n+=l}return Q}serializeHvcC(U){return U.data&&U.data instanceof Uint8Array?U.data:(console.warn("HEVC serialization not fully implemented"),new Uint8Array(0))}}const Ar=`
|
|
152
152
|
class AudioPlayProcessor extends AudioWorkletProcessor {
|
|
153
153
|
constructor(options) {
|
|
154
154
|
super();
|
|
@@ -231,4 +231,4 @@ class AudioPlayProcessor extends AudioWorkletProcessor {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
registerProcessor('audio-play-processor', AudioPlayProcessor);
|
|
234
|
-
`;class Ds{constructor(U,F={}){d(this,"ctx");d(this,"decoder",null);d(this,"workletNode",null);d(this,"gainNode");d(this,"initialized",!1);d(this,"targetSampleRate");d(this,"codecConfig",null);this.ctx=U,this.targetSampleRate=F.sampleRate??U.sampleRate,this.gainNode=this.ctx.createGain()}async init(U,F,e,t){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");if(this.codecConfig={codec:U,sampleRate:F,numberOfChannels:e},t&&(this.codecConfig.description=t),!(await AudioDecoder.isConfigSupported(this.codecConfig)).supported)throw new Error(`Audio codec not supported: ${U}`);this.decoder=new AudioDecoder({output:l=>this.handleDecodedFrame(l),error:l=>{console.error("AudioDecoder error:",l)}}),this.decoder.configure(this.codecConfig);const n=new Blob([Ar],{type:"application/javascript"}),s=URL.createObjectURL(n);try{await this.ctx.audioWorklet.addModule(s)}finally{URL.revokeObjectURL(s)}this.workletNode=new AudioWorkletNode(this.ctx,"audio-play-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const F=U.numberOfFrames;let e=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),e=U.numberOfChannels)}catch{e=1}const t=new Float32Array(F),Q=new Float32Array(F);if(e===1){const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const a=new Float32Array(B);if(U.numberOfChannels===1)t.set(a),Q.set(a);else for(let r=0;r<F;r++)t[r]=a[r*2],Q[r]=a[r*2+1]}else{const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),r=new ArrayBuffer(a);U.copyTo(r,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(r))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate);this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer}},[n.buffer,s.buffer]),U.close()}catch(F){console.error("Error processing audio frame:",F),U.close()}}resampleAudio(U,F,e){if(F===e)return U;const t=F/e,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),r=l-B;n[s]=U[B]*(1-r)+U[a]*r}return n}decode(U,F,e){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured"))try{const t=new EncodedAudioChunk({type:"key",timestamp:F,duration:e,data:U});this.decoder.decode(t)}catch(t){console.error("Error decoding audio:",t)}}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}resetTiming(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}}}class xs extends rn{constructor(F={}){super("idle",F.debugLogging??!1);d(this,"config");d(this,"fileSource",null);d(this,"decoder",null);d(this,"audioContext",null);d(this,"audioPlayer",null);d(this,"ownsAudioContext",!1);d(this,"audioInitialized",!1);d(this,"fileInfo",null);d(this,"frameBuffer",[]);d(this,"minBufferSize",3);d(this,"sampleQueue",[]);d(this,"audioSampleQueue",[]);d(this,"nextSampleIndex",0);d(this,"nextAudioSampleIndex",0);d(this,"maxDecoderQueue",10);d(this,"bufferReadyResolve",null);d(this,"playStartTime",0);d(this,"playStartPosition",0);d(this,"currentPosition",0);d(this,"lastVideoFrame",null);d(this,"isSeeking",!1);d(this,"maxAudioBufferMs",2e3);const e=F.playMode??(F.loop?"loop":"once");this.config={preferredDecoder:F.preferredDecoder??"webcodecs-sw",enableAudio:F.enableAudio??!0,debugLogging:F.debugLogging??!1,playMode:e},F.audioContext?(this.audioContext=F.audioContext,this.ownsAudioContext=!1):this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0)}getFileInfo(){return this.fileInfo}getPosition(){return this.currentPosition/1e3}getDuration(){var F;return((F=this.fileInfo)==null?void 0:F.duration)??0}getStats(){var F,e,t,Q;return{duration:this.getDuration(),position:this.getPosition(),bufferSize:this.frameBuffer.length,width:((F=this.fileInfo)==null?void 0:F.width)??0,height:((e=this.fileInfo)==null?void 0:e.height)??0,frameRate:((t=this.fileInfo)==null?void 0:t.frameRate)??0,codec:((Q=this.fileInfo)==null?void 0:Q.videoCodec)??"",state:this._state}}setPlayMode(F){this.config.playMode=F,this.logger.debug(`Play mode set to: ${F}`)}getPlayMode(){return this.config.playMode??"once"}setLoop(F){this.config.playMode=F?"loop":"once"}setDebugLogging(F){this.config.debugLogging=F,super.setDebugLogging(F)}setVolume(F){this.audioPlayer&&this.audioPlayer.setVolume(F)}getVolume(){return 1}async loadFromUrl(F){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:e=>{var t;this.logger.info(`File loaded: ${e.width}x${e.height} @ ${(t=e.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${e.videoCodec}`)},onSamples:e=>{this.handleSamples(e)},onError:e=>{this.logger.error(`File source error: ${e.message}`),this.setState("error"),this.emit("error",e)},onProgress:(e,t)=>{this.emit("progress",e,t)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromUrl(F),await this.initDecoder(),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(e){throw this.setState("error"),this.emit("error",e),e}}async loadFromFile(F){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:e=>{var t;this.logger.info(`File loaded: ${e.width}x${e.height} @ ${(t=e.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${e.videoCodec}`)},onSamples:e=>{this.handleSamples(e)},onError:e=>{this.logger.error(`File source error: ${e.message}`),this.setState("error"),this.emit("error",e)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromFile(F),this.logger.debug(`File info loaded: ${this.fileInfo.width}x${this.fileInfo.height}, ${this.fileInfo.videoCodec}`),await this.initDecoder(),this.logger.debug(`Decoder initialized, sample queue: ${this.sampleQueue.length}`),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(e){throw this.setState("error"),this.emit("error",e),e}}async initDecoder(){if(!this.fileInfo||!this.fileSource)throw new Error("File not loaded");this.decoder=new Hi({preferHardware:this.config.preferredDecoder==="webcodecs-hw",onFrame:e=>{this.handleDecodedFrame(e)},onError:e=>{this.logger.error(`Decoder error: ${e.message}`),this.emit("error",e)}});const F=this.fileSource.getVideoDescription();this.logger.debug(`Video description: ${(F==null?void 0:F.length)??0} bytes`),await this.decoder.configure({codec:this.fileInfo.videoCodec,codedWidth:this.fileInfo.width,codedHeight:this.fileInfo.height,description:F??void 0}),this.logger.info(`Decoder configured: ${this.fileInfo.videoCodec}`),this.config.enableAudio&&this.audioContext&&this.fileInfo.audioCodec&&await this.initAudioDecoder(),this.feedDecoder(),this.feedAudioDecoder()}async initAudioDecoder(){if(!(!this.fileInfo||!this.fileSource||!this.audioContext))try{this.audioPlayer=new Ds(this.audioContext);const F=this.fileSource.getAudioDescription();await this.audioPlayer.init(this.fileInfo.audioCodec,this.fileInfo.audioSampleRate??48e3,this.fileInfo.audioChannels??2,F??void 0),this.audioInitialized=!0,this.logger.info(`Audio decoder configured: ${this.fileInfo.audioCodec}`),this.feedAudioDecoder()}catch(F){this.logger.warn(`Failed to initialize audio: ${F}`),this.audioPlayer=null}}waitForBuffer(){return this.frameBuffer.length>=this.minBufferSize?Promise.resolve():(this.logger.debug(`Waiting for buffer (need ${this.minBufferSize} frames, have ${this.frameBuffer.length})`),new Promise((F,e)=>{this.bufferReadyResolve=F;const t=setTimeout(()=>{this.bufferReadyResolve&&(this.logger.warn(`Buffer timeout - have ${this.frameBuffer.length}/${this.minBufferSize} frames, ${this.sampleQueue.length} samples queued`),this.frameBuffer.length>0?(this.bufferReadyResolve=null,F()):(this.bufferReadyResolve=null,e(new Error("Timeout waiting for frames to decode"))))},5e3),Q=this.bufferReadyResolve;this.bufferReadyResolve=()=>{clearTimeout(t),Q()}}))}handleSamples(F){const e=F.filter(Q=>Q.type==="video").length,t=F.filter(Q=>Q.type==="audio").length;this.logger.debug(`Received ${e} video + ${t} audio samples`);for(const Q of F)Q.type==="video"?this.sampleQueue.push(Q):Q.type==="audio"&&this.audioSampleQueue.push(Q);this.feedDecoder(),this.feedAudioDecoder()}feedDecoder(){if(this.decoder)for(;this.nextSampleIndex<this.sampleQueue.length&&this.decoder.decodeQueueSize<this.maxDecoderQueue;){const F=this.sampleQueue[this.nextSampleIndex];this.decoder.decode({data:F.data,timestamp:F.timestamp,duration:F.duration,isKeyframe:F.isKeyframe}),this.nextSampleIndex++}}feedAudioDecoder(){if(!this.audioPlayer||!this.audioInitialized)return;const F=(this.currentPosition+this.maxAudioBufferMs)*1e3;for(;this.nextAudioSampleIndex<this.audioSampleQueue.length;){const e=this.audioSampleQueue[this.nextAudioSampleIndex];if(e.timestamp>F)break;this.audioPlayer.decode(e.data,e.timestamp,e.duration),this.nextAudioSampleIndex++}}handleDecodedFrame(F){const e=(F.timestamp??0)/1e3,t=(F.duration??0)/1e3,Q={frame:F,timestampMs:e,durationMs:t};let n=!1;for(let s=0;s<this.frameBuffer.length;s++)if(this.frameBuffer[s].timestampMs>e){this.frameBuffer.splice(s,0,Q),n=!0;break}n||this.frameBuffer.push(Q),this.bufferReadyResolve&&this.frameBuffer.length>=this.minBufferSize&&(this.bufferReadyResolve(),this.bufferReadyResolve=null),this.feedDecoder(),this.feedAudioDecoder()}handleSourceEnded(){this.logger.debug("Source ended - all samples extracted")}async performSeamlessLoop(){this.logger.debug("Performing seamless loop"),this.currentPosition=0,this.playStartTime=performance.now(),this.playStartPosition=0;for(const F of this.frameBuffer)F.frame.close();this.frameBuffer=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming()),this.feedDecoder(),this.feedAudioDecoder(),this.emit("loop")}play(){var F,e;this._state==="error"||this._state==="loading"||this._state==="idle"||((F=this.fileSource)==null||F.start(),(e=this.audioPlayer)==null||e.start(),this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition,this.setState("playing"),this.logger.info(`Play from position ${this.currentPosition.toFixed(1)}ms`))}pause(){var F;this._state==="playing"&&((F=this.audioPlayer)==null||F.stop(),this.setState("paused"),this.logger.info(`Paused at position ${this.currentPosition.toFixed(1)}ms`))}async seek(F){var n;if(!this.fileInfo)return;F=Math.max(0,Math.min(F,this.fileInfo.duration));const e=F*1e6;this.logger.info(`Seeking to ${F.toFixed(2)}s`),this.isSeeking=!0,this.clearFrameBuffer(),(n=this.decoder)==null||n.reset(),this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming());let t=0,Q=0;for(let s=0;s<this.sampleQueue.length;s++){const l=this.sampleQueue[s];if(l.timestamp<=e&&l.isKeyframe&&(t=s,Q=l.timestamp),l.timestamp>e)break}this.nextSampleIndex=t,this.currentPosition=Q/1e3,this.nextAudioSampleIndex=0;for(let s=0;s<this.audioSampleQueue.length;s++)if(this.audioSampleQueue[s].timestamp>=Q){this.nextAudioSampleIndex=s;break}this._state==="playing"&&(this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition),this.isSeeking=!1,this.feedDecoder(),this.feedAudioDecoder(),this.emit("seeked",this.currentPosition/1e3)}clearFrameBuffer(){for(const{frame:F}of this.frameBuffer)F.close();this.frameBuffer=[]}getVideoFrame(){var e;if(this._state==="idle"||this._state==="loading"||this._state==="error")return null;if(this.isSeeking)return this.lastVideoFrame;if(this._state==="playing"){const t=performance.now()-this.playStartTime;if(this.currentPosition=this.playStartPosition+t,this.feedAudioDecoder(),this.fileInfo&&this.currentPosition>=this.fileInfo.duration*1e3)return this.config.playMode==="loop"?(this.performSeamlessLoop(),this.lastVideoFrame):(this.setState("ended"),this.emit("ended"),this.lastVideoFrame)}this.frameBuffer.length<this.minBufferSize&&((e=this.fileSource)==null||e.start());let F=-1;for(let t=0;t<this.frameBuffer.length&&this.frameBuffer[t].timestampMs<=this.currentPosition;t++)F=t;if(F>=0){const t=this.frameBuffer.splice(0,F);for(const{frame:n}of t)n.close();const Q=this.frameBuffer.shift();Q&&(this.lastVideoFrame&&this.lastVideoFrame!==Q.frame&&this.lastVideoFrame.close(),this.lastVideoFrame=Q.frame)}return this.lastVideoFrame}on(F,e){super.on(F,e)}off(F,e){super.off(F,e)}dispose(F=!1){var e,t,Q,n;(e=this.fileSource)==null||e.stop(),this.clearFrameBuffer(),this.sampleQueue=[],this.audioSampleQueue=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioInitialized=!1,this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=this.decoder)==null||t.dispose(),this.decoder=null,(Q=this.audioPlayer)==null||Q.dispose(),this.audioPlayer=null,F&&this.ownsAudioContext&&this.audioContext&&(this.audioContext.close(),this.audioContext=null),(n=this.fileSource)==null||n.dispose(),this.fileSource=null,this.fileInfo=null,this.currentPosition=0,this.playStartTime=0,this.playStartPosition=0,this.setState("idle")}}function jr(i={}){return new xs(i)}function bs(i){return new Sn(i)}class Sn extends dn{constructor(F){super();d(this,"config");d(this,"session",null);d(this,"trackTypeMap",new Map);d(this,"connecting",!1);this.config=F;for(const e of F.subscriptions)this.trackTypeMap.set(e.trackName,e.streamType)}async connect(){if(!(this.session||this.connecting)){this.connecting=!0;try{const{MoqSessionSubscriber:F}=await import("stinky-moq-js"),e={relayUrl:this.config.relayUrl,namespace:this.config.namespace,reconnection:{delay:this.config.reconnectionDelay??3e3}},t=this.config.subscriptions.map(Q=>({trackName:Q.trackName,priority:Q.priority??0,retry:{delay:2e3}}));this.session=new F(e,t),this.setupEventListeners(),await this.session.connect(),this._connected=!0,this.emit("connected")}catch(F){this._connected=!1,this.emit("error",F instanceof Error?F:new Error(String(F)))}finally{this.connecting=!1}}}async disconnect(){this.session&&(this.session.dispose(),this.session=null,this._connected=!1,this.emit("disconnected"))}setupEventListeners(){this.session&&(this.session.on("data",(F,e)=>{this.handleIncomingData(F,e)}),this.session.on("error",F=>{this.emit("error",F instanceof Error?F:new Error(String(F)))}),this.session.on("stateChange",F=>{F.state==="disconnected"&&(this._connected=!1,this.emit("disconnected"))}))}handleIncomingData(F,e){const t=this.trackTypeMap.get(F)||"data";if(t==="video"||t==="audio")try{const Q=Rn.parseData(e);if(!Q.valid){console.warn(`Invalid ${t} packet format for track ${F}`);return}const n={trackName:F,streamType:t,data:Q};this.emit("data",n)}catch(Q){console.error(`Failed to parse ${t} packet:`,Q)}else{const Q={trackName:F,streamType:"data",data:{valid:!0,header:null,metadata:null,codec_data:null,payload:e,payload_size:e.length}};this.emit("data",Q)}}dispose(){this.disconnect(),super.dispose()}}const Kr=Object.freeze(Object.defineProperty({__proto__:null,StandaloneMoQSource:Sn,createStandaloneMoQSource:bs},Symbol.toStringTag,{value:"Module"})),Pr=5e3,qr=1e3;class Ms extends dn{constructor(F={}){super();d(this,"webSocket",null);d(this,"messageWaiters",[]);d(this,"requestId",0);d(this,"timeoutCheckInterval",null);d(this,"ignoreCmdsBelow",0);d(this,"isLiveStream",!1);d(this,"config");d(this,"lastKeyframeRequest",0);d(this,"currentTrackName","default");d(this,"reconnectTimeout",null);d(this,"disposed",!1);this.config={url:F.url||"",useCurrentHost:F.useCurrentHost??!0,apiPath:F.apiPath||"/api/video",clientId:F.clientId||"video-player",timeout:F.timeout||Pr,autoReconnect:F.autoReconnect??!1,reconnectDelay:F.reconnectDelay||3e3}}getWebSocketUrl(){if(this.config.url)return this.config.url;if(this.config.useCurrentHost&&typeof window<"u")return`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${this.config.apiPath}?id=${this.config.clientId}`;throw new Error("WebSocket URL not configured. Provide url or enable useCurrentHost.")}async connect(){if(!this._connected)return new Promise((F,e)=>{const t=this.getWebSocketUrl();let Q=!1;try{this.webSocket=new WebSocket(t),this.webSocket.binaryType="arraybuffer",this.startTimeoutChecker(),this.webSocket.onopen=()=>{Q||(Q=!0,this._connected=!0,this.emit("connected"),F())},this.webSocket.onmessage=n=>{this.handleMessage(n)},this.webSocket.onclose=()=>{const n=this._connected;this._connected=!1,Q||(Q=!0,e(new Error("WebSocket connection closed"))),n&&(this.emit("disconnected"),this.handleDisconnect())},this.webSocket.onerror=n=>{Q||(Q=!0,e(new Error("WebSocket connection error"))),this.emit("error",new Error("WebSocket error"))},setTimeout(()=>{var n;Q||(Q=!0,(n=this.webSocket)==null||n.close(),e(new Error("Connection timeout")))},this.config.timeout)}catch(n){e(n)}})}disconnect(){this.stopReconnect(),this.webSocket&&(this.webSocket.close(),this.webSocket=null),this._connected=!1,this.stopTimeoutChecker(),this.clearWaiters()}async loadLive(F){return this.isLiveStream=!0,this.currentTrackName=F,this.ignoreCmdsBelow=this.requestId,this.request({type:"live",filename:F})}async loadFile(F,e){return this.isLiveStream=!1,this.currentTrackName=e,this.ignoreCmdsBelow=this.requestId,this.request({type:"load",filename:e,project:F})}async seek(F){if(this.isLiveStream)throw new Error("Cannot seek in live stream");return this.request({type:"seek",paramNum:F})}async read(F){return this.request({type:"read",paramNum:F})}async unload(){return this.isLiveStream=!1,this.request({type:"unload"})}requestKeyframe(){if(!this.isLiveStream){console.warn("Keyframe request ignored: not a live stream");return}const F=Date.now();F-this.lastKeyframeRequest<qr||(this.lastKeyframeRequest=F,this.request({type:"keyframe"}).catch(()=>{}))}flush(){this.ignoreCmdsBelow=this.requestId}dispose(){this.disposed=!0,this.disconnect(),super.dispose()}async request(F){if(!this._connected||!this.webSocket)throw new Error("Not connected to WebSocket server");return F.id=this.requestId++,this.webSocket.send(JSON.stringify(F)),this.waitForResponse(F.id)}waitForResponse(F){return new Promise((e,t)=>{this.messageWaiters.push({resolve:e,reject:t,id:F,timeout:Date.now()+this.config.timeout})})}handleMessage(F){if(typeof F.data=="string")try{const e=JSON.parse(F.data);this.handleResponse(e)}catch(e){console.error("Failed to parse WebSocket message:",e)}else F.data instanceof ArrayBuffer&&this.handleBinaryData(F.data)}handleResponse(F){if(F.id===-1){F.error&&this.emit("error",new Error(F.error));return}const e=this.messageWaiters.findIndex(t=>t.id===F.id);if(e!==-1){const t=this.messageWaiters[e];this.messageWaiters.splice(e,1),F.error?t.reject(new Error(F.error)):t.resolve(F.data)}}handleBinaryData(F){const e=new Uint8Array(F),t=Rn.parseData(e);if(!t.valid||!t.header){console.warn("Invalid binary packet received");return}if(!this.isLiveStream&&t.header.id!==void 0&&Number(t.header.id)<this.ignoreCmdsBelow)return;let Q="data";t.header.type===_i.VIDEO_FRAME?Q="video":t.header.type===_i.AUDIO_FRAME&&(Q="audio");const n={trackName:this.currentTrackName,streamType:Q,data:t};this.emit("data",n)}handleDisconnect(){this.clearWaiters(),this.config.autoReconnect&&!this.disposed&&this.scheduleReconnect()}scheduleReconnect(){this.stopReconnect(),this.reconnectTimeout=window.setTimeout(async()=>{try{await this.connect(),this.isLiveStream&&this.currentTrackName&&await this.loadLive(this.currentTrackName)}catch{this.scheduleReconnect()}},this.config.reconnectDelay)}stopReconnect(){this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}startTimeoutChecker(){this.stopTimeoutChecker(),this.timeoutCheckInterval=window.setInterval(()=>{const F=Date.now();this.messageWaiters.filter(t=>t.timeout<=F).forEach(t=>{t.reject(new Error("Request timeout"));const Q=this.messageWaiters.indexOf(t);Q!==-1&&this.messageWaiters.splice(Q,1)})},1e3)}stopTimeoutChecker(){this.timeoutCheckInterval!==null&&(clearInterval(this.timeoutCheckInterval),this.timeoutCheckInterval=null)}clearWaiters(){this.messageWaiters.forEach(F=>{F.reject(new Error("Connection closed"))}),this.messageWaiters=[]}}function $r(i){return new Ms(i)}function ys(i){return i instanceof VideoFrame}function UR(i){return!ys(i)&&"y"in i&&"u"in i&&"v"in i}exports.BasePlayer=rn;exports.BaseStreamSource=dn;exports.FileAudioPlayer=Ds;exports.FileVideoPlayer=xs;exports.FrameScheduler=vn;exports.LiveAudioPlayer=_n;exports.LiveVideoPlayer=Hn;exports.MP4FileSource=an;exports.SesameBinaryProtocol=Rn;exports.StandaloneMoQSource=Sn;exports.WasmDecoder=tn;exports.WebCodecsDecoder=Hi;exports.WebSocketSource=Ms;exports.consoleLogger=eU;exports.createFilePlayer=jr;exports.createPlayer=As;exports.createStandaloneMoQSource=bs;exports.createWebSocketSource=$r;exports.isVideoFrame=ys;exports.isYUVFrame=UR;exports.silentLogger=yn;
|
|
234
|
+
`;class Ds{constructor(U,e={}){r(this,"ctx");r(this,"decoder",null);r(this,"workletNode",null);r(this,"gainNode");r(this,"initialized",!1);r(this,"targetSampleRate");r(this,"codecConfig",null);this.ctx=U,this.targetSampleRate=e.sampleRate??U.sampleRate,this.gainNode=this.ctx.createGain()}async init(U,e,F,t){if(this.ctx.audioWorklet===void 0)throw new Error("AudioWorklet not supported - need localhost or HTTPS");if(this.codecConfig={codec:U,sampleRate:e,numberOfChannels:F},t&&(this.codecConfig.description=t),!(await AudioDecoder.isConfigSupported(this.codecConfig)).supported)throw new Error(`Audio codec not supported: ${U}`);this.decoder=new AudioDecoder({output:l=>this.handleDecodedFrame(l),error:l=>{console.error("AudioDecoder error:",l)}}),this.decoder.configure(this.codecConfig);const n=new Blob([Ar],{type:"application/javascript"}),s=URL.createObjectURL(n);try{await this.ctx.audioWorklet.addModule(s)}finally{URL.revokeObjectURL(s)}this.workletNode=new AudioWorkletNode(this.ctx,"audio-play-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],processorOptions:{sampleRate:this.ctx.sampleRate}}),this.workletNode.connect(this.gainNode).connect(this.ctx.destination),this.workletNode.port.postMessage({type:"setSampleRate",sampleRate:this.ctx.sampleRate}),this.initialized=!0}handleDecodedFrame(U){if(!this.workletNode){U.close();return}try{const e=U.numberOfFrames;let F=1;try{U.numberOfChannels>1&&(U.allocationSize({planeIndex:1,frameOffset:0,frameCount:1}),F=U.numberOfChannels)}catch{F=1}const t=new Float32Array(e),Q=new Float32Array(e);if(F===1){const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames});const a=new Float32Array(B);if(U.numberOfChannels===1)t.set(a),Q.set(a);else for(let d=0;d<e;d++)t[d]=a[d*2],Q[d]=a[d*2+1]}else{const l=U.allocationSize({planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),B=new ArrayBuffer(l);if(U.copyTo(B,{planeIndex:0,frameOffset:0,frameCount:U.numberOfFrames}),t.set(new Float32Array(B)),U.numberOfChannels>1){const a=U.allocationSize({planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),d=new ArrayBuffer(a);U.copyTo(d,{planeIndex:1,frameOffset:0,frameCount:U.numberOfFrames}),Q.set(new Float32Array(d))}else Q.set(t)}const n=this.resampleAudio(t,U.sampleRate,this.targetSampleRate),s=this.resampleAudio(Q,U.sampleRate,this.targetSampleRate);this.workletNode.port.postMessage({type:"audioData",data:{left:n.buffer,right:s.buffer}},[n.buffer,s.buffer]),U.close()}catch(e){console.error("Error processing audio frame:",e),U.close()}}resampleAudio(U,e,F){if(e===F)return U;const t=e/F,Q=Math.floor(U.length/t),n=new Float32Array(Q);for(let s=0;s<Q;s++){const l=s*t,B=Math.floor(l),a=Math.min(B+1,U.length-1),d=l-B;n[s]=U[B]*(1-d)+U[a]*d}return n}decode(U,e,F){if(!(!this.initialized||!this.decoder||this.decoder.state!=="configured"))try{const t=new EncodedAudioChunk({type:"key",timestamp:e,duration:F,data:U});this.decoder.decode(t)}catch(t){console.error("Error decoding audio:",t)}}start(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"start"}),this.ctx.resume()}stop(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"stop"})}clear(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}resetTiming(){var U;(U=this.workletNode)==null||U.port.postMessage({type:"clear"})}setVolume(U){this.gainNode.gain.value=Math.max(0,Math.min(1,U))}dispose(){if(this.initialized=!1,this.decoder){try{this.decoder.state==="configured"&&this.decoder.reset(),this.decoder.state!=="closed"&&this.decoder.close()}catch{}this.decoder=null}if(this.workletNode){try{this.workletNode.disconnect()}catch{}this.workletNode=null}}}class xs extends rn{constructor(e={}){super("idle",e.debugLogging??!1);r(this,"config");r(this,"fileSource",null);r(this,"decoder",null);r(this,"audioContext",null);r(this,"audioPlayer",null);r(this,"ownsAudioContext",!1);r(this,"audioInitialized",!1);r(this,"fileInfo",null);r(this,"frameBuffer",[]);r(this,"minBufferSize",3);r(this,"sampleQueue",[]);r(this,"audioSampleQueue",[]);r(this,"nextSampleIndex",0);r(this,"nextAudioSampleIndex",0);r(this,"maxDecoderQueue",10);r(this,"bufferReadyResolve",null);r(this,"playStartTime",0);r(this,"playStartPosition",0);r(this,"currentPosition",0);r(this,"lastVideoFrame",null);r(this,"isSeeking",!1);r(this,"maxAudioBufferMs",2e3);const F=e.playMode??(e.loop?"loop":"once");this.config={preferredDecoder:e.preferredDecoder??"webcodecs-sw",enableAudio:e.enableAudio??!0,debugLogging:e.debugLogging??!1,playMode:F},e.audioContext?(this.audioContext=e.audioContext,this.ownsAudioContext=!1):this.config.enableAudio&&(this.audioContext=new AudioContext,this.ownsAudioContext=!0)}getFileInfo(){return this.fileInfo}getPosition(){return this.currentPosition/1e3}getDuration(){var e;return((e=this.fileInfo)==null?void 0:e.duration)??0}getStats(){var e,F,t,Q;return{duration:this.getDuration(),position:this.getPosition(),bufferSize:this.frameBuffer.length,width:((e=this.fileInfo)==null?void 0:e.width)??0,height:((F=this.fileInfo)==null?void 0:F.height)??0,frameRate:((t=this.fileInfo)==null?void 0:t.frameRate)??0,codec:((Q=this.fileInfo)==null?void 0:Q.videoCodec)??"",state:this._state}}setPlayMode(e){this.config.playMode=e,this.logger.debug(`Play mode set to: ${e}`)}getPlayMode(){return this.config.playMode??"once"}setLoop(e){this.config.playMode=e?"loop":"once"}setDebugLogging(e){this.config.debugLogging=e,super.setDebugLogging(e)}setVolume(e){this.audioPlayer&&this.audioPlayer.setVolume(e)}getVolume(){return 1}async loadFromUrl(e){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:F=>{var t;this.logger.info(`File loaded: ${F.width}x${F.height} @ ${(t=F.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${F.videoCodec}`)},onSamples:F=>{this.handleSamples(F)},onError:F=>{this.logger.error(`File source error: ${F.message}`),this.setState("error"),this.emit("error",F)},onProgress:(F,t)=>{this.emit("progress",F,t)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromUrl(e),await this.initDecoder(),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(F){throw this.setState("error"),this.emit("error",F),F}}async loadFromFile(e){this.setState("loading");try{return this.dispose(),this.fileSource=new an({onReady:F=>{var t;this.logger.info(`File loaded: ${F.width}x${F.height} @ ${(t=F.frameRate)==null?void 0:t.toFixed(1)}fps, codec: ${F.videoCodec}`)},onSamples:F=>{this.handleSamples(F)},onError:F=>{this.logger.error(`File source error: ${F.message}`),this.setState("error"),this.emit("error",F)},onEnded:()=>{this.handleSourceEnded()}}),this.fileInfo=await this.fileSource.loadFromFile(e),this.logger.debug(`File info loaded: ${this.fileInfo.width}x${this.fileInfo.height}, ${this.fileInfo.videoCodec}`),await this.initDecoder(),this.logger.debug(`Decoder initialized, sample queue: ${this.sampleQueue.length}`),await this.waitForBuffer(),this.setState("ready"),this.emit("ready",this.fileInfo),this.fileInfo}catch(F){throw this.setState("error"),this.emit("error",F),F}}async initDecoder(){if(!this.fileInfo||!this.fileSource)throw new Error("File not loaded");this.decoder=new zi({preferHardware:this.config.preferredDecoder==="webcodecs-hw",onFrame:F=>{this.handleDecodedFrame(F)},onError:F=>{this.logger.error(`Decoder error: ${F.message}`),this.emit("error",F)}});const e=this.fileSource.getVideoDescription();this.logger.debug(`Video description: ${(e==null?void 0:e.length)??0} bytes`),await this.decoder.configure({codec:this.fileInfo.videoCodec,codedWidth:this.fileInfo.width,codedHeight:this.fileInfo.height,description:e??void 0}),this.logger.info(`Decoder configured: ${this.fileInfo.videoCodec}`),this.config.enableAudio&&this.audioContext&&this.fileInfo.audioCodec&&await this.initAudioDecoder(),this.feedDecoder(),this.feedAudioDecoder()}async initAudioDecoder(){if(!(!this.fileInfo||!this.fileSource||!this.audioContext))try{this.audioPlayer=new Ds(this.audioContext);const e=this.fileSource.getAudioDescription();await this.audioPlayer.init(this.fileInfo.audioCodec,this.fileInfo.audioSampleRate??48e3,this.fileInfo.audioChannels??2,e??void 0),this.audioInitialized=!0,this.logger.info(`Audio decoder configured: ${this.fileInfo.audioCodec}`),this.feedAudioDecoder()}catch(e){this.logger.warn(`Failed to initialize audio: ${e}`),this.audioPlayer=null}}waitForBuffer(){return this.frameBuffer.length>=this.minBufferSize?Promise.resolve():(this.logger.debug(`Waiting for buffer (need ${this.minBufferSize} frames, have ${this.frameBuffer.length})`),new Promise((e,F)=>{this.bufferReadyResolve=e;const t=setTimeout(()=>{this.bufferReadyResolve&&(this.logger.warn(`Buffer timeout - have ${this.frameBuffer.length}/${this.minBufferSize} frames, ${this.sampleQueue.length} samples queued`),this.frameBuffer.length>0?(this.bufferReadyResolve=null,e()):(this.bufferReadyResolve=null,F(new Error("Timeout waiting for frames to decode"))))},5e3),Q=this.bufferReadyResolve;this.bufferReadyResolve=()=>{clearTimeout(t),Q()}}))}handleSamples(e){const F=e.filter(Q=>Q.type==="video").length,t=e.filter(Q=>Q.type==="audio").length;this.logger.debug(`Received ${F} video + ${t} audio samples`);for(const Q of e)Q.type==="video"?this.sampleQueue.push(Q):Q.type==="audio"&&this.audioSampleQueue.push(Q);this.feedDecoder(),this.feedAudioDecoder()}feedDecoder(){if(this.decoder)for(;this.nextSampleIndex<this.sampleQueue.length&&this.decoder.decodeQueueSize<this.maxDecoderQueue;){const e=this.sampleQueue[this.nextSampleIndex];this.decoder.decode({data:e.data,timestamp:e.timestamp,duration:e.duration,isKeyframe:e.isKeyframe}),this.nextSampleIndex++}}feedAudioDecoder(){if(!this.audioPlayer||!this.audioInitialized)return;const e=(this.currentPosition+this.maxAudioBufferMs)*1e3;for(;this.nextAudioSampleIndex<this.audioSampleQueue.length;){const F=this.audioSampleQueue[this.nextAudioSampleIndex];if(F.timestamp>e)break;this.audioPlayer.decode(F.data,F.timestamp,F.duration),this.nextAudioSampleIndex++}}handleDecodedFrame(e){const F=(e.timestamp??0)/1e3,t=(e.duration??0)/1e3,Q={frame:e,timestampMs:F,durationMs:t};let n=!1;for(let s=0;s<this.frameBuffer.length;s++)if(this.frameBuffer[s].timestampMs>F){this.frameBuffer.splice(s,0,Q),n=!0;break}n||this.frameBuffer.push(Q),this.bufferReadyResolve&&this.frameBuffer.length>=this.minBufferSize&&(this.bufferReadyResolve(),this.bufferReadyResolve=null),this.feedDecoder(),this.feedAudioDecoder()}handleSourceEnded(){this.logger.debug("Source ended - all samples extracted")}async performSeamlessLoop(){this.logger.debug("Performing seamless loop"),this.currentPosition=0,this.playStartTime=performance.now(),this.playStartPosition=0;for(const e of this.frameBuffer)e.frame.close();this.frameBuffer=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming()),this.feedDecoder(),this.feedAudioDecoder(),this.emit("loop")}play(){var e,F;this._state==="error"||this._state==="loading"||this._state==="idle"||((e=this.fileSource)==null||e.start(),(F=this.audioPlayer)==null||F.start(),this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition,this.setState("playing"),this.logger.info(`Play from position ${this.currentPosition.toFixed(1)}ms`))}pause(){var e;this._state==="playing"&&((e=this.audioPlayer)==null||e.stop(),this.setState("paused"),this.logger.info(`Paused at position ${this.currentPosition.toFixed(1)}ms`))}async seek(e){var n;if(!this.fileInfo)return;e=Math.max(0,Math.min(e,this.fileInfo.duration));const F=e*1e6;this.logger.info(`Seeking to ${e.toFixed(2)}s`),this.isSeeking=!0,this.clearFrameBuffer(),(n=this.decoder)==null||n.reset(),this.audioPlayer&&(this.audioPlayer.clear(),this.audioPlayer.resetTiming());let t=0,Q=0;for(let s=0;s<this.sampleQueue.length;s++){const l=this.sampleQueue[s];if(l.timestamp<=F&&l.isKeyframe&&(t=s,Q=l.timestamp),l.timestamp>F)break}this.nextSampleIndex=t,this.currentPosition=Q/1e3,this.nextAudioSampleIndex=0;for(let s=0;s<this.audioSampleQueue.length;s++)if(this.audioSampleQueue[s].timestamp>=Q){this.nextAudioSampleIndex=s;break}this._state==="playing"&&(this.playStartTime=performance.now(),this.playStartPosition=this.currentPosition),this.isSeeking=!1,this.feedDecoder(),this.feedAudioDecoder(),this.emit("seeked",this.currentPosition/1e3)}clearFrameBuffer(){for(const{frame:e}of this.frameBuffer)e.close();this.frameBuffer=[]}getVideoFrame(){var F;if(this._state==="idle"||this._state==="loading"||this._state==="error")return null;if(this.isSeeking)return this.lastVideoFrame;if(this._state==="playing"){const t=performance.now()-this.playStartTime;if(this.currentPosition=this.playStartPosition+t,this.feedAudioDecoder(),this.fileInfo&&this.currentPosition>=this.fileInfo.duration*1e3)return this.config.playMode==="loop"?(this.performSeamlessLoop(),this.lastVideoFrame):(this.setState("ended"),this.emit("ended"),this.lastVideoFrame)}this.frameBuffer.length<this.minBufferSize&&((F=this.fileSource)==null||F.start());let e=-1;for(let t=0;t<this.frameBuffer.length&&this.frameBuffer[t].timestampMs<=this.currentPosition;t++)e=t;if(e>=0){const t=this.frameBuffer.splice(0,e);for(const{frame:n}of t)n.close();const Q=this.frameBuffer.shift();Q&&(this.lastVideoFrame&&this.lastVideoFrame!==Q.frame&&this.lastVideoFrame.close(),this.lastVideoFrame=Q.frame)}return this.lastVideoFrame}on(e,F){super.on(e,F)}off(e,F){super.off(e,F)}dispose(e=!1){var F,t,Q,n;(F=this.fileSource)==null||F.stop(),this.clearFrameBuffer(),this.sampleQueue=[],this.audioSampleQueue=[],this.nextSampleIndex=0,this.nextAudioSampleIndex=0,this.audioInitialized=!1,this.lastVideoFrame&&(this.lastVideoFrame.close(),this.lastVideoFrame=null),(t=this.decoder)==null||t.dispose(),this.decoder=null,(Q=this.audioPlayer)==null||Q.dispose(),this.audioPlayer=null,e&&this.ownsAudioContext&&this.audioContext&&(this.audioContext.close(),this.audioContext=null),(n=this.fileSource)==null||n.dispose(),this.fileSource=null,this.fileInfo=null,this.currentPosition=0,this.playStartTime=0,this.playStartPosition=0,this.setState("idle")}}function jr(i={}){return new xs(i)}function bs(i){return new Sn(i)}class Sn extends dn{constructor(e){super();r(this,"config");r(this,"session",null);r(this,"trackTypeMap",new Map);r(this,"connecting",!1);this.config=e;for(const F of e.subscriptions)this.trackTypeMap.set(F.trackName,F.streamType)}async connect(){if(!(this.session||this.connecting)){this.connecting=!0;try{const{MoqSessionSubscriber:e}=await import("stinky-moq-js"),F={relayUrl:this.config.relayUrl,namespace:this.config.namespace,reconnection:{delay:this.config.reconnectionDelay??3e3}},t=this.config.subscriptions.map(Q=>({trackName:Q.trackName,priority:Q.priority??0,retry:{delay:2e3}}));this.session=new e(F,t),this.setupEventListeners(),await this.session.connect(),this._connected=!0,this.emit("connected")}catch(e){this._connected=!1,this.emit("error",e instanceof Error?e:new Error(String(e)))}finally{this.connecting=!1}}}async disconnect(){this.session&&(this.session.dispose(),this.session=null,this._connected=!1,this.emit("disconnected"))}setupEventListeners(){this.session&&(this.session.on("data",(e,F)=>{this.handleIncomingData(e,F)}),this.session.on("error",e=>{this.emit("error",e instanceof Error?e:new Error(String(e)))}),this.session.on("stateChange",e=>{e.state==="disconnected"&&(this._connected=!1,this.emit("disconnected"))}))}handleIncomingData(e,F){const t=this.trackTypeMap.get(e)||"data";if(t==="video"||t==="audio")try{const Q=Rn.parseData(F);if(!Q.valid){console.warn(`Invalid ${t} packet format for track ${e}`);return}const n={trackName:e,streamType:t,data:Q};this.emit("data",n)}catch(Q){console.error(`Failed to parse ${t} packet:`,Q)}else{const Q={trackName:e,streamType:"data",data:{valid:!0,header:null,metadata:null,codec_data:null,payload:F,payload_size:F.length}};this.emit("data",Q)}}dispose(){this.disconnect(),super.dispose()}}const Kr=Object.freeze(Object.defineProperty({__proto__:null,StandaloneMoQSource:Sn,createStandaloneMoQSource:bs},Symbol.toStringTag,{value:"Module"})),Pr=5e3,qr=1e3;class Ms extends dn{constructor(e={}){super();r(this,"webSocket",null);r(this,"messageWaiters",[]);r(this,"requestId",0);r(this,"timeoutCheckInterval",null);r(this,"ignoreCmdsBelow",0);r(this,"isLiveStream",!1);r(this,"config");r(this,"lastKeyframeRequest",0);r(this,"currentTrackName","default");r(this,"reconnectTimeout",null);r(this,"disposed",!1);this.config={url:e.url||"",useCurrentHost:e.useCurrentHost??!0,apiPath:e.apiPath||"/api/video",clientId:e.clientId||"video-player",timeout:e.timeout||Pr,autoReconnect:e.autoReconnect??!1,reconnectDelay:e.reconnectDelay||3e3}}getWebSocketUrl(){if(this.config.url)return this.config.url;if(this.config.useCurrentHost&&typeof window<"u")return`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${this.config.apiPath}?id=${this.config.clientId}`;throw new Error("WebSocket URL not configured. Provide url or enable useCurrentHost.")}async connect(){if(!this._connected)return new Promise((e,F)=>{const t=this.getWebSocketUrl();let Q=!1;try{this.webSocket=new WebSocket(t),this.webSocket.binaryType="arraybuffer",this.startTimeoutChecker(),this.webSocket.onopen=()=>{Q||(Q=!0,this._connected=!0,this.emit("connected"),e())},this.webSocket.onmessage=n=>{this.handleMessage(n)},this.webSocket.onclose=()=>{const n=this._connected;this._connected=!1,Q||(Q=!0,F(new Error("WebSocket connection closed"))),n&&(this.emit("disconnected"),this.handleDisconnect())},this.webSocket.onerror=n=>{Q||(Q=!0,F(new Error("WebSocket connection error"))),this.emit("error",new Error("WebSocket error"))},setTimeout(()=>{var n;Q||(Q=!0,(n=this.webSocket)==null||n.close(),F(new Error("Connection timeout")))},this.config.timeout)}catch(n){F(n)}})}disconnect(){this.stopReconnect(),this.webSocket&&(this.webSocket.close(),this.webSocket=null),this._connected=!1,this.stopTimeoutChecker(),this.clearWaiters()}async loadLive(e){return this.isLiveStream=!0,this.currentTrackName=e,this.ignoreCmdsBelow=this.requestId,this.request({type:"live",filename:e})}async loadFile(e,F){return this.isLiveStream=!1,this.currentTrackName=F,this.ignoreCmdsBelow=this.requestId,this.request({type:"load",filename:F,project:e})}async seek(e){if(this.isLiveStream)throw new Error("Cannot seek in live stream");return this.request({type:"seek",paramNum:e})}async read(e){return this.request({type:"read",paramNum:e})}async unload(){return this.isLiveStream=!1,this.request({type:"unload"})}requestKeyframe(){if(!this.isLiveStream){console.warn("Keyframe request ignored: not a live stream");return}const e=Date.now();e-this.lastKeyframeRequest<qr||(this.lastKeyframeRequest=e,this.request({type:"keyframe"}).catch(()=>{}))}flush(){this.ignoreCmdsBelow=this.requestId}dispose(){this.disposed=!0,this.disconnect(),super.dispose()}async request(e){if(!this._connected||!this.webSocket)throw new Error("Not connected to WebSocket server");return e.id=this.requestId++,this.webSocket.send(JSON.stringify(e)),this.waitForResponse(e.id)}waitForResponse(e){return new Promise((F,t)=>{this.messageWaiters.push({resolve:F,reject:t,id:e,timeout:Date.now()+this.config.timeout})})}handleMessage(e){if(typeof e.data=="string")try{const F=JSON.parse(e.data);this.handleResponse(F)}catch(F){console.error("Failed to parse WebSocket message:",F)}else e.data instanceof ArrayBuffer&&this.handleBinaryData(e.data)}handleResponse(e){if(e.id===-1){e.error&&this.emit("error",new Error(e.error));return}const F=this.messageWaiters.findIndex(t=>t.id===e.id);if(F!==-1){const t=this.messageWaiters[F];this.messageWaiters.splice(F,1),e.error?t.reject(new Error(e.error)):t.resolve(e.data)}}handleBinaryData(e){const F=new Uint8Array(e),t=Rn.parseData(F);if(!t.valid||!t.header){console.warn("Invalid binary packet received");return}if(!this.isLiveStream&&t.header.id!==void 0&&Number(t.header.id)<this.ignoreCmdsBelow)return;let Q="data";t.header.type===_i.VIDEO_FRAME?Q="video":t.header.type===_i.AUDIO_FRAME&&(Q="audio");const n={trackName:this.currentTrackName,streamType:Q,data:t};this.emit("data",n)}handleDisconnect(){this.clearWaiters(),this.config.autoReconnect&&!this.disposed&&this.scheduleReconnect()}scheduleReconnect(){this.stopReconnect(),this.reconnectTimeout=window.setTimeout(async()=>{try{await this.connect(),this.isLiveStream&&this.currentTrackName&&await this.loadLive(this.currentTrackName)}catch{this.scheduleReconnect()}},this.config.reconnectDelay)}stopReconnect(){this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}startTimeoutChecker(){this.stopTimeoutChecker(),this.timeoutCheckInterval=window.setInterval(()=>{const e=Date.now();this.messageWaiters.filter(t=>t.timeout<=e).forEach(t=>{t.reject(new Error("Request timeout"));const Q=this.messageWaiters.indexOf(t);Q!==-1&&this.messageWaiters.splice(Q,1)})},1e3)}stopTimeoutChecker(){this.timeoutCheckInterval!==null&&(clearInterval(this.timeoutCheckInterval),this.timeoutCheckInterval=null)}clearWaiters(){this.messageWaiters.forEach(e=>{e.reject(new Error("Connection closed"))}),this.messageWaiters=[]}}function $r(i){return new Ms(i)}function ys(i){return i instanceof VideoFrame}function UR(i){return!ys(i)&&"y"in i&&"u"in i&&"v"in i}exports.BasePlayer=rn;exports.BaseStreamSource=dn;exports.FileAudioPlayer=Ds;exports.FileVideoPlayer=xs;exports.FrameScheduler=vn;exports.LiveAudioPlayer=_n;exports.LiveVideoPlayer=zn;exports.MP4FileSource=an;exports.SesameBinaryProtocol=Rn;exports.StandaloneMoQSource=Sn;exports.WasmDecoder=tn;exports.WebCodecsDecoder=zi;exports.WebSocketSource=Ms;exports.consoleLogger=FU;exports.createFilePlayer=jr;exports.createPlayer=As;exports.createStandaloneMoQSource=bs;exports.createWebSocketSource=$r;exports.isVideoFrame=ys;exports.isYUVFrame=UR;exports.silentLogger=yn;
|