UNPKG

geos.js

Version:

an easy-to-use JavaScript wrapper over WebAssembly build of GEOS

1 lines 1.43 MB
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).geos={})}(this,function(A){"use strict";const I=Symbol("ptr"),g=Symbol("finalization_registry"),C=Symbol("cleanup"),Q=Symbol("prepared:ptr"),B=Symbol("prepared:finalization_registry"),E=Symbol("prepared:cleanup");class D{constructor(A,g){this[I]=A>>>=0,this.i4=A/4,this.l=g,this.l4=g/4}freeIfTmp(){this!==y.buff&&y.free(this[I])}}class w{constructor(A){this[I]=A>>>=0,this.i=A/4}get(){return y.U32[this.i]}set(A){y.U32[this.i]=A}}class M{constructor(A){this[I]=A>>>=0,this.i=A/8}get(){return y.F64[this.i]}set(A){y.F64[this.i]=A}}class i extends Error{constructor(A){super(A),this.name="GEOSError"}}class G{updateMemory(){const A=this.memory.buffer;this.U8=new Uint8Array(A),this.U32=new Uint32Array(A),this.F64=new Float64Array(A)}buffByL(A){let{buff:I}=this;if(A>I.l){const g=this.malloc(A);I=new D(g,A)}return I}buffByL4(A){let{buff:I}=this;if(A>I.l4){const g=4*A,C=this.malloc(g);I=new D(C,g)}return I}encodeString(A){const g=A.length,C=this.buffByL(g+1),Q=C[I],B=this.U8.subarray(Q,Q+g+1);if(this.te.encodeInto(A,B).written!==g)throw new i("Unexpected string encoding result");return B[g]=0,C}decodeString(A){const I=A>>>0,g=this.U8;let C=I;for(;g[C];)C++;return this.td.decode(g.subarray(I,C))}addFunction(A,I){let g=this.functionsInTableMap.get(A);if(g)return g;g=this.freeTableIndexes.length?this.freeTableIndexes.pop():this.table.grow(1);const C=K(A,I);return this.table.set(g,C),this.functionsInTableMap.set(A,g),g}removeFunction(A){const I=this.functionsInTableMap.get(A);I&&(this.table.set(I,null),this.functionsInTableMap.delete(this.table.get(I)),this.freeTableIndexes.push(I))}constructor(A){this.td=new TextDecoder,this.te=new TextEncoder,this.functionsInTableMap=new Map,this.freeTableIndexes=[],this.t_r={},this.t_w={},this.b_r={},this.b_w={},this.b_p={},this.m_v={},this.onGEOSError=(A,I)=>{const g=this.decodeString(A),C=new i(g),Q=g.indexOf(": ");throw Q>0&&(C.name=`${C.name}::${g.slice(0,Q)}`,C.message=g.slice(Q+2)),C};const{memory:I,__indirect_function_table:g,...C}=A.exports;this.memory=I,this.updateMemory(),this.table=g,C._initialize();const Q=C.GEOS_init_r();C.GEOSContext_setErrorMessageHandler_r(Q,this.addFunction(this.onGEOSError,"vpp"),0);for(const A in C)A.endsWith("_r")?this[A.slice(0,-2)]=C[A].bind(null,Q):this[A]=C[A];let B=C.malloc(4136);this.buff=new D(B,4096),this.u1=new w(B+=4096),this.u2=new w(B+=4),this.f1=new M(B+=4),this.f2=new M(B+=8),this.f3=new M(B+=8),this.f4=new M(B+8)}}const K=(A,I)=>{const g=[1,96],C=I.slice(0,1),Q=I.slice(1),B={i:127,p:127,j:126,f:125,d:124};o(Q.length,g);for(const A of Q)g.push(B[A]);"v"===C?g.push(0):g.push(1,B[C]);const E=[0,97,115,109,1,0,0,0,1];o(g.length,E),E.push(...g),E.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);const D=new WebAssembly.Module(new Uint8Array(E));return new WebAssembly.Instance(D,{e:{f:A}}).exports.f},o=(A,I)=>{A<128?I.push(A):I.push(A%128|128,A>>7)},k={env:{emscripten_notify_memory_growth(){const A=256-y.memory.buffer.byteLength/65536%256;y.memory.grow(A),y.updateMemory()}},wasi_snapshot_preview1:{random_get:(A,I)=>(crypto.getRandomValues(y.U8.subarray(A>>>=0,A+I>>>0)),0)}},N=new Proxy({},{get(A,I){if(I.endsWith("destroy"))return()=>0;throw new i("GEOS.js not initialized")}});let y=N;async function S(A){let I,g;return A instanceof WebAssembly.Module?(I=A,g=await WebAssembly.instantiate(A,k)):({module:I,instance:g}=await WebAssembly.instantiateStreaming(A,k)),y=new G(g),I}const F={XY:{P:(A,I)=>[A[I],A[I+1]],C:(A,I,g,C,Q)=>{const B=3+Q,E=Array(I);for(let C=0;C<I;C++,g+=B)E[C]=[A[g],A[g+1]];return E}},XYZ:{P:(A,I,g)=>g?[A[I],A[I+1],A[I+2]]:[A[I],A[I+1]],C:(A,I,g,C,Q)=>{const B=3+Q,E=Array(I);for(let Q=0;Q<I;Q++,g+=B)E[Q]=C?[A[g],A[g+1],A[g+2]]:[A[g],A[g+1]];return E}},XYZM:{P:(A,I,g,C)=>C?[A[I],A[I+1],A[I+2],A[I+3]]:g?[A[I],A[I+1],A[I+2]]:[A[I],A[I+1]],C:(A,I,g,C,Q)=>{const B=3+Q,E=Array(I);for(let D=0;D<I;D++,g+=B)E[D]=Q?[A[g],A[g+1],A[g+2],A[g+3]]:C?[A[g],A[g+1],A[g+2]]:[A[g],A[g+1]];return E}},XYM:{P:(A,I,g,C)=>C?[A[I],A[I+1],A[I+3]]:[A[I],A[I+1]],C:(A,I,g,C,Q)=>{const B=3+Q,E=Array(I);for(let C=0;C<I;C++,g+=B)E[C]=Q?[A[g],A[g+1],A[g+3]]:[A[g],A[g+1]];return E}}},s=(A,I,g)=>{const{B:C,F:Q}=A,B=C[A.b++],E=15&B,D=16&B,w=B>>5&1,M=B>>6&1;if(g||E<8){if(D&&E<9&&7!==E)return{type:J[2===E?1:E],coordinates:[]};switch(E){case 0:{const g=I.P(Q,A.f,w,M);return A.f+=M?4:w?3:2,{type:J[E],coordinates:g}}case 4:{const g=C[A.b++],B=Array(g),D=M?4:w?3:2;for(let C=0;C<g;C++,A.f+=D)B[C]=I.P(Q,A.f,w,M);return{type:J[E],coordinates:B}}case 1:case 2:case 8:{const g=I.C(Q,C[A.b++],C[A.b++],w,M);return{type:J[2===E?1:E],coordinates:g}}case 3:case 5:{const g=C[A.b++],B=Array(g);for(let E=0;E<g;E++)B[E]=I.C(Q,C[A.b++],C[A.b++],w,M);return{type:J[E],coordinates:B}}case 6:{const g=C[A.b++],B=Array(g);for(let E=0;E<g;E++){const g=C[A.b++],D=B[E]=Array(g);for(let B=0;B<g;B++)D[B]=I.C(Q,C[A.b++],C[A.b++],w,M)}return{type:J[E],coordinates:B}}case 7:case 9:case 10:case 11:case 12:{const Q=D?0:C[A.b++],B=Array(Q);for(let C=0;C<Q;C++)B[C]=s(A,I,g);const w=J[E],M=a[w];return{type:w,[M]:B}}}}throw new i(`${J[E]} is not standard GeoJSON geometry. Use 'extended' flavor to jsonify all geometry types.`)};function R(A,g,C){const Q=F[g||"XYZ"],B=y.buff;let E;try{let g=y.U32,D=B.i4,w=D;g[D++]=0,g[D++]=1,g[D++]=A[I],g[D]=B.l4-3,y.jsonify_geoms(B[I]),g=y.U32;const M={B:g,b:D,F:y.F64,f:g[w+1]};return E=g[w],E&&(M.b=E/4),s(M,Q,C)}finally{E&&y.free(E)}}function Y(A,g,C){const Q=F[g||"XYZ"],B=A.length,E=B+3,D=y.buffByL4(E);let w;try{let g=y.U32,M=D.i4,i=M;g[M++]=0,g[M++]=B;for(const C of A)g[M++]=C[I];g[M]=D.l4-E,y.jsonify_geoms(D[I]),g=y.U32;const G={B:g,b:M,F:y.F64,f:g[i+1]};w=g[i],w&&(G.b=w/4);const K=Array(B);for(let I=0;I<B;I++){const g=A[I];K[I]=U(g,s(G,Q,C))}return K}finally{D.freeIfTmp(),w&&y.free(w)}}function U(A,I){return{id:A.id,type:"Feature",geometry:I,properties:A.props??null}}var h,c;const J=["Point","LineString","LinearRing","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection","CircularString","CompoundCurve","CurvePolygon","MultiCurve","MultiSurface"],L=J.reduce((A,I,g)=>(A[I]=g,A),{}),a={[J[7]]:"geometries",[J[9]]:"segments",[J[10]]:"rings",[J[11]]:"curves",[J[12]]:"surfaces"};class H{normalize(){return y.GEOSNormalize(this[I]),this}orientPolygons(A="cw"){return y.GEOSOrientPolygons(this[I],+("cw"===A)),this}clone(){const A=y.GEOSGeom_clone(this[I]),g=new H(A);return null!=this.id&&(g.id=this.id),null!=this.props&&(g.props=this.props),g}toJSON(){return U(this,R(this,"XYZM",!0))}free(){this[Q]&&(H[B].unregister(this),H[E](this[Q])),H[g].unregister(this),H[C](this[I]),this.detached=!0}constructor(A,C,Q){H[g].register(this,A,this),this[I]=A,this.type=C||J[y.GEOSGeomTypeId(A)],Q&&(null!=Q.id&&(this.id=Q.id),null!=Q.properties&&(this.props=Q.properties))}static[(h=g,c=B,C)](A){y.GEOSGeom_destroy(A)}static[E](A){y.GEOSPreparedGeom_destroy(A)}}function x(A){if(!A[Q]){const g=y.GEOSPrepare(A[I]);H[B].register(A,g,A),A[Q]=g}return A}H[h]=new FinalizationRegistry(H[C]),H[c]=new FinalizationRegistry(H[E]);const r={XY:{L:()=>2,H:A=>L[A],P:(A,I,g)=>(I[g++]=A[0],I[g++]=A[1],g),C:(A,I,g)=>{for(const C of A)I[g++]=C[0],I[g++]=C[1],I[g++]=NaN}},XYZ:{L:A=>A>2?3:2,H:(A,I)=>{const g=I?.length;return L[A]|(g>2?32:0)},P:(A,I,g,C)=>(I[g++]=A[0],I[g++]=A[1],C>2&&(I[g++]=A[2]),g),C:(A,I,g,C)=>{const Q=C>2;for(const C of A)I[g++]=C[0],I[g++]=C[1],I[g++]=Q?C[2]:NaN}},XYZM:{L:A=>A>2?A>3?4:3:2,H:(A,I)=>{const g=I?.length;return L[A]|(g>2?32:0)|(g>3?64:0)},P:(A,I,g,C)=>(I[g++]=A[0],I[g++]=A[1],C>2&&(I[g++]=A[2],C>3&&(I[g++]=A[3])),g),C:(A,I,g,C)=>{const Q=C>2,B=C>3;for(const C of A)I[g++]=C[0],I[g++]=C[1],I[g++]=Q?C[2]:NaN,B&&(I[g++]=C[3])}},XYM:{L:A=>A>2?4:2,H:(A,I)=>{const g=I?.length;return L[A]|(g>2?64:0)},P:(A,I,g,C)=>(I[g++]=A[0],I[g++]=A[1],C>2&&(I[g++]=NaN,I[g++]=A[2]),g),C:(A,I,g,C)=>{const Q=C>2;for(const C of A)I[g++]=C[0],I[g++]=C[1],I[g++]=NaN,Q&&(I[g++]=C[2])}}};class p extends i{constructor(A,I,g){super(I),this.name="InvalidGeoJSONError",this.details=g,this.geometry=A}}const Z=(A,I,g,C)=>new p(A,`${C} must have at leat ${I} points`,`found ${g}`),q=(A,I,g,C)=>new p(A,C?`${C} ring must be closed`:`${A.type} segments must be continuous`,`points [${I.join()}] and [${g.join()}] are not equal`),d=(A,I,g,C="component")=>new p(A,`${A.type} ${C} must be ${g.map(A=>J[A]).join(", ").replace(/,( \w+)$/," or$1")}`,`"${J[I]}" is not allowed`),t=(A,I)=>{if(A.length!==I.length)return!0;for(let g=0;g<A.length;g++)if(A[g]!==I[g])return!0},O=(A,I)=>{const g=I.length;if(1===g)throw Z(A,2,g,"LineString")},j=(A,I)=>{for(const g of I){const I=g.length;if(I){if(I<3)throw Z(A,3,I,"Polygon ring");if(t(g[0],g[I-1]))throw q(A,g[0],g[I-1],"Polygon")}}},z=(A,I,g)=>{switch(A?.type){case"Point":{const C=A.coordinates,Q=g.L(C.length);return I.f+=Q,I.d+=1,0}case"MultiPoint":{const C=A.coordinates,Q=g.L(C[0]?.length);return I.f+=C.length*Q,I.d+=2,4}case"LineString":return O(A,A.coordinates),I.s+=1,I.d+=2,1;case"Polygon":{const g=A.coordinates,C=g.length;return j(A,g),I.s+=C,I.d+=2+C,3}case"MultiLineString":{const g=A.coordinates,C=g.length;for(const I of g)O(A,I);return I.s+=C,I.d+=2+C,5}case"MultiPolygon":{const g=A.coordinates;I.d+=2+g.length;for(const C of g){const g=C.length;j(A,C),I.s+=g,I.d+=g}return 6}case"GeometryCollection":{const C=A.geometries;for(const A of C)z(A,I,g);return I.d+=2,7}case"CircularString":{const g=A.coordinates.length;if(g){if(g<3)throw new p(A,`${A.type} must have at least one circular arc defined by 3 points`);if(!(g%2))throw new p(A,`${A.type} must have and odd number of points`)}return I.s+=1,I.d+=2,8}case"CompoundCurve":{const C=A.segments;if(C.length){let Q;for(const B of C){const C=z(B,I,g);if(1!==C&&8!==C)throw d(A,C,[1,8],"segment");const E=B.coordinates;if(!E.length)throw new p(A,`${A.type} cannot contain empty segments`);if(Q&&t(Q,E[0]))throw q(A,Q,E[0]);Q=E[E.length-1]}}return I.d+=2,9}case"CurvePolygon":{const C=A.rings;if(C.length)for(const Q of C){let C,B,E;const D=z(Q,I,g);if(1===D||8===D)C=Q.coordinates,B=C[0],E=C[C.length-1];else{if(9!==D)throw d(A,D,[1,8,9],"ring");{const A=Q.segments;B=A[0].coordinates[0],C=A[A.length-1].coordinates,E=C[C.length-1]}}if(B&&E&&t(B,E))throw q(A,B,E,A.type)}return I.d+=2,10}case"MultiCurve":{const C=A.curves;for(const Q of C){const C=z(Q,I,g);if(1!==C&&8!==C&&9!==C)throw d(A,C,[1,8,9])}return I.d+=2,11}case"MultiSurface":{const C=A.surfaces;for(const Q of C){const C=z(Q,I,g);if(3!==C&&10!==C)throw d(A,C,[3,10])}return I.d+=2,12}}throw new p(A,"Invalid geometry")},P=(A,I,g)=>{const{B:C,F:Q}=I;let{d:B,f:E}=I;const D=A.type;switch(D){case"Point":{const I=A.coordinates;I.length?(C[B++]=g.H(D,I),E=g.P(I,Q,E,I.length)):C[B++]=16;break}case"MultiPoint":{const I=A.coordinates,w=I[0]?.length;C[B++]=g.H(D,I[0]),C[B++]=I.length;for(const A of I)E=g.P(A,Q,E,w);break}case"LineString":case"CircularString":{const I=A.coordinates;C[B++]=g.H(D,I[0]),C[B++]=I.length;break}case"Polygon":case"MultiLineString":{const I=A.coordinates;C[B++]=g.H(D,I[0]?.[0]),C[B++]=I.length;for(const A of I)C[B++]=A.length;break}case"MultiPolygon":{const I=A.coordinates;C[B++]=g.H(D,I[0]?.[0]?.[0]),C[B++]=I.length;for(const A of I){C[B++]=A.length;for(const I of A)C[B++]=I.length}break}case"GeometryCollection":case"CompoundCurve":case"CurvePolygon":case"MultiCurve":case"MultiSurface":{const Q=A[a[D]];C[I.d++]=L[D],C[I.d++]=Q.length;for(const A of Q)P(A,I,g);return}}I.f=E,I.d=B},W=(A,I,g)=>{const{B:C,F:Q}=I;switch(A.type){case"LineString":case"CircularString":{const B=A.coordinates;g.C(B,Q,C[I.s++],B[0]?.length);break}case"Polygon":case"MultiLineString":{const B=A.coordinates,E=B[0]?.[0]?.length;for(const A of B)g.C(A,Q,C[I.s++],E);break}case"MultiPolygon":{const B=A.coordinates,E=B[0]?.[0]?.[0]?.length;for(const A of B)for(const B of A)g.C(B,Q,C[I.s++],E);break}case"GeometryCollection":case"CompoundCurve":case"CurvePolygon":case"MultiCurve":case"MultiSurface":{const C=A[a[A.type]];for(const A of C)W(A,I,g)}}};function V(A,g,C){const Q=r[g||"XYZM"],B={d:0,s:0,f:0};z(A,B,Q);const E=y.buffByL4(3+B.d+B.s+2*B.f);try{let g,D,w=y.U32,M=E.i4;w[M++]=B.d,w[M++]=B.s,g=M+B.d,D=Math.ceil((g+B.s)/2);const i={B:w,d:M,F:y.F64,f:D};if(P(A,i,Q),B.s){y.geosify_geomsCoords(E[I]);const C={B:y.U32,s:g,F:y.F64};W(A,C,Q)}return y.geosify_geoms(E[I]),w=y.U32,new H(w[M],A.type,C)}finally{E.freeIfTmp()}}function b(A,I){return V({type:"Polygon",coordinates:A},I?.layout,I)}const f=A=>A.length&&Array.isArray(A[0]),T=(A,I)=>{for(const g of A)if(!(I&1<<L[g.type])){const A=[];for(let g=0,C=I;C;g++,C>>>=1)1&C&&A.push(J[g]);throw new i(`Geometry must be ${A.join(", ").replace(/,( \w+)$/," or$1")}. ${g.type} is not allowed`)}},n=(A,C,Q)=>{let B=y.U32,E=A.i4;if(Q?.consume)for(const A of C)B[E++]=A[I],H[g].unregister(A),A.detached=!0;else for(const A of C)B[E++]=y.GEOSGeom_clone(A[I])},l=(A,g,C)=>{const Q=g.length,B=y.buffByL4(Q);try{n(B,g,C);const E=y.GEOSGeom_createCollection(A,B[I],Q);return new H(E,J[A],C)}finally{B.freeIfTmp()}};function m(A){return Boolean(y.GEOSisEmpty(A[I]))}class X extends i{constructor(A,I){super(A),this.name="TopologyValidationError",this.location=I}}var e;class u{query(A){const g=y.u1,C=y.STRtree_query(this[I],A[I],g[I]);return v(this.geometries,C,g)}nearest(A){const g=y.u1,C=y.STRtree_nearest(this[I],A[I],g[I]);if(g.get())return this.geometries[C]}nearestAll(A){const g=y.u1,C=y.STRtree_nearestAll(this[I],A[I],g[I]);return v(this.geometries,C,g)}free(){u[g].unregister(this),u[C](this[I]),this.detached=!0}constructor(A,C){u[g].register(this,A,this),this[I]=A,this.geometries=C}static[(e=g,C)](A){y.STRtree_destroy(A)}}function v(A,I,g){if(I){const C=g.get(),Q=Array(C);let B=y.U32,E=I>>>2;for(let I=0;I<C;I++)Q[I]=A[B[E++]];return y.free(I),Q}return[]}u[e]=new FinalizationRegistry(u[C]),A.GEOSError=i,A.InvalidGeoJSONError=p,A.TopologyValidationError=X,A.area=function(A){const g=y.f1;return y.GEOSArea(A[I],g[I]),g.get()},A.bounds=function(A){const g=y.f1,C=y.f2,Q=y.f3,B=y.f4;if(y.GEOSGeom_getExtent(A[I],g[I],C[I],Q[I],B[I]))return[g.get(),C.get(),Q.get(),B.get()];throw new i("Cannot calculate bounds of an empty geometry")},A.box=function(A,I){const[g,C,Q,B]=A;if(g===Q||C===B)throw new i("Degenerate box");return b([[[g,C],[g,B],[Q,B],[Q,C],[g,C]]],I)},A.buffer=function(A,g,C){const Q=y.b_p,B=C?[C.quadrantSegments,C.endCapStyle,C.joinStyle,C.mitreLimit,C.singleSided].join():"";let E=Q[B];if(!E){const A=y.GEOSBufferParams_create();if(C){const{quadrantSegments:I,endCapStyle:g,joinStyle:Q,mitreLimit:B,singleSided:E}=C;if(null!=I&&y.GEOSBufferParams_setQuadrantSegments(A,I),null!=g){const I={round:1,flat:2,square:3};y.GEOSBufferParams_setEndCapStyle(A,I[g])}if(null!=Q){const I={round:1,mitre:2,bevel:3};y.GEOSBufferParams_setJoinStyle(A,I[Q])}null!=B&&y.GEOSBufferParams_setMitreLimit(A,B),null!=E&&y.GEOSBufferParams_setSingleSided(A,+E)}E=Q[B]=A}const D=y.GEOSBufferWithParams(A[I],E,g);return new H(D)},A.circularString=function(A,I){return V({type:"CircularString",coordinates:A},I?.layout,I)},A.compoundCurve=function(A,g){T(A,258);const C=A.length,Q=y.buffByL4(C);try{n(Q,A,g);const B=C?y.GEOSGeom_createCompoundCurve(Q[I],C):y.GEOSGeom_createEmptyCompoundCurve();return new H(B,"CompoundCurve",g)}finally{Q.freeIfTmp()}},A.contains=function(A,g){return Boolean(A[Q]?y.GEOSPreparedContains(A[Q],g[I]):y.GEOSContains(A[I],g[I]))},A.containsProperly=function(A,g){return A[Q]||x(A),Boolean(y.GEOSPreparedContainsProperly(A[Q],g[I]))},A.coveredBy=function(A,g){return Boolean(A[Q]?y.GEOSPreparedCoveredBy(A[Q],g[I]):y.GEOSCoveredBy(A[I],g[I]))},A.covers=function(A,g){return Boolean(A[Q]?y.GEOSPreparedCovers(A[Q],g[I]):y.GEOSCovers(A[I],g[I]))},A.crosses=function(A,g){return Boolean(A[Q]?y.GEOSPreparedCrosses(A[Q],g[I]):y.GEOSCrosses(A[I],g[I]))},A.curvePolygon=function(A,g){T(A,770);const C=A.length,Q=y.buffByL4(C);try{n(Q,A,g);const B=C?y.GEOSGeom_createCurvePolygon(y.U32[Q.i4],Q[I]+4,C-1):y.GEOSGeom_createEmptyCurvePolygon();return new H(B,"CurvePolygon",g)}finally{Q.freeIfTmp()}},A.difference=function(A,g,C){const Q=null!=C?.gridSize?y.GEOSDifferencePrec(A[I],g[I],C.gridSize):y.GEOSDifference(A[I],g[I]);return new H(Q)},A.disjoint=function(A,g){return Boolean(A[Q]?y.GEOSPreparedDisjoint(A[Q],g[I]):y.GEOSDisjoint(A[I],g[I]))},A.distance=function(A,g){const C=y.f1;A[Q]?y.GEOSPreparedDistance(A[Q],g[I],C[I]):y.GEOSDistance(A[I],g[I],C[I]);const B=C.get();if(!B&&(m(A)||m(g)))throw new i('"distance" called with empty inputs');return B},A.distanceWithin=function(A,g,C){return Boolean(A[Q]?y.GEOSPreparedDistanceWithin(A[Q],g[I],C):y.GEOSDistanceWithin(A[I],g[I],C))},A.equals=function(A,g){return Boolean(y.GEOSEquals(A[I],g[I]))},A.equalsExact=function(A,g,C){return Boolean(y.GEOSEqualsExact(A[I],g[I],C))},A.equalsIdentical=function(A,g){return Boolean(y.GEOSEqualsIdentical(A[I],g[I]))},A.frechetDistance=function(A,g,C){const Q=y.f1;return null!=C?.densify?y.GEOSFrechetDistanceDensify(A[I],g[I],C.densify,Q[I]):y.GEOSFrechetDistance(A[I],g[I],Q[I]),Q.get()},A.fromGeoJSON=function(A,g){const C=g?.layout;switch(A.type){case"FeatureCollection":return function(A,g){const C=r[g||"XYZM"],Q={d:0,s:0,f:0};for(const I of A)z(I.geometry,Q,C);const B=y.buffByL4(3+Q.d+Q.s+2*Q.f);try{let g,E,D=y.U32,w=B.i4;D[w++]=Q.d,D[w++]=Q.s,g=w+Q.d,E=Math.ceil((g+Q.s)/2);const M={B:D,d:w,F:y.F64,f:E};for(const I of A)P(I.geometry,M,C);if(Q.s){y.geosify_geomsCoords(B[I]);const Q={B:y.U32,s:g,F:y.F64};for(const I of A)W(I.geometry,Q,C)}y.geosify_geoms(B[I]),D=y.U32;const i=A.length,G=Array(i);for(let I=0;I<i;I++){const g=A[I];G[I]=new H(D[w++],g.geometry.type,g)}return G}finally{B.freeIfTmp()}}(A.features,C);case"Feature":return V(A.geometry,C,A)}return V(A,C)},A.fromWKB=function(A,g){const C=y.b_r,Q=g?[g.fix].join():"";let B=C[Q];if(!B){const A=y.GEOSWKBReader_create();if(g){const{fix:I}=g;null!=I&&y.GEOSWKBReader_setFixStructure(A,+I)}B=C[Q]=A}const E=A.length,D=y.buffByL(E);try{y.U8.set(A,D[I]);const g=y.GEOSWKBReader_read(B,D[I],E);return new H(g)}finally{D.freeIfTmp()}},A.fromWKT=function(A,g){const C=y.t_r,Q=g?[g.fix].join():"";let B=C[Q];if(!B){const A=y.GEOSWKTReader_create();if(g){const{fix:I}=g;null!=I&&y.GEOSWKTReader_setFixStructure(A,+I)}B=C[Q]=A}const E=y.encodeString(A);try{const A=y.GEOSWKTReader_read(B,E[I]);return new H(A)}finally{E.freeIfTmp()}},A.geometryCollection=function(A,I){return l(7,A,I)},A.growMemory=function(A){const I=y.memory.buffer.byteLength,g="by"in A?I+A.by:A.to,C=I/65536,Q=Math.min(65535,Math.ceil(g/65536))-C;return Q>0&&(y.memory.grow(Q),y.updateMemory()),y.memory.buffer.byteLength},A.hausdorffDistance=function(A,g,C){const Q=y.f1;null!=C?.densify?y.GEOSHausdorffDistanceDensify(A[I],g[I],C.densify,Q[I]):y.GEOSHausdorffDistance(A[I],g[I],Q[I]);const B=Q.get();if(isNaN(B))throw new i('"hausdorffDistance" called with empty inputs');return B},A.initialize=async function(A){return await S(A)},A.initializeFromBase64=async function(){const A=atob("AGFzbQEAAAAB0ARMYAF/AX9gAX8AYAJ/fwF/YAJ/fwBgA39/fwF/YAN/f38AYAR/f39/AGABfwF8YAR/f39/AX9gBX9/f39/AGAFf39/f38Bf2AGf39/f39/AX9gA39/fwF8YAN/f3wBf2AAAGAGf39/f39/AGAEf39/fAF/YAh/f39/f39/fwF/YAJ/fwF8YAJ/fAF/YAF8AXxgB39/f39/f38Bf2AEf39/fABgBX9+fn5+AGAAAX9gB39/f39/f38AYAV/f39/fAF/YAt/f39/f39/f39/fwF/YAZ/f39/fn4Bf2AFf39/f34Bf2ACfHwBf2AEf35+fwBgCH9/f39/f39/AGAFf39+f38AYAJ8fAF8YAJ/fABgA39/fgBgAnx/AXxgBX9/f35+AX9gBX9/f398AGAEf398fwBgDH9/f39/f39/f39/fwF/YAZ/f3x/f38AYAV+f39/fwF/YA9/f39/f39/f39/f39/f38AYAp/f39/f39/f39/AGAEf39/fwF+YAV/f398fwF/YAd/f39/f35+AX9gAn98AXxgAn9+AGAEfn5+fgF/YAN/fHwAYAJ+fwF/YAR/f39+AX5gCH9/f39/f3x/AGAFf39/f38BfGAGfHx8fHx8AX9gA3x8fwF8YAR/fH9/AGADfH9/AGAEf39/fgF/YAJ+fgF8YAN/fHwBf2AEf39/fwF8YAN/f38BfWAEf35+fgBgAn9/AX5gAnx/AX9gAn5+AX1gA35+fgF/YAN+f38Bf2ADf35/AGADf398AGAFf3x8fHwBf2AFf39/fH8AAksCFndhc2lfc25hcHNob3RfcHJldmlldzEKcmFuZG9tX2dldAACA2Vudh9lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoAAEDjBCKEAEADgUAAQ4OBQAOBAwBAgACAwEBAQQCATEABAMCAgQCAwMXAwADAAMCAgQEGAQDCgEAAAUAABcDEwMCBQMOAQwODg4CAwAAARcAAwAMAgECBSIAAh4JBgkjHwUEAAMBAQYGBQADAwQDAAIABAQAAgIDBAgCJAQABQIGAwQfBQEFAgIEBgYGBgADAAACAQIyAgUFBQMDAQIKCgABABQUFAAEAQsEAQEFAAIFBQIGERELAwMCFzMlBQIFBgUFBgATBAICAgAABgoMAAUDAAYAAg4CAwEIAwgCAQQFAAIEAgAAAgIABDQCAwMCAAIDCgUFBAUAAwgEAQgDAQMABQkDAAQFAwQAAQIAAAYBAgECAgUCAQMDAQADBRsbAzU2AwAAAAABBQIBCQE3BQ8FAAUCAAMCBAQBAQQBAgAIAgIAAAEAAwM4CgEBAgMDAgMgAgo5AwUFAgUECDoiCQUAAwADAQMDAAMCCAEIAhAQAAAAEggFBhMGAgUABTsPBgQHCAYAAQUCPAQAAgAAAAICAgIEAgACAwICAAICAggAAgACAAADAgYAAgMMDAwABgYFAg8BCAAAGSYIBD0ZCAMVAxUAAwMAAAIAJQIDAgEDAgECAQMGCgIEAAMBAwgEAwUDAwQnAw8EAwQCAAkoEwoFAgkGBAQABQMDAwMEAgIDAAIAAAACAgUCAAUCAwQEBAQFBgQDABgAAgQCAAAEAgMDAwIAAwYJBgAGAgEBBQUGEwAEABkFBgICAgMDAwUABAMUAAIDAgMBCSkJBAApCQQBDgQJAQIAAAAAEgYCAAQ+AAMFFAQnBQMDAAAFBAQDCAEIAQMDBgQCAQ8GAgYCAQMDBQIBBgESAygDACoQBgENAhMBAQYAAAQEAQoCBQ8JBQUDAAMHABICHgIDBAUDBQMCAwQGBgMBAwQDAwADAgMFAgMEBAECAgIAAwAIAAAAAgMEAAABAAI/CAYDAAMEBAQABAAEAAIABAAEAAAEAAMCBQMCAgAAAggCAgQEAhgAAAQBBAEAAAcAAgYDAwAAAAMNBwIAAwUOBAICAwUCCQUFBQYFAgkCAQMCCQkJCQMAAwMGBgYGBgYGBggJCQgICAoJCQgICAkJCAgIAgIJBQYIAwIBBwICAgIrAgEBAQAJBAEBBwMgBwIDAAMAACQABgARCgAAChERChERAAAAAQEDGAEDAQESAQEEBCwtQAYELC0JDAMbAgUDAhsDBAMICAkJDw8PCQ8PGQQEHCYcGRAaEBoJCwUEBAYMQS4ICwguCAAEBAAEAQAFBQUDAAACAQIAAwABAgQEBQAKH0JDAAYCFEQUCQIBCQUCCAgBRQMXRggAFw4URytICAIAAgIJAwAAAgUAAAkJCAgIAQEDAwMACQkICAgICAACAgAACQMDBAQIAwMFAwIGAAIDBQMECgIJBgIDAAUFAAUFAQoEAAYICAIEAwkCBQUgAAQAAgIJBgMDCQkICAgIAQMBAgAKAQIJCQMBCQMECBMAAQEIBAEFCAYDAwUGAQkFAwMBSQ0FBAkJCAgIBAMZDAoGAAEBBwMDAwIBAQUQAQADAAEAAQETAwNKAioDBgkBBQQJAgkEBQEGDgEACR4BBQACAQMDAQAFAwgJAgAABQYIBQQEBAQEBAAEBAIFAwUAAAAFBAAAAAAAAAQjAgEAAAMCBQEABQQFAwECAAIBDQADAwMAAw0DAAEACwMAAQMEBAQEBAQFAgQCAgICAgMDAwICAgICDRICAgICAQICDRICAgABDQISAgIEAgICAgICCAICAgIAAAAAAAcAAAACDQACAwMDAwMDAgEBAAIAAAACAAQAAAIAAAINAgMDAwMCAAECAQAABwADAAABAAEAAgINAwMDAwMDAAAAAAAACgAAAwAYAAAAAwIDAAADBAAAAwQAAQADAAEABAABBwMAAQQCAAICAgIEAAACAggCAgQEAgIEAgIBAQAAAAAABQQAAwAAAg0AAwMCAQABAAAHDQADAQEAAgACAAcAAwAQAAEAAAMDAwQDBwABAwMQAg0AAwQAAAAAAgIAABADAwMABBIDAgAAAwMCAgICAgICAAIADQ4DEAAEAgICBAQEBC8EBQUIBAUFAC8BCAECEAMFBBYMAQAEFgwBAAUEAgAQAAABAAAADw8JCQYGBgkPDg4DBQAKBAQBCgQIBAIEAgEKBAgEAgQCCAgIBAoACgAKEREBAwMDAAABAwMDAQAAAAAAAAAAAAAAAAAAAQ8PCzALMAUVFQUVFRUVEQsLCwsLEQsLCwsLChwaHQodAwoKCgMcGgIdCh0KCgsLCwsLCwsLCwsLCwsLCwILCwMLBAYKBAYKBAQFAwEFAAEAAQADAQAGASEAAgIAAQEAAAEAAwEAAQAEAAQGIQQBBAgIBAgIAwMIAQMBBAUOBAMTAwQBAwAFAAEEBAQEAAIDAwMDAQMDAwMBAAYACQQFBQMDAgICAgQFBQMAAAAJBAMCAAICBAMKAwgDAAADAwAABQMAAwADAAAFAwADAAMAAAUDBgUBAwAABQMGBQEDBgIEEAEABAAAAAUDCQAEAQYAAA0EAAIBBAADAwMEBQUDAQADBAUFAgEAAAAEBQIEAwQDBAABAQQAAgABAwEQAAAJAwMDAwUIAgIAAgIDAAUEAQABAAEAAwAIAwABAAADBAUDBAQFBQEABAQBAAUFBAQDBQIFAgRLAAMEAwQDAwABAwMBAgQDAAEACQQCAwIAAgIEAwIBAQACAwkFAAUEGAQFAXAArgkFBwEBgAKAgAQNAwEAAQYIAX8BQeDqCAsHwhZ0Bm1lbW9yeQIAE2dlb3NpZnlfZ2VvbXNDb29yZHMAiA4cR0VPU0dlb21fY3JlYXRlUG9pbnRGcm9tWFlfcgDTBRtHRU9TR2VvbV9jcmVhdGVDb2xsZWN0aW9uX3IAuwIjR0VPU0dlb21fY3JlYXRlRW1wdHlDb21wb3VuZEN1cnZlX3IAyQUeR0VPU0dlb21fY3JlYXRlQ29tcG91bmRDdXJ2ZV9yAM0FIkdFT1NHZW9tX2NyZWF0ZUVtcHR5Q3VydmVQb2x5Z29uX3IAxgUdR0VPU0dlb21fY3JlYXRlQ3VydmVQb2x5Z29uX3IAxwUPZ2Vvc2lmeV9nZW9tc19yAIcODWpzb25pZnlfZ2VvbXMAhg4GbWFsbG9jADMQU1RSdHJlZV9jcmVhdGVfcgCFDhFTVFJ0cmVlX2Rlc3Ryb3lfcgCEDgRmcmVlAAIPU1RSdHJlZV9xdWVyeV9yAIIODkdFT1NEaXN0YW5jZV9yAMsGEVNUUnRyZWVfbmVhcmVzdF9yAP8NFFNUUnRyZWVfbmVhcmVzdEFsbF9yAP4NC0dFT1NfaW5pdF9yAIsQJEdFT1NDb250ZXh0X3NldEVycm9yTWVzc2FnZUhhbmRsZXJfcgDYDA5HRU9TRGlzam9pbnRfcgChDA1HRU9TVG91Y2hlc19yAMMLEEdFT1NJbnRlcnNlY3RzX3IAngsNR0VPU0Nyb3NzZXNfcgDXCgxHRU9TV2l0aGluX3IAjAoOR0VPU0NvbnRhaW5zX3IA2AkOR0VPU092ZXJsYXBzX3IAihAMR0VPU0NvdmVyc19yANwPD0dFT1NDb3ZlcmVkQnlfcgCjDwxHRU9TRXF1YWxzX3IAgA8TR0VPU1JlbGF0ZVBhdHRlcm5fcgDGDgxHRU9TUmVsYXRlX3IAgA4TR0VPU2lzVmFsaWREZXRhaWxfcgDXDBFHRU9TRXF1YWxzRXhhY3RfcgDCDBVHRU9TRXF1YWxzSWRlbnRpY2FsX3IAvwwZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAFEdFT1NEaXN0YW5jZVdpdGhpbl9yALEMF0dFT1NIYXVzZG9yZmZEaXN0YW5jZV9yAK4MHkdFT1NIYXVzZG9yZmZEaXN0YW5jZURlbnNpZnlfcgCsDBVHRU9TRnJlY2hldERpc3RhbmNlX3IApwwcR0VPU0ZyZWNoZXREaXN0YW5jZURlbnNpZnlfcgCjDApHRU9TQXJlYV9yAKIMDEdFT1NMZW5ndGhfcgCgDBNHRU9TTmVhcmVzdFBvaW50c19yAJ8MDUdFT1Npc0VtcHR5X3IAngwOR0VPU2lzU2ltcGxlX3IAnQwQR0VPU0dlb21UeXBlSWRfcgCcDBJHRU9TSW50ZXJzZWN0aW9uX3IAmwwWR0VPU0ludGVyc2VjdGlvblByZWNfcgCZDBBHRU9TRGlmZmVyZW5jZV9yAIQMFEdFT1NEaWZmZXJlbmNlUHJlY19yAP8LE0dFT1NTeW1EaWZmZXJlbmNlX3IA9gsXR0VPU1N5bURpZmZlcmVuY2VQcmVjX3IA8QsLR0VPU1VuaW9uX3IA6gsPR0VPU1VuaW9uUHJlY19yAOILEEdFT1NVbmFyeVVuaW9uX3IA3AsUR0VPU1VuYXJ5VW5pb25QcmVjX3IA1AsSR0VPU0dlb21fZGVzdHJveV9yAJsEDUdFT1NTZXRTUklEX3IAwgsPR0VPU05vcm1hbGl6ZV9yALoLFEdFT1NPcmllbnRQb2x5Z29uc19yALgLGUdFT1NNYWtlVmFsaWRXaXRoUGFyYW1zX3IApQscR0VPU01ha2VWYWxpZFBhcmFtc19jcmVhdGVfcgCdCyZHRU9TTWFrZVZhbGlkUGFyYW1zX3NldEtlZXBDb2xsYXBzZWRfcgCWCx9HRU9TTWFrZVZhbGlkUGFyYW1zX3NldE1ldGhvZF9yAJILDUdFT1NHZXRTUklEX3IAjQsLR0VPU3ZlcnNpb24AiAsUR0VPU0Nvb3JkU2VxX2dldFhZX3IAgwsWR0VPU0Nvb3JkU2VxX2Rlc3Ryb3lfcgD5ChBHRU9TR2VvbV9jbG9uZV9yAIsKFEdFT1NHZW9tX2dldEV4dGVudF9yAP8JDkdFT1NTaW1wbGlmeV9yAPoJHkdFT1NUb3BvbG9neVByZXNlcnZlU2ltcGxpZnlfcgDzCRZHRU9TV0tUUmVhZGVyX2NyZWF0ZV9yAPAJH0dFT1NXS1RSZWFkZXJfc2V0Rml4U3RydWN0dXJlX3IA7AkUR0VPU1dLVFJlYWRlcl9yZWFkX3IA6wkWR0VPU1dLVFdyaXRlcl9jcmVhdGVfcgDkCRVHRU9TV0tUV3JpdGVyX3dyaXRlX3IA3wkXR0VPU1dLVFdyaXRlcl9zZXRUcmltX3IA1wkkR0VPU1dLVFdyaXRlcl9zZXRSb3VuZGluZ1ByZWNpc2lvbl9yANMJIkdFT1NXS1RXcml0ZXJfc2V0T3V0cHV0RGltZW5zaW9uX3IA0QkWR0VPU1dLQlJlYWRlcl9jcmVhdGVfcgDNCR9HRU9TV0tCUmVhZGVyX3NldEZpeFN0cnVjdHVyZV9yAMYJFEdFT1NXS0JSZWFkZXJfcmVhZF9yAMUJFkdFT1NXS0JXcml0ZXJfY3JlYXRlX3IAwQkVR0VPU1dLQldyaXRlcl93cml0ZV9yAL4JIkdFT1NXS0JXcml0ZXJfc2V0T3V0cHV0RGltZW5zaW9uX3IAvAkcR0VPU1dLQldyaXRlcl9zZXRCeXRlT3JkZXJfcgC0CR5HRU9TV0tCV3JpdGVyX3NldEluY2x1ZGVTUklEX3IAiRAZR0VPU1dLQldyaXRlcl9zZXRGbGF2b3JfcgCHEA1HRU9TUHJlcGFyZV9yAIAQGkdFT1NQcmVwYXJlZEdlb21fZGVzdHJveV9yAJsEFkdFT1NQcmVwYXJlZENvbnRhaW5zX3IA/g8eR0VPU1ByZXBhcmVkQ29udGFpbnNQcm9wZXJseV9yAPcPF0dFT1NQcmVwYXJlZENvdmVyZWRCeV9yAPEPFEdFT1NQcmVwYXJlZENvdmVyc19yAOgPFUdFT1NQcmVwYXJlZENyb3NzZXNfcgDmDxZHRU9TUHJlcGFyZWREaXNqb2ludF9yAOIPGEdFT1NQcmVwYXJlZEludGVyc2VjdHNfcgDbDxZHRU9TUHJlcGFyZWRPdmVybGFwc19yANYPFUdFT1NQcmVwYXJlZFRvdWNoZXNfcgDVDxRHRU9TUHJlcGFyZWRXaXRoaW5fcgDPDxRHRU9TUHJlcGFyZWRSZWxhdGVfcgDMDxtHRU9TUHJlcGFyZWRSZWxhdGVQYXR0ZXJuX3IAxQ8bR0VPU1ByZXBhcmVkTmVhcmVzdFBvaW50c19yALwPFkdFT1NQcmVwYXJlZERpc3RhbmNlX3IAsw8cR0VPU1ByZXBhcmVkRGlzdGFuY2VXaXRoaW5fcgCqDxlHRU9TQnVmZmVyUGFyYW1zX2NyZWF0ZV9yAI4PIUdFT1NCdWZmZXJQYXJhbXNfc2V0RW5kQ2FwU3R5bGVfcgCJDx9HRU9TQnVmZmVyUGFyYW1zX3NldEpvaW5TdHlsZV9yAIQPIEdFT1NCdWZmZXJQYXJhbXNfc2V0TWl0cmVMaW1pdF9yAP8OJkdFT1NCdWZmZXJQYXJhbXNfc2V0UXVhZHJhbnRTZWdtZW50c19yAPoOIUdFT1NCdWZmZXJQYXJhbXNfc2V0U2luZ2xlU2lkZWRfcgDyDhZHRU9TQnVmZmVyV2l0aFBhcmFtc19yAO8OC19pbml0aWFsaXplAIsOBl9fdHJhcADvBwn+EAEAQQELrQmJAaMBigOjAaMBtw5nJjQWowGLAaMC8gGUDooOiQ7xDTQW7g3rDecNZ2emCOENpghnww7ZDTQWzg3LDTQWJmezDWevDaMBNBatA74MJia9DLwMuwy6DLkMuAy3DLYMtQy0DBazDCYmFrIMnwifCL0OwQyvDLAM3AGtDKoFqQXzA8YGiwGjAvIBqgypDKgMiwGjAvIBpgylDKQMrwSGDBY2lwGWBu8HgwwmTZUGJpQGlAaTDJIMkQyQDI8MjgyNDIwMiwyKDIkM6QHoAegB6QGNBo0GhQyWDJUMlAyHDJ0EZzQWggwWgQwWvwKLAoAMgwb+C4gG9QvtC4EGiQaMAooG/Qv7C/wL+Qv3C/gL9Av6C+UL8wvyC4cGhgbvC/AL6wvpC+gL5wvuC+wLggbkC+ML5guEBoEGrQvYC8IK4Qu+CuAL3QuABrsKxQHBCrwKvQrfC03ACsUKxArDCskKzArpAegBxwrKCsgKywr/Bd4Lvwq4AtsL2QvGCoAGlgOVA/AFlgOVA+QB/QXcCtkK1grWC03VC9AKTdsK0grTCp0DmgzRC94K3QrhCuMK6QHoAegB6QHgCuIKzwrTC9ALzwvSC98KxQGFBE2VBtoK2ArVCtQK0QpNvQu8C4MGxguIBsULwAv7BYoGxwvEC8ELnQP6BckLyAuHBoYGywvMC/8Fgga7C8oLvguEBvsFvwuJBowCNBauC5cBlgOVA/AFlgOVA5cB5AH9BaILTaELoAufC6MLxQEmmAuaC8UBkQOXC5kL6QWbC4sClQvmBYwCTZADkAOdA+cFkwuUC+YFiwKRCybkBYwCTZADkAOdA+cFjwuQC4UCiwKOCyaFAowCJuEF4QXiBZED4AXgBU2/AosCjAsm3gWMAsUBjgOOA4sLTYkLigveBb8CiwKGC9wFxQGOA44DhwtNhAuFC9wF8wryCvEKgguBC038CiaACyb/Cv0K/griBZED+gX2CvUK+gr7CukB6AHoAekB+Ar3CrgC8ArXBdcF9Aom5gruCu0K6QXqCuwK6ArrCuUK6QrkBeQBlwHRBdAFigO4CrcKtgq0CrMKsgqxCrAKrwq5CqwKqwqpCq0KrgrOBagKpgqlCqQKowrQBaEKygWgCp8KngqdCpwKmwqaCjQWFhY0FpkKFpgKFpYKZ5QK/AMWkwr8AxaSCvwDFsUFxQUWNBaJCogKhwr4A4YKhQq/Bb4FhAqDChadBJ0EFogDggqBCoAKNBY0lwE0Fme6Bf4J/Qn8CWf4CZcBtgX5CfQJ8gn3CfYJ9QmGA5cBFvYDsALuCZcB6QnoCagF6gnnCacF4wniCeUJ4QmjARbDCcIJJjQWwAm/CSY0Fha9CfsBuwn8AboJlgY0FugDrQOrDLcJuQm4CRboA7UJswm2CbEJsAn/A68JhhAmFoUQgxCqA4IQ/w/6D/gPNBb2Dyb1D/QP8g/zD5gJ7w/uD+0P6g/rD4YF7A8W6Q9nFucPZ5AJ4Q/gD5AJ3w/eD4wJjAnYD9cPiwmLCRbUD9MP8gHSD9EP0A/ODxbKD/cIxw/GD8QPww/JD8gPwg/BD8APvw++D70PFrsPug8mFrkPFrcPFrEPsA+vD64PrQ+sD6sPqQ+oD4oDNBakDzQWNBadD7wOTZwPFhaYD5cPNBb3CNgIlA+LAaMC8gGSD5EPkA+PDxaID8cINBaHD8cIFoYPhQ8WNJcB+w7+Dv0OTU3zBMYGwgitA/wO+A75DhYW6APxDvAO9w71DvYO8w70DhbrDuoOJvMErQPpDugOFucO5g7lDuQOFuMO4g4mJvME4Q7gDhbfDt4O3Q7cDhbbDtMDpQK1CLQI2g6zCBbZDqUC0wOyCLEI2A6wCBbXDtYO1Q7UDhbTDqUC0wOyCLEI0g6wCBbRDtMDpQK1CLQI0A6zCBbPDibCCM4OzQ7MDhbLDiYmJsoOFhYWwg5Nuw66DhaLAaMC8gG2DrUOtA6LAaMC8gGtDqwOqw6qDqkOFqcOpg6lDqQOow6iDvsHoQ6gDp8Ong6dDhacDhaaDpkOmA6XDpIOkw6RDo0OFhaMDqMBowGuCTSDDoEO/Q00vwcC2Qy4Ar8HNNQM1AT8DWf7DfoN+Q0mJvgNkQP3DdAH9g3QB9MEzwf1DfQN0gTKB/MN8g3CA9AE8A3vDe0N7A3CB+UN5g3kDeoN6Q3oDXjMBOMN4g3gDd8NS8EH3g3dDTQW3A3YDdcN1g3bDaMB1QTaDekG2gyODesG4gzhDOAM3wzeDKUC3QzcDNsM7wb1DPQM8wzyDPEMJvAM7wz2BvsM+gz5DPgM9wz2DPcG/wzJDsgO/gz9DPwMNBYW7QzsDOsM6gzpDOgM5wzmDKUC5QzkDOMMFuwG7AbPAk1N7gxNFvIG8QbPAiYm8AaFAhbyBvEGzwImJvAGhQIW9Qb0Bs8CJibzBoUCFvUG9AbPAiYm8waFAjQW1Q3UDdMNNBbSDdEN0A0Wzw3NDcwNyg24B7gHyQ3IDccNxg3FDRbEDcMNwg3BDa8HrwfADb8Nvg29DbwNFrsNug25DbgNtw21DbQNsg0WsQ2wDa4NrQ2sDasNqg2pDTQWxQGoDacNpg2lDaQNow2GDYUNhA2DDYINgQ2ADTQWxQGiDaENoA2fDZ4NnQ2NDYwNiw2KDYkNiA2HDb4E+gacDb4E+gabDRazA7MDigGKAYoBmAcmzAHMARazA7MDigGKAYoBmAcmzAHMARayA7IDigGKAYoBlgcmzAHMARayA7IDigGKAYoBlgcmzAHMARaaDZkNFpcNlg0WlA2TDRaSDZENFoQHkA1nFoQHjw1nFtYM1QyjATSXAdMM0gw0FrgCuALbBsoMzAzNDBbHDBbGDMUMigPXBtYG1gbXBhbEDBbDDBbJDMsMzgwW0QzQDM8MFsgMDALEAQrz3DuKEIEMAQh/AkAgAEUNACAAQQhrIgMgAEEEaygCACICQXhxIgBqIQUCQCACQQFxDQAgAkECcUUNASADIAMoAgAiBGsiA0GE0AQoAgBJDQEgACAEaiEAAkACQAJAQYjQBCgCACADRwRAIAMoAgwhASAEQf8BTQRAIAEgAygCCCICRw0CQfTPBEH0zwQoAgBBfiAEQQN2d3E2AgAMBQsgAygCGCEHIAEgA0cEQCADKAIIIgIgATYCDCABIAI2AggMBAsgAygCFCICBH8gA0EUagUgAygCECICRQ0DIANBEGoLIQQDQCAEIQYgAiIBQRRqIQQgASgCFCICDQAgAUEQaiEEIAEoAhAiAg0ACyAGQQA2AgAMAwsgBSgCBCICQQNxQQNHDQNB/M8EIAA2AgAgBSACQX5xNgIEIAMgAEEBcjYCBCAFIAA2AgAPCyACIAE2AgwgASACNgIIDAILQQAhAQsgB0UNAAJAIAMoAhwiBEECdCICKAKk0gQgA0YEQCACQaTSBGogATYCACABDQFB+M8EQfjPBCgCAEF+IAR3cTYCAAwCCwJAIAMgBygCEEYEQCAHIAE2AhAMAQsgByABNgIUCyABRQ0BCyABIAc2AhggAygCECICBEAgASACNgIQIAIgATYCGAsgAygCFCICRQ0AIAEgAjYCFCACIAE2AhgLIAMgBU8NACAFKAIEIgRBAXFFDQACQAJAAkACQCAEQQJxRQRAQYzQBCgCACAFRgRAQYzQBCADNgIAQYDQBEGA0AQoAgAgAGoiADYCACADIABBAXI2AgQgA0GI0AQoAgBHDQZB/M8EQQA2AgBBiNAEQQA2AgAPC0GI0AQoAgAiByAFRgRAQYjQBCADNgIAQfzPBEH8zwQoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgBEF4cSAAaiEAIAUoAgwhASAEQf8BTQRAIAUoAggiAiABRgRAQfTPBEH0zwQoAgBBfiAEQQN2d3E2AgAMBQsgAiABNgIMIAEgAjYCCAwECyAFKAIYIQggASAFRwRAIAUoAggiAiABNgIMIAEgAjYCCAwDCyAFKAIUIgIEfyAFQRRqBSAFKAIQIgJFDQIgBUEQagshBANAIAQhBiACIgFBFGohBCABKAIUIgINACABQRBqIQQgASgCECICDQALIAZBADYCAAwCCyAFIARBfnE2AgQgAyAAQQFyNgIEIAAgA2ogADYCAAwDC0EAIQELIAhFDQACQCAFKAIcIgRBAnQiAigCpNIEIAVGBEAgAkGk0gRqIAE2AgAgAQ0BQfjPBEH4zwQoAgBBfiAEd3E2AgAMAgsCQCAFIAgoAhBGBEAgCCABNgIQDAELIAggATYCFAsgAUUNAQsgASAINgIYIAUoAhAiAgRAIAEgAjYCECACIAE2AhgLIAUoAhQiAkUNACABIAI2AhQgAiABNgIYCyADIABBAXI2AgQgACADaiAANgIAIAMgB0cNAEH8zwQgADYCAA8LIABB/wFNBEAgAEF4cUGc0ARqIQICf0H0zwQoAgAiBEEBIABBA3Z0IgBxRQRAQfTPBCAAIARyNgIAIAIMAQsgAigCCAshACACIAM2AgggACADNgIMIAMgAjYCDCADIAA2AggPC0EfIQEgAEH///8HTQRAIABBJiAAQQh2ZyICa3ZBAXEgAkEBdGtBPmohAQsgAyABNgIcIANCADcCECABQQJ0QaTSBGohBAJ/AkACf0H4zwQoAgAiBkEBIAF0IgJxRQRAQfjPBCACIAZyNgIAIAQgAzYCAEEYIQFBCAwBCyAAQRkgAUEBdmtBACABQR9HG3QhASAEKAIAIQQDQCAEIgIoAgRBeHEgAEYNAiABQR12IQQgAUEBdCEBIAIgBEEEcWoiBigCECIEDQALIAYgAzYCEEEYIQEgAiEEQQgLIQAgAyICDAELIAIoAggiBCADNgIMIAIgAzYCCEEYIQBBCCEBQQALIQYgASADaiAENgIAIAMgAjYCDCAAIANqIAY2AgBBlNAEQZTQBCgCAEEBayIAQX8gABs2AgALC0cBAX8Cf0EBIAAgAEEBTRshAANAAkAgABAzIgEEfyABBUHU5gQoAgAiAQ0BQQALDAILIAERDgAMAAsACyIARQRAEEIACyAAC8cBAQJ/AkBBzOYEKAIAIgBFDQAgACkDMEKAfoNCgNasmfTIk6bDAFEEQCAAKAIUIgFBAEgEQCAAIAFBAWoiATYCFCABDQJBzOYEIAAoAhA2AgAPCyAAIAAoAhRBAWsiATYCFCABDQFBzOYEIAAoAhA2AgACQCAAKQMwQv8Bg0IBUgRAIAAhAQwBCyAAKAIsQdAAayEBIAAQ3QYLIAFB0ABqENwGDwsgAEEwaiIAKAIIIgEEQEEBIAAgAREDAAtBzOYEQQA2AgALC3QBAX9B0OYEQdDmBCgCAEEBajYCACAAQdAAayIAQQA2AiwgAEHgzAQoAgA2AghB3MwEKAIAIQMgACACNgIEIAAgATYCACAAIAM2AgwgAEEwaiIBQoDWrJn0yJOmwwA3AwAgAEHdBjYCOCAAQQE2AiwgAQgAC40GAQl/IwBBEGsiBSQAQQEgAEHfAGpBcHEiBiIAIABBAU0bIggiACAAQQ9qQXBxIgIgACACSxsiAEEPcUUEQAJ/QTAgAEGwf0sNABpBMAJ/IABBsH9PBEBB8M8EQTA2AgBBAAwBC0EAQRAgAEELakF4cSAAQQtJGyICQRxqEDMiAEUNABogAEEIayEBAkAgAEEPcUUEQCABIQAMAQsgAEEEayIHKAIAIglBeHEgAEEPakFwcUEIayIAQRBBACAAIAFrQQ9NG2oiACABayIDayEEIAlBA3FFBEAgASgCACEBIAAgBDYCBCAAIAEgA2o2AgAMAQsgACAEIAAoAgRBAXFyQQJyNgIEIAAgBGoiBCAEKAIEQQFyNgIEIAcgAyAHKAIAQQFxckECcjYCACABIANqIgQgBCgCBEEBcjYCBCABIAMQyAMLAkAgACgCBCIBQQNxRQ0AIAFBeHEiAyACQRBqTQ0AIAAgAiABQQFxckECcjYCBCAAIAJqIgEgAyACayICQQNyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAEgAhDIAwsgAEEIagsiAEUNABogBSAANgIMQQALIQBBACAFKAIMIAAbIQELIAVBEGokACABIgBFBEACf0EAIQFB2OYEKAIAIgBFBEBB2OYEQezmBDYCAEHu5gRB/QA7AQBB7OYEQYABOwEAQdjmBCgCACEACyAIQQNqQQJ2QQFqIQIDQEEAIQUCQAJAIABFDQAgAEHg6gRGDQACQCAAQQRqIgVBD3FFBEAgAC8BAiIDIAJrQQNxQQAgAiADSRsgAmoiBCADTw0BIAAgAyAEayIBOwECIAAgAUH//wNxQQJ0aiIAIAQ7AQIgAEEAOwEAIABBBGoiBUEPcUUNAgsACyACIANLDQEgAC8BACECAkAgAUUEQEHY5gQgAkECdEHg5gRqNgIADAELIAEgAjsBAAsgAEEAOwEACyAFDAILIAAiAS8BAEECdEHg5gRqIQAMAAsACyEACyAABEAgBgRAIABBACAG/AsACyAAQdAAag8LEAgACwsAIABB0ABrEN0GCz4BAX8CQEHM5gQoAgAiAEUNACAAKQMwQoB+g0KA1qyZ9MiTpsMAUg0AIAAoAgwQsAMAC0HczAQoAgAQsAMACwkAQb81EOEHAAtzAQJ/IwBBEGsiAyQAAkAgACgCkAggACgClAhyRQ0AIAMgAjYCDCAAQQRqIgRB/wcgASACENcCQQBMDQAgACgCkAgiAQRAIAMgBDYCAEH+NCADIAERAwAMAQsgBCAAKAKgCCAAKAKUCBEDAAsgA0EQaiQACyAAIAAtAAtBgAFxQQd2BEAgACgCCBogACgCABACCyAACy8BAX9BBBAGIgBB9MoENgIAIABBtMYENgIAIABByMYENgIAIABB5MYEQdIGEAUACyMAIAArAwAgACsDCCABKwMAIAErAwggAisDACACKwMIENACC9YBAQx8IAArAwAiCSABKwMAIgWhIQMgAisDCCEGIAErAwghBAJAIAUgAisDACIKYg0AIAQgBmINACADIAOiIAArAwggBKEiAyADoqCfDwsgCiAFoSIHIAOiIAYgBKEiCCAAKwMIIgsgBKEiDKKgIAcgB6IgCCAIoqAiDaMiDkQAAAAAAAAAAGUEQCADIAOiIAwgDKKgnw8LIA5EAAAAAAAA8D9mBEAgCSAKoSIDIAOiIAsgBqEiAyADoqCfDwsgDZ8gByAEIAuhoiAIIAUgCaGioSANo5miCzcBAX8gACgCACIAQZjYBEcEQCAAIAAoAgRBAWsiATYCBCABQX9GBEAgACAAKAIAKAIIEQEACwsLfQEDfyABEFQiAkH4////B0kEQAJAAkAgAkELTwRAIAJBB3IiBEEBahADIQMgACAEQf////8HazYCCCAAIAM2AgAgACACNgIEDAELIAAgAjoACyAAIQMgAkUNAQsgAkUNACADIAEgAvwKAAALIAIgA2pBADoAACAADwsQPwALkAEBAX8gAEEwayEBIAApAwBCgH6DQoDWrJn0yJOmwwBRBEAgASABKAIUIgAgAEEfdSIAcyAAa0EBajYCFEHM5gQoAgAiACABRwRAIAEgADYCEEHM5gQgATYCAAtB0OYEQdDmBCgCAEEBazYCACABKAIoDwtBzOYEKAIARQRAQczmBCABNgIAIABBIGoPCxAIAAuwAQEEfwJAIAAgAUYNACAAIAAoAgAoAuABEQAAIAEgASgCACgC4AERAAAgACgCACEDRwRAIAAgAygC4AERAAAiACABIAEoAgAoAuABEQAAIgFKIAAgAUhrDwsgACADKAIwEQAABEAgASABKAIAKAIwEQAADQELIAAgACgCACgCMBEAAARAQX8PCyABIAEoAgAoAjARAAAEQEEBDwsgACABIAAoAgAoAtwBEQIAIQILIAIL4gEBBn8gACgCBCICIAAoAggiBEkEQCACIAEoAgA2AgAgACACQQRqNgIEDwsCQCACIAAoAgAiAmsiBUECdSIHQQFqIgNBgICAgARJBEBB/////wMgBCACayIEQQF1IgYgAyADIAZJGyAEQfz///8HTxsiA0GAgICABE8NASADQQJ0IgQQAyIGIAVqIgMgASgCADYCACADIAdBAnRrIQEgBQRAIAEgAiAF/AoAAAsgACAEIAZqNgIIIAAgA0EEaiIFNgIEIAAgATYCACACBEAgAhACCyAAIAU2AgQPCxAJAAsQDAALZAEDfyAAKAIAIgMEQCADIgEgACgCBCICRwRAA0AgAkEEayICKAIAIQEgAkEANgIAIAEEQCABIAEoAgAoAgQRAQALIAIgA0cNAAsgACgCACEBCyAAIAM2AgQgACgCCBogARACCwvnCAINfwJ+QcjVBEEANgIAIAApAwAhDyMAQSBrIgEkAAJAIABFDQAgD0KAfoMiD0KA1qyZ9MiTpsMAUSEIIAAhAiMAQRBrIgMkACABQgA3AwAgAUEDNgIYIAFCADcDECABQgA3AwgCQAJAAkACQAJAQcTVBCgCACIFRQRAIAFBCDYCGAwBCyABIAU2AgxBwNUEKAIAQQJqIgBFBEAgAUEINgIYDAELIABBAWsiBkUNASADIAVBAWoiBDYCDCAFLQAAIgBB/wFHBEAgA0EMaiAAENUGGiADKAIMIQQLIAMgBEEBaiIANgIMIAQtAAAiCkH/AUYEf0EABSADQQxqEJYCIAMoAgwiAGoLIQkgAyAAQQFqNgIMIANBDGoQlgIhBCADIAMoAgwiADYCCCAAIARqIQUDQCADKAIIIAVPDQIgA0EIaiIEEJYCIQAgBBCWAiEEIAZBAWsiBg0ACyABIABBAWo2AhAgBEUEQCABQQg2AhgMAQsgAyAEIAVqQQFrIgY2AgQgAkEwayELQQAhAANAAkAgA0EEahCtBCIErCEOAkACQCAEQQBKBEAgDiAJIAogCCACENQGIgVFBEAgASAGNgIIIAEgDjcDACACKQMAQoHWrJn0yJOmwwBSBH8gAkEgagUgAkEEaygCAAshACABQQY2AhggASAANgIUDAYLIAhFDQEgAyACKQMAQoHWrJn0yJOmwwBSBH8gAkEgagUgAkEEaygCAAsiBDYCACAERQ0HIAsoAgAiBEUNByAFIAQgAyAFKAIAKAIQEQQARQ0BIAEgBjYCCCABIA43AwAgAygCACEAIAFBBjYCGCABIAA2AhQMBQsgBEUiBSAAciEEIAUNASAIRQ0CIAIpAwBCgdasmfTIk6bDAFIEfyACQSBqBSACQQRrKAIACyIMRQ0HIAsoAgAiBUUNByAAIQQCfyMAQRBrIgckACAJBEAgByAJIA6nQX9zajYCDANAIAdBDGoQlgIiDQRAIA2tIAkgCkEBIAIQ1AYhACAHIAw2AgggACAFIAdBCGogACgCACgCEBEEAEUNAQsLIAdBEGokACANRQwBC0EAIAIQzAIAC0UNASABQQY2AhggASAMNgIUIAEgBjYCCCABIA43AwAMBAsgACEECyADIAMoAgQiBTYCACADEK0EIgAEQCADIAAgBWoiBjYCBCAEIQAMAgUgAUEINgIYDAMLAAsLIAEgBjYCCCABIA43AwAgAikDAEKB1qyZ9MiTpsMAUgR/IAJBIGoFIAJBBGsoAgALIQAgAUEGNgIYIAEgADYCFAsgA0EQaiQADAMLIAggAhDMAgALQQEgAhDMAgALQQEgAhDMAgALIAEoAhgiAEEDRg0AIABBCEYNACAPQoDWrJn0yJOmwwBSDQAgAkEYayABKQMAIg8+AgAgAkEUayABKAIINgIAIAJBEGsgASgCDDYCACACQQxrIAEoAhA2AgAgAkEIayABKAIUNgIAQcjVBCAPPgIACyABQSBqJAALBgAgABACC9ICAQd/IwBBEGsiAyQAAkACQAZAIANBBGogABDSASIGLQAAQQFHDQEgACAAKAIAQQxrKAIAaiIFKAIEIQcgBSgCGCEIBkACQCAFLQBQQQFGBEAgBSgATCEEDAELIANBDGoiCSAFKAIcIgQ2AgAgBEGY2ARHBEAgBCAEKAIEQQFqNgIECwZAIAlB0NkEECEiBEEgIAQoAgAoAhwRAgAhBBkgAyQAIANBDGoQDwkACyADQQxqEA8gBSAENgBMIAVBAToAUAsgCCABIAEgAmoiAiABIAdBsAFxQSBGGyACIAUgBMAQpAENAiAAIAAoAgBBDGsoAgBqIgEgASgCEEEFchDNBxkgAyQAIAYQYQkACwcAIAMkABARGgZAIAAgACgCAEEMaygCAGoQ1AEZIAMkAAZAEAQZIAMkABAIAAsJAAsQBAwCCwsgBhBhCyADQRBqJAAgAAsgACAAQfTKBDYCACAAQcTHBDYCACAAQQRqIAEQuAQgAAs2AQF/IAAoAgAhASAAQQA2AgAgAQRAIAEoAgAiAARAIAEgADYCBCABKAIIGiAAEAILIAEQAgsLZQEBfAJAAkACQCAAKAIADgMBAgACCyABtrsPCyAAKwMQIgJEAAAAAAAA8D9kBEAgASACoxCgASAAKwMQog8LIAArAwgiAkQAAAAAAAAAAGENACABIAKiEKABIAArAwijIQELIAELjAEBAn8gACgCECIBBH8gAQUjACECIAAQpgECQAZAIAAoAgAgACgCFBDDASECBwAhASACJABBxNUEQdDiATYCAEHA1QRBADYCACABEBVByNUEKAIAQQFGBEAgARARGhAEDAILCQALIAAoAhAhASAAIAI2AhAgAUUNACABIAEoAgAoAgQRAQALIAAoAhALC98DAQV/IwBBEGsiBCQAIAQgACgCACIFQQhrKAIAIgM2AgwgBCAAIANqNgIEIAQgBUEEaygCADYCCCAEKAIEIQYCQCAEKAIIIgUgAkEAEG0EQCAEKAIMIQAjAEFAaiIBJAAgAUFAayQAQQAgBiAAGyEDDAELIwBBQGoiAyQAIAAgBk4EQCADQgA3AhwgA0IANwIkIANCADcCLCADQgA3AhQgA0EANgIQIAMgAjYCDCADIAU2AgQgA0EANgI8IANCgYCAgICAgIABNwI0IAMgADYCCCAFIANBBGogBiAGQQFBACAFKAIAKAIUEQ8AIABBACADKAIcGyEHCyADQUBrJAAgByIDDQAjAEFAaiIDJAAgA0EANgIQIAMgATYCDCADIAA2AgggAyACNgIEQQAhACADQRRqQQBBJ/wLACADQQA2AjwgA0EBOgA7IAUgA0EEaiAGQQFBACAFKAIAKAIYEQkAAkACQAJAIAMoAigOAgABAgsgAygCGEEAIAMoAiRBAUYbQQAgAygCIEEBRhtBACADKAIsQQFGGyEADAELIAMoAhxBAUcEQCADKAIsDQEgAygCIEEBRw0BIAMoAiRBAUcNAQsgAygCFCEACyADQUBrJAAgACEDCyAEQRBqJAAgAwswAQF/IAAoAgAhAiAAIAE2AgAgAgRAIwAhAQZAIAIgACgCBBEBABkgASQAEAgACwsLogICA38CfCAALQAAIgIgAS0AAEcEQEF/QQEgAhsPCwJAIAAoAgQiAiABKAIEIgNHDQAgACgCCCICIAEoAggiA0cNACAAKAIMIgIgASgCDCIDRw0AIAEoAhghAwJAIAAoAhgiBAR/QQEhAiADRQ0BIAQrAwAiBSADKwMAIgZjBEBBfw8LIAUgBmQNAUF/IQIgBCsDCCIFIAMrAwgiBmMNASAFIAZkBUF/QQAgAxsLIgINAAJ/QX9BACABKAIwIgEbIAAoAjAiAkUNABpBASEAAkAgAUUNAEF/IAIrAwAiBSABKwMAIgZjDQEaIAUgBmQNAEF/IQAgAisDCCIFIAErAwgiBmMNACAFIAZkIQALIAALIQILIAIPCyACIANKIAIgA0hrC6kBAQJ/IwBBEGsiAiQAIAJBIBADIgM2AgQgAkKYgICAgISAgIB/NwIIIANBtzkpAAA3ABAgA0GvOSkAADcACCADQac5KQAANwAAIANBADoAGAZAIAAgAkEEaiABEGghABkgAiQAIAIsAA9BAEgEQCACKAIMGiACKAIEEAILCQALIAIsAA9BAEgEQCACKAIMGiACKAIEEAILIABBrOUANgIAIAJBEGokACAAC2wBA3wCfwJAIAIrAwAiBSAAKwMAIgMgASsDACIEIAMgBGMbZkUNACAFIAMgBCADIARkG2VFDQAgAisDCCIFIAArAwgiAyABKwMIIgQgAyAEYxtmRQ0AQQEgBSADIAQgAyAEZBtlDQEaC0EACwtJACAAKAIAIQAgARA3IQEgASAAKAIMIAAoAggiAGtBAnVJBH8gACABQQJ0aigCAEEARwVBAAtFBEAQzQQACyAAIAFBAnRqKAIAC/wBAQJ/IAAoAgQgAC0ACyIDIgJB/wBxIAJBgAFxQQd2GyICIAFJBEAgASACayICBEAgAiADQYABcUEHdgR/IAAoAghB/////wdxQQFrBUEKCyIDIAAoAgQgAC0ACyIBQf8AcSABQYABcUEHdhsiAWtLBEAgACADIAIgA2sgAWogASABEM8ECyAAKAIAIAAgAC0AC0GAAXFBB3YbIgMgAWogAkEAEM4EGiABIAJqIQECQCAALQALQYABcUEHdgRAIAAgATYCBAwBCyAAIAFB/wBxOgALCyABIANqQQA6AAALDwsgACAAKAIAIAAgAC0AC0GAAXFBB3YbIAEQwwcLJwEBfyAAIAEoAgAgASABLAALIgBBAEgiAhsgASgCBCAAIAIbEF0aC80KAgV/CX4jAEHgAGsiBSQAIARC////////P4MhCiACIASFQoCAgICAgICAgH+DIQsgAkL///////8/gyIMQiCIIQ8gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCwwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCELIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACELQgAhAQwDCyALQoCAgICAgMD//wCEIQtCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASANhEIAIQFQBEBCgICAgICA4P//ACELDAMLIAtCgICAgICAwP//AIQhCwwCCyABIA2EUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyANQv///////z9YBEAgBUHQAGogASAMIAEgDCAMUCIGG3lCwABCACAGG3ynIgZBD2sQW0EQIAZrIQYgBSkDWCIMQiCIIQ8gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAogAyAKIApQIggbeULAAEIAIAgbfKciCEEPaxBbIAYgCGtBEGohBiAFKQNIIQogBSkDQCEDCyAHIAlqIAZqQf//AGshBgJAIApCD4YiDkIgiEKAgICACIQiAiABQiCIIgR+IhAgA0IPhiIRQiCIIgogD0KAgASEIg1+fCIPIBBUrSAPIANCMYggDoRC/////w+DIgMgDEL/////D4MiDH58Ig4gD1StfCACIA1+fCAOIA4gEUKAgP7/D4MiDyAMfiIRIAQgCn58IhAgEVStIBAgECADIAFC/////w+DIgF+fCIQVq18fCIOVq18IAMgDX4iEiACIAx+fCIRIBJUrUIghiARQiCIhHwgDiAOIBFCIIZ8Ig5WrXwgDiANIA9+Ig0gCiAMfnwiDCABIAJ+fCICIAMgBH58IgNCIIggAiADVq0gDCANVK0gAiAMVK18fEIghoR8IgIgDlStfCACIBAgBCAPfiIMIAEgCn58IgRCIIggBCAMVK1CIIaEfCIKIBBUrSAKIANCIIZ8IgMgClStfHwiCiACVK18IAogAyAEQiCGIgIgASAPfnwiASACVK18IgIgA1StfCIEIApUrXwiA0KAgICAgIDAAINCAFIEQCAGQQFq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